当前位置: 首页 > news >正文

GaussianMesh运行指南

源代码:https://github.com/IGLICT/GaussianMesh

1. 配置环境 Set up

参考readme即可正常安装,没遇到什么问题

Basic Requirements

CUDA>=11
g++

Conda

conda create -n jittor-gaussian python=3.9
conda activate jittor-gaussian
python3.9 -m pip install jittor
python -m pip install libigl
pip install cmake plyfile tqdm icecream

Compile the submodules

The simple-knn and diff_gaussian_rasterizater modules should be compiled with cmake and make:

cd gaussian-renderer/diff_gaussian_rasterizater
cmake .
make -j
cd ../../scene/simple-knn
cmake .
make -j

You will get simpleknn.so and CudaRasterizer.so in simple-knn and diff_gaussian_rasterizater folders.

The ACAP modules should be compiled:

cd ACAP
unzip pyACAPv1.zip
chmod +x install_OpenMesh.sh
install_OpenMesh.sh
python setup.py install

 2. 准备数据集

这个代码最大的问题就是没有公开的数据集和详细的如何准备数据集的教程

下载Nerf数据集

        为了最简,本教程不打算使用colmap的自制数据集,而是用现有的数据集,可以通过如下链接下载:

https://drive.google.com/drive/folders/128yBriW1IG_3NJ5Rp7APSTZsJqdJdfc1

        然后随便选择哪个训练都可以,我选择的是chair,因为主包在运行Mani-Gs恰好有这个,就顺手拿过来了

制作proxy_mesh

训练网格

下载如下代码:

git clone https://github.com/bennyguo/instant-nsr-pl

        按照官方的readme去运行这个代码:我遇到的主要问题在于安装tiny-cuda-nn, 核心问题在于cuda版本,根据自己的显卡或者电脑的计算架构89,我cuda11.7基本make就不会成功,换成cuda12.1就成功了。

 然后可以用如下命令去运行训练mesh:

python launch.py --config configs/nerf-blender.yaml --gpu 0 --train dataset.scene=lego tag=example

其实我训练了很多次都失败了,直接用nerf这个yaml配置文件去训练的话会报错:

RuntimeError: CUDA error: invalid configuration argument
CUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1.
Compile with `TORCH_USE_CUDA_DSA` to enable device-side assertions.

这个问题说明:tiny-cuda-nn 的 FullyFusedMLP 在我的显卡上触发CUDA error: invalid configuration argument,说明 ray_chunk / 网络宽度 / batch 大小 仍超出 tiny-cuda-nn 的 硬件限制

最彻底的解决方法是:彻底禁用 tiny-cuda-nn,改用纯 PyTorch 实现

需要将nerf-blender.yaml这个文件的model部分替换为我的配置文件,注意要配置导出mesh

texture:

name: volume-radiance

input_feature_dim: ${model.geometry.feature_dim}

dir_encoding_config:

otype: SphericalHarmonics

degree: 4

mlp_network_config:

otype: VanillaMLP # ← 关键:PyTorch 纯实现

activation: ReLU

output_activation: Sigmoid

n_neurons: 64

n_hidden_layers: 2

export:

export_mesh: true

mesh_resolution: 512

简化修复网格

然后用meshlab将得到的复杂网格进行简化:
1. 用Meshlab打开exp/nerf-blender-chair/example@20250716-213922/save/it20000-mc256.obj
2.简化

  1. Filters → Remeshing, Simplification → Quadric Edge Collapse Decimation
  2. Target number of faces: 15000
  3. Apply

3. 清理

  1. Filters → Cleaning and Repairing → Remove Duplicate Vertices
  2. Filters → Cleaning and Repairing → Remove Zero Area Faces

(各点一次即可)
4. 导出
        File → Export Mesh As… → 格式选 PLY → 文件名 proxy_clean.ply

 3. 训练Mesh based Gaussian

!先debug

        在运行这个代码进行训练的时候,我发现训练过程的loss到中途会变成Nan,然后在7000次和30000次迭代的点云结果图像都只有一个点,经过我连续几天辛辛苦苦的debug,终于发现了问题所在,需要将读取图片转为jt变量的一个函数修改,在general_utils.py里,否则在训练的时候计算ssim就会发现有些图像始终事有nan或者数值溢出的

def PILtoJittor(pil_image, resolution):pil_rgb = pil_image.resize(resolution).convert("RGB")np_rgb  = np.array(pil_rgb, dtype=np.float32) / 255.0   # [0,1]# 避开 Jittor float32 内存踩坑tensor  = jt.array(np_rgb.astype(np.float64).copy()).astype('float32')return tensor.permute(2, 0, 1).clamp(0.0, 1.0)

开始训练

用如下指令即可训练:替换为你对应路径即可

python train_mesh_gaussian.py  -s /home/cyberbus/xgh/GaussianMesh/data/nerf_recon_dataset/nerf_synthetic/chair -m /home/cyberbus/xgh/GaussianMesh/output/test_with_final_proxy_mesh_with_loss_modified --input_mesh /home/cyberbus/xgh/instant-nsr-pl/proxy_final.ply                                            

得到结果形式如下:

4. 编辑,变形

       进行编辑作者给的示例命令如下:

python edit.py --camera_path output/excavator --object_name excavator \
--object_gaussian output/excavator/point_cloud/iteration_30000/point_cloud.ply \
--object_origin_mesh data/mesh_sequnce/1.obj \
--object_deform_mesh data/mesh_sequnce/4.obj \
--render_path output/excavator/deform

因此还需要准备变形用的一些列mesh

制作mesh_squence

        用现有的一些方法生成一系列的mesh sequence,用如下命令去生成,这个代码文件我放在资源里:

python arap_gen.py \ --in_mesh /home/cyberbus/xgh/GaussianMesh/data/chair/proxy_final.obj \--out_dir /home/cyberbus/xgh/GaussianMesh/data/chair/arap_seq

进行edit

      

 进行编辑的命令如下:

python edit.py \     --camera_path /home/cyberbus/xgh/GaussianMesh/output/test_with_final_proxy_mesh_with_loss_modified \ --object_name chair \--object_gaussian /home/cyberbus/xgh/GaussianMesh/output/test_with_final_proxy_mesh_with_loss_modified/point_cloud/iteration_30000/point_cloud.ply \--object_origin_mesh /home/cyberbus/xgh/GaussianMesh/data/chair/proxy_final.obj \--mesh_sequence_dir /home/cyberbus/xgh/GaussianMesh/data/chair/arap_seq \--render_path output/chair/deform6

        可以看到需要的参数还有一个额外的mesh_sequence,这个edit.py作者给的代码其实也不全,至少不支持生成视频,所以需要自己进行修改,这个不难,可以自行修改。难的是如何生成一系列的变形后的mesh

5. 结论

        用尽九牛二虎之力,总算是跑出来了,展示一个变形效果的图片吧

GaussianMesh效果

   

http://www.dtcms.com/a/303651.html

相关文章:

  • GaussDB 查看会话连接数
  • 大模型的开发应用(十九):AIGC基础
  • 【Unity3D实例-功能-移动】角色移动-通过WSAD(Rigidbody方式)
  • sqli-labs通关笔记-第23关 GET字符型注入(单引号闭合-过滤注释符 手工注入+脚本注入两种方法)
  • 自然语言处理NLP(2)
  • 【0基础PS】PS工具详解--选择工具--对象选择工具
  • Redis未授权访问的利用的几种方法原理以及条件
  • 嵌入式单片机中位带操作控制与实现
  • Synopsys:默认报告精度(report_default_significant_digits变量)
  • 【Python】自动化GIT提交
  • C语言(长期更新)第6讲:函数(二)
  • 复现《Local GDP Estimates Around the World》论文的完整指南
  • 历史版本的vscode下载地址
  • 模型压缩的一些整理
  • Fortran实现 3维反距离加权(IDW)插值算法
  • ETH 交易流程深度技术详解
  • Datawhale AI夏令营 task2 笔记问题汇总收集
  • 力扣988. 从叶结点开始的最小字符串
  • 商城系统-项目测试
  • 信息搜集目的原则方法思路工具(二)
  • DDoS攻击防御:从5G到T级防护方案全对比
  • 利用软件定义无线USRP X410、X440 电推进无线原型设计
  • Sentinel 不同层面的流控保护
  • 【图像处理基石】基于暗光图像恢复颜色有哪些难点?
  • resnet中的Bottleneck
  • Google Doppl:重新定义虚拟试衣的AI革命
  • MCP协议全景解析:从工业总线到AI智能体的连接革命
  • 结合二八定律安排整块时间
  • 正向代理和反向代理的理解
  • 【安卓笔记】OOM与内存优化