目录
参考:https://github.com/Totoro97/NeuS
一、系统配置
1. 操作系统:ubuntu20.04
2. GPU:Nvidia RTX3090
3. CUDA:11.3
4. python3.8.0
5. torch==1.8.0
6. opencv_python==4.5.2.52
7. trimesh==3.9.8
8. numpy==1.19.2
9. pyhocon==0.3.57
10. icecream==2.1.0
11. tqdm==4.50.2
12. scipy==1.7.0
13. PyMCube==0.1.2
二、安装
git clone https://github.com/Totoro97/NeuS.git
cd NeuS
pip install -r requirements.txt
按照以上代码在终端中运行就可以下载此项目的软件包并且完成conda环境的配置。
可能会遇到的问题:
1.pytorch安装报错
我电脑安装的cuda是11.3的,但是配置文件里面的pytorch是1.8版本的,我在pytorch官网上没有找到cuda11.3对应的pytoch==1.8版本的,如果直接安装pytorch1.8版本的话训练时会报错使用不了GPU加速,因此我安装cuda11.1版本的pytorch,可以进行训练,以下是安装指令。
pip install torch==1.8.0+cu111 -f https://download.pytorch.org/whl/cu111/torch_stable.html
2.缺少安装依赖项
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
tensorboard 2.13.0 requires protobuf>=3.19.6, which is not installed.
tensorboard 2.13.0 requires requests<3,>=2.21.0, which is not installed.
google-auth 2.18.0 requires urllib3<2.0, which is not installed.
pandas 2.0.1 requires numpy>=1.20.3; python_version < "3.10", but you have numpy 1.19.2 which is incompatible.
我是新创建的NeuS环境,所以会遇到一些依赖项没有安装,按照它报错的提示把这些依赖项安装就可以了。
三、数据集文件夹设置
1.数据集链接
https://drive.google.com/drive/folders/1Nlzejs4mfPuJYORLbDEUDWlc9IZIbU0C
2.数据集组织
<case_name>
|-- cameras_xxx.npz # camera parameters
|-- image
|-- 000.png # target image for each view
|-- 001.png
...
|-- mask
|-- 000.png # target mask each view (For unmasked setting, set all pixels as 255)
|-- 001.png
...
3.以dtu_scan24为例
我复现实验的数据集:NeuS复现的一个DTU数据集
NeuS
|
| public_data
| | dtu_scan24
| | |-- cameras_large.npz
| | |-- cameras_sphere.npz
| | |-- image
| | |-- 000.png
| | |-- 001.png
| | ...
| | |-- mask
| | |-- 000.png
| | |-- 001.png
| | ...
在NeuS文件夹里面创建public_data文件夹,然后把dtu_scan24文件夹放进去数据集的放置就可以了。
四、训练(以dtu_scan24为例)
1.无掩码训练
python exp_runner.py --mode train --conf ./confs/womask.conf --case dtu_scan24
2.有掩码训练
python exp_runner.py --mode train --conf ./confs/wmask.conf --case dtu_scan24
3.从训练模型中提取表面(有掩码)
python exp_runner.py --mode validate_mesh --conf ./confs/wmask.conf --case dtu_scan24 --is_continue
4. 视图插值(有掩码)
python exp_runner.py --mode interpolate_0_1 --conf ./confs/wmask.conf --case dtu_scan241 --is_continue
五、复现结果
1.无掩码训练得到的网格优化(60万次)
2. 有掩码训练得到的网格优化(30万次)
3.预训练有掩码监督训练得到的网格优化(30万次)
4. 渲染得到的视频(有掩码监督)
NeuS render
ps:如果使用无掩码监督的权重渲染视频的话得不到物体的模型哦,打开是一个非常模糊的景象。总之复现出来的结果与原论文上面的结果差距是非常大的,都是训练30万次,可是结果是很差。在rtx3090上训练有掩码监督的话需要大概7个小时,没有掩码的话大概需要9个小时。总之NeuS 主要的关注点即是几何重建,往往能得到相比之前方法更优秀的代理几何结果,最大贡献就在于将体渲染和 SDF 有机结合,二者建立联系,共同优化。