云端训练Instant NeRF
神经辐射场 (NeRF) 使用基于 2D 图像集合的简单全连接神经网络合成复杂场景的新颖视图。
论文《Representing Scenes as Neural Radiance Fields for View Synthesis》在 ECCV 2020 上发表,并获得最佳论文荣誉奖。 点击这里查看项目网页。
NeRF 展示了令人印象深刻的视图合成,但速度很慢,比如为每个场景训练 1 到 2 天,在单个 NVIDIA V100 GPU 上合成一帧需要数十秒。 因此进行了一些研究来减少计算时间。
SIGGRAPH 2022 论文《具有多分辨率哈希编码的即时神经图形基元》显着减少了训练和帧渲染的时间,例如训练时间为几秒,帧渲染时间为几毫秒。 巨大的进步引起了很多关注。 这是他们的项目网页 ,他们的 GUI 工具也可以在这里找到。
我对使用 instant-nerf 很感兴趣,因为它速度很快,但我的本地计算机上没有带有 GUI 和 GPU 的开发环境。 所以我在Google Cloud/GCP上搭建了这样一个环境。
可以在 Google Colab 上运行示例笔记本,但是使用 GUI 工具很有趣,并且可以让我们轻松理解其行为。
1、创建虚拟机实例
创建虚拟机的第一步是选择机器类型。 构建某些包需要一定量的 RAM,因此使用 4 个 CPU,其中一个具有 26GB 内存。 另外还需要GPU,所以选择了最便宜的NVIDIA T4。 即使使用T4,你也不必等待很长时间才能看到训练场景。
至于机器映像,使用基于 Debian 10 的深度学习 VM for TensorFlow Enterprise 2.9 和 CUDA 11.3。 更简单的映像,基于 Debian 10 的带有 CUDA 11.0 的深度学习虚拟机,应该可以工作,但在尝试 instant-ngp 时遇到了一些错误。
使用抢占式虚拟机,us-central1 中实例的每小时成本为 0.17 美元。
2、设置GUI环境
当你 ssh 到实例时,会看到该消息。 键入 y 自动安装 NVIDIA 驱动程序。
This VM requires Nvidia drivers to function correctly. Installation takes ~1 minute.
Would you like to install the Nvidia driver? [y/n] y
安装 chrome 桌面:下一步是在实例上安装 chrome 远程桌面。 这是官方文档 。
sudo apt update
sudo apt install --assume-yes wget tasksel
wget https://dl.google.com/linux/direct/chrome-remote-desktop_current_amd64.deb
sudo apt-get install --assume-yes ./chrome-remote-desktop_current_amd64.deb
sudo DEBIAN_FRONTEND=noninteractive apt install --assume-yes xfce4 desktop-base dbus-x11 xscreensaver
sudo bash -c 'echo "exec /etc/X11/Xsession /usr/bin/xfce4-session" > /etc/chrome-remote-desktop-session'
sudo systemctl disable lightdm.service
从本地计算机访问远程桌面站点 。 然后,转到:设置另一台计算机 > 开始 > 下一步 > 授权。
复制 Debian Linux 的命令。
DISPLAY= /opt/google/chrome-remote-desktop/start-host --code="xxxxxxxxxx" --redirect-url="https://remotedesktop.google.com/_/oauthredirect" --name=$(hostname)
将命令粘贴到 VM 实例上并输入您的 PIN。
在远程访问页面上,你将看到你的虚拟机。 单击该链接并输入你的 PIN 码。
3、设置Instant-NGP
安装依赖包:
sudo apt install -y \
build-essential libatlas-base-dev libboost-filesystem-dev \
libboost-graph-dev libboost-program-options-dev \
libboost-system-dev libboost-test-dev libcgal-dev \
libeigen3-dev libfreeimage-dev libgflags-dev libglew-dev \
libglfw3-dev libgoogle-glog-dev libmetis-dev libomp-dev \
libopenexr-dev libqt5opengl5-dev libsuitesparse-dev \
libxcursor-dev libxi-dev libxinerama-dev qtbase5-dev
升级cmake:
sudo apt remove --purge cmake
pip install cmake
hash -r
cmake --version
cmake version 3.24.0
安装Vulkan。这是官方文档。
cd ~
mkdir vulkan
cd vulkan
wget https://sdk.lunarg.com/sdk/download/latest/linux/vulkan-sdk.tar.gz
tar xf vulkan-sdk.tar.gz
source $(ls|grep 1.)/setup-env.sh
将文件复制到系统目录:
sudo cp -r $VULKAN_SDK/include/vulkan/ /usr/local/include/
sudo cp -P $VULKAN_SDK/lib/libvulkan.so* /usr/local/lib/
sudo cp $VULKAN_SDK/lib/libVkLayer_*.so /usr/local/lib/
sudo mkdir -p /usr/local/share/vulkan/explicit_layer.d
sudo cp $VULKAN_SDK/etc/vulkan/explicit_layer.d/VkLayer_*.json /usr/local/share/vulkan/explicit_layer.d
sudo ldconfig # You can ignore some warnings for now
构建Instant-NGP:
cd ~
git clone --recursive https://github.com/nvlabs/instant-ngp
cd instant-ngp
cmake . -B build
cmake --build build --config RelWithDebInfo -j
使用 Fox Images测试 Instant-NGP。
在远程桌面上,你可以为 Fox Images运行 instant-ngp。 通过将目标 FPS 设置为 2.0,可以看到高分辨率输出。
cd ~/instant-ngp
./build/testbed --scene data/nerf/fox
上述命令有效,但我们的目标是渲染 3D NERF 玩具枪或我们的图像。 NeRF 需要输入图像的相机姿势。 至于狐狸图像,相机姿势包含在 data/nerf/fox 的 Transforms.json 文件中。 下一节描述如何预测相机姿势。
4、为任何图像设置 Instant-NGP
COLMAP 是一种广泛使用的通用运动结构 (SfM) 工具。 我们可以用这个工具预测相机姿势。
安装 Ceres 求解器。COLMAP 依赖于 Ceres Solver。
cd ~
git clone --depth 1 -b 2.1.0 https://github.com/ceres-solver/ceres-solver.git
cd ceres-solver
mkdir build
cd build
cmake .. -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF
make -j
sudo make install
安装COLMAP。
cd ~
git clone --depth 1 -b 3.7 https://github.com/colmap/colmap
cd colmap
mkdir build
cd build
cmake ..
make -j3 # updated to -j3 from -j as 26GB RAM is not enough
sudo make install
pip install opencv-python
使用 Fox Images从头开始测试 Instant-NGP。
首先,移动或删除原来的transforms.json。
cd ~/instant-ngp/data/nerf/fox
# Move or remove transforms.json
mkdir backup
mv transforms.json backup/
# Output directory
mkdir colmap_text
通过远程桌面启动 COLMAP。
colmap gui
通过菜单“文件”>“新建项目”创建一个新项目:
- 使用处理 > 特征提取 > 提取提取图像的特征点
- 使用“处理”>“特征匹配”>“运行”来匹配特征点
- 使用重建估计相机位姿 > 开始重建
- 使用“文件”>“将模型导出为文本”将文件保存。 选择刚才创建的colmap_text目录
终止COLMAP
通过运行以下脚本生成transforms.json
cd ~/instant-ngp/data/nerf/fox
python ~/instant-ngp/scripts/colmap2nerf.py --colmap_matcher exhaustive --aabb_scale 4
像以前一样运行 instant-ngp
cd ~/instant-ngp
./build/testbed --scene data/nerf/fox
5、适用于任何图像的即时 NGP
5.1 NeRF会议室
NeRF 项目页面提供了一些 NeRF 数据集。 我们使用 nerf_llff_data/room/images
。 该数据由 41 张图像组成。
使用 COLMAP 估计相机姿势。 将 colmap 输出保存在 ~instant-ngp/data/room/colmap_text 中。
生成transforms.json
cd ~/instant-ngp/data/room
python ~/instant-ngp/scripts/colmap2nerf.py --colmap_matcher exhaustive --aabb_scale 2
运行 Instant-ngp
cd ~/instant-ngp
./build/testbed --scene data/room
正如我们所看到的,令人印象深刻的是,显示器上的光反射和环境光遮挡渲染得非常好。
5.2 NERF 玩具枪
下一个目标是NERF玩具枪。 我从儿子那里借来的,用手机拍了26张照片。
列图结果
最后结果
输出并不完美,但仍然令人惊叹,因为它仅基于 26 张图像生成。
6、结束语
NeRF 是一项令人印象深刻的技术,可以从 2D 图像集合生成 3D 场景。 Instant-NGP / Instant-NeRF 可实现非常快速的模型训练和渲染新颖的视图。 最好有一个带GPU的GUI开发环境来尝试一下。 设置远程桌面环境可以让云服务用户轻松享受NeRF。
原文链接:Instant NeRF on Google Compute Engine via Chrome Remote Desktop
BimAnt翻译整理,转载请标明出处