NSDT工具推荐Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割

神经辐射场 (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翻译整理,转载请标明出处