NeRF需要的仅仅是注意力吗?
Mukund Varma T1*、 Peihao Wang2*、 Xuxi Chen2、 Tianlong Chen2、 Subhashini Venugopalan3、 Zhangyang Wang2
1印度理工学院马德拉斯分校,2德克萨斯大学奥斯汀分校,3谷歌研究院
* 表示贡献相同。
本仓库基于IBRNet的官方仓库构建
- 新闻! GNT被ICLR 2023接收 🎉。我们更新的跨场景训练检查点应该可以推广到复杂场景,甚至在不进一步调优的情况下达到与SOTA每场景优化方法相当的结果!
- 新闻! 我们的工作在10/17/22由Atlas教授在MIT视觉与图形学研讨会上的演讲中进行了介绍。
简介
我们提出了可泛化NeRF Transformer(GNT),这是一种纯粹的、统一的基于transformer的架构,可以从源视图高效地实时重建神经辐射场(NeRFs)。 与之前针对每个场景优化隐式表示并反转手工设计的渲染方程的NeRF工作不同,GNT通过封装两个基于transformer的阶段,实现了可泛化的神经场景表示和渲染。 GNT的第一阶段称为视图transformer,利用多视图几何作为基于注意力的场景表示的归纳偏置,通过聚合相邻视图上极线的信息来预测坐标对齐的特征。 GNT的第二阶段称为射线transformer,通过光线行进渲染新视图,并使用注意力机制直接解码采样点特征序列。 我们的实验表明,当在单个场景上优化时,GNT可以成功重建NeRF而无需显式渲染公式,甚至由于可学习的射线渲染器,在复杂场景上将PSNR提高了约1.3 dB↑。 当在各种场景中进行训练时,GNT在转移到前向LLFF数据集(LPIPS ~20%↓,SSIM ~25%↑)和合成blender数据集(LPIPS ~20%↓,SSIM ~4%↑)时始终达到最先进的性能。 此外,我们展示了可以从学习的注意力图中推断深度和遮挡,这意味着纯注意力机制能够学习物理上合理的渲染过程。 所有这些结果使我们更接近于将transformer作为图形学中的"通用建模工具"的诱人希望。
安装
克隆此仓库:
git clone https://github.com/MukundVarmaT/GNT.git
cd GNT/
代码使用python 3.8、cuda == 11.1、pytorch == 1.10.1进行测试。其他依赖项包括:
torchvision
ConfigArgParse
imageio
matplotlib
numpy
opencv_contrib_python
Pillow
scipy
imageio-ffmpeg
lpips
scikit-image
数据集
我们重用了IBRNet的训练和评估数据集。所有数据集必须下载到项目文件夹内的data/
目录中,并且必须遵循以下组织结构:
├──data/
├──ibrnet_collected_1/
├──ibrnet_collected_2/
├──real_iconic_noface/
├──spaces_dataset/
├──RealEstate10K-subset/
├──google_scanned_objects/
├──nerf_synthetic/
├──nerf_llff_data/
我们参考IBRNet的仓库来下载和准备数据。为方便起见,我们在下面整理了说明:
mkdir data
cd data/
# IBRNet captures
gdown https://drive.google.com/uc?id=1rkzl3ecL3H0Xxf5WTyc2Swv30RIyr1R_
unzip ibrnet_collected.zip
# LLFF
gdown https://drive.google.com/uc?id=1ThgjloNt58ZdnEuiCeRf9tATJ-HI0b01
unzip real_iconic_noface.zip
## [重要] 删除测试集中出现的场景
cd real_iconic_noface/
rm -rf data2_fernvlsb data2_hugetrike data2_trexsanta data3_orchid data5_leafscene data5_lotr data5_redflower
cd ../
# Spaces dataset
git clone https://github.com/augmentedperception/spaces_dataset
# RealEstate 10k
## 确保安装了ffmpeg - sudo apt-get install ffmpeg
git clone https://github.com/qianqianwang68/RealEstate10K_Downloader
cd RealEstate10K_Downloader
python3 generate_dataset.py train
cd ../
# Google Scanned Objects
gdown https://drive.google.com/uc?id=1w1Cs0yztH6kE3JIz7mdggvPGCwIKkVi2
unzip google_scanned_objects_renderings.zip
# Blender dataset
gdown https://drive.google.com/uc?id=18JxhpWD-4ZmuFKLzKlAw-w5PpzZxXOcG
unzip nerf_synthetic.zip
# LLFF dataset (eval)
gdown https://drive.google.com/uc?id=16VnMcF1KJYxN9QId6TClMsZRahHNMW5g
unzip nerf_llff_data.zip
使用方法
训练
# 单场景
# python3 train.py --config <config> --train_scenes <scene> --eval_scenes <scene> --optional[other kwargs]. 示例:
python3 train.py --config configs/gnt_blender.txt --train_scenes drums --eval_scenes drums
python3 train.py --config configs/gnt_llff.txt --train_scenes orchids --eval_scenes orchids
# 跨场景
# python3 train.py --config <config> --optional[other kwargs]. 示例:
python3 train.py --config configs/gnt_full.txt
要解码粗细输出,设置 --N_importance > 0
,并使用单独的细网络,使用 --single_net = False
预训练模型
数据集 | 场景 | 下载 | |
---|---|---|---|
LLFF | 蕨类 | 检查点 | 渲染结果 |
花 | 检查点 | 渲染结果 | |
堡垒 | 检查点 | 渲染结果 | |
角 | 检查点 | 渲染结果 | |
叶子 | 检查点 | 渲染结果 | |
兰花 | 检查点 | 渲染结果 | |
房间 | 检查点 | 渲染结果 | |
霸王龙 | 检查点 | 渲染结果 | |
合成 | 椅子 | 检查点 | 渲染结果 |
鼓 | 检查点 | 渲染结果 | |
无花果 | 检查点 | 渲染结果 | |
热狗 | 检查点 | 渲染结果 | |
乐高 | 检查点 | 渲染结果 | |
材料 | 检查点 | 渲染结果 | |
麦克风 | 检查点 | 渲染结果 | |
船 | 检查点 | 渲染结果 | |
泛化 | 不适用 | 检查点 | 渲染结果 |
要重用预训练模型,请下载所需的检查点并将其放置在适当的目录中,命名为 gnt_<场景名称>
(单场景)或 gnt_<full>
(泛化)。然后进行评估/渲染。为了促进未来的研究,我们还提供了我们方法在几个基准场景上的半分辨率渲染结果。如果上述检查点有任何问题,请随时提出问题。
评估
# 单场景
# python3 eval.py --config <配置> --eval_scenes <场景> --expname <输出目录> --run_val --可选[其他参数]。示例:
python3 eval.py --config configs/gnt_llff.txt --eval_scenes orchids --expname gnt_orchids --chunk_size 500 --run_val --N_samples 192
python3 eval.py --config configs/gnt_blender.txt --eval_scenes drums --expname gnt_drums --chunk_size 500 --run_val --N_samples 192
# 跨场景
# python3 eval.py --config <配置> --expname <输出目录> --run_val --可选[其他参数]。示例:
python3 eval.py --config configs/gnt_full.txt --expname gnt_full --chunk_size 500 --run_val --N_samples 192
渲染
要为真实的前向场景渲染平滑相机路径的视频。
# python3 render.py --config <配置> --eval_dataset llff_render --eval_scenes <场景> --expname <输出目录> --可选[其他参数]。示例:
python3 render.py --config configs/gnt_llff.txt --eval_dataset llff_render --eval_scenes orchids --expname gnt_orchids --chunk_size 500 --N_samples 192
代码最近为发布进行了整理,可能包含一些小错误。如有任何问题,请随时提出。
引用本工作
如果您发现我们的工作/代码实现对您自己的研究有用,请引用我们的论文。
@inproceedings{
t2023is,
title={Is Attention All That Ne{RF} Needs?},
author={Mukund Varma T and Peihao Wang and Xuxi Chen and Tianlong Chen and Subhashini Venugopalan and Zhangyang Wang},
booktitle={The Eleventh International Conference on Learning Representations },
year={2023},
url={https://openreview.net/forum?id=xE-LtsE-xx}
}