论文 | 项目页面 | 视频
通用神经规范场
Fangneng Zhan、Lingjie Liu、Adam Kortylewsk、Christian Theobalt
国际学习表示会议(ICLR),2023年
更新
- 2023年9月:我们发布了改进的UV映射和学习的TriPlane投影,可以在没有任何正则化的情况下学习规范变换。
- 2023年4月:这是基本实现的初始版本。我们正在扩展这项工作,完整实现和整理后的代码将在稍后发布。
安装
安装环境:
conda create -n Gauge python=3.8
conda activate Gauge
pip install torch torchvision
pip install tqdm trimesh scikit-image opencv-python configargparse lpips imageio-ffmpeg kornia lpips tensorboard
学习UV映射
3D坐标被转换为2D流形(如球面和正方形)以索引神经场,从而可以获得用于场景编辑的显式(视角相关)2D纹理。进入UV-Mapping目录进行尝试。
1. 数据集和检查点
可以从Google Drive下载五个来自DTU数据集的预处理场景。
可以从Google Drive下载这五个场景的预训练检查点。
将检查点保存在UV-Mapping/
中。
2. 测试
要使用编辑后的纹理进行渲染(例如,对于DTU scan83),运行以下命令(你也可以在dtu_test.sh
中设置target_texture为你的自定义纹理路径):
bash dtu_test.sh 83
要使用原始纹理进行渲染,将target_texture设置为'None'
并运行上述命令。
3. 训练
直接运行以下命令(你也可以在dtu_train.sh
中设置data_root为你的自定义数据集路径):
bash dtu_train.sh 83
学习三平面投影
我们不使用从3D空间到三平面的正交投影,而是直接学习由渲染损失驱动的灵活映射与神经场。进入TriPlane目录进行尝试。
1. 数据集
请参考Synthetic-NeRF数据集。
2. 使用学习的投影进行训练
运行以下命令:
python3 main.py --config configs/lego.txt
3. 不使用学习的投影进行训练
在configs/lego.txt
中将gauge_start设置为大于总迭代次数的数字,例如30001。然后运行:
python3 main.py --config configs/lego.txt
用于视图合成的InfoInv
推导出的InfoInv证明,正弦位置编码实际上是对坐标应用相位变换,并且本质上允许保留相对位置信息。简单地包含InfoInv可以提升基于网格和基于MLP的神经场的性能。进入InfoInv目录运行实验。1. 数据集
请参考Synthetic-NeRF数据集。注意修改configs/lego.txt
中的数据集路径。
2. 训练
要包含InfoInv,运行以下命令:
python3 main.py --config configs/lego.txt --infoinv
要排除InfoInv,运行以下命令:
python3 main.py --config configs/lego.txt
InfoInv对表面重建的有效性也在PET-NeuS中得到证明。
待办事项
- ✅ 学习UV映射用于纹理编辑。
- ✅ 学习三平面投影用于视图合成。
- ✅ 在神经场中包含InfoInv。
- ⬜️ 学习离散变换用于哈希映射。
引用
如果您在研究中使用此代码,请引用我们的论文。
@inproceedings{zhan2023general,
title={General Neural Gauge Fields},
author={Zhan, Fangneng and Liu, Lingjie and Kortylewski, Adam and Theobalt, Christian},
booktitle={The Eleventh International Conference on Learning Representations},
year={2023}
}
致谢
感谢NeuTex、K-Plane、TensoRF发布他们的实现代码。