综述
南加州大学华人博士提出的新模型NeROIC,可以从图像创建 3D 模型,这引领着图形学领域的创新浪潮。这项前沿技术能够将普通照片转化为高度逼真的3D模型,为我们带来了突破性的创作和设计可能性。在深度学习的推动下,NeROIC以其卓越的易用性和卓越的真实感,为图形学领域开启了新的篇章。
将照片转化为3D模型一直是图形学领域的重大挑战。不同的光线、相机型号以及环境因素会对生成效果产生深远影响,限制了模型的实际应用。然而,NeROIC通过引入新的模型架构和算法,成功地克服了这些挑战,实现了高度准确和逼真的3D模型生成。
神经渲染技术的引入为图形学领域带来了全新的机遇。借助深度神经网络,我们能够自动合成图像,从而节省时间和精力。NeROIC作为神经渲染技术的杰出代表,能够将几张二维照片转化为完整的、逼真的三维模型,无需人工干预。
本文主要描述在腾讯云服务器上部署、安装NeROIC,以及运行NeROIC示例。这项工作为什么重要?是因为在论文发布的近两年之后,AI技术发展迅猛,导致NeROIC在新的环境下无法运行。本文提供了一个在腾讯云CVM云主机之上一定能运行的方案。
购买腾讯云服务器
我是在新加坡地域(国内区域我试了,也是可以的,但对于github要绑定hosts)购买的GN7.2XLARGE32,操作系统是 Ubuntu Server 20.04 LTS 64位,镜像ID是 img-22trbn9x,后台自动安装GPU驱动版本见下图(GPU驱动版本 450.102.04,CUDA版本 10.2.89, cuDNN版本 7.6.5),这一步非常关键,NeROIC的兼容性是很差的。选错了后面就非常折腾,甚至就搞不定。
你要hands on来解决,就需要修改https://github.com/snap-research/NeROIC/blob/master/environment.yaml这个文件中的pytorch=1.7.1=py3.8_cuda10.2.89_cudnn7.6.5_0配合你选的服务器、python版本、GPU驱动、CUDA版本和cuDNN版本。然后就可能有一系列的配置和代码要改,不值当。
购买成功后,等待十几分钟(因为有后台自动安装GPU驱动的过程,相对于CPU的服务器,可以登陆的时间会晚一些),就可以ssh登陆服务器来执行后续步骤了。
安装配置
初始化
本地电脑使用ssh ubuntu@【腾讯云CVM IP地址】,鉴权后登陆。示例如下:
sudo apt-get update
sudo apt update
安装Conda
wget https://repo.anaconda.com/archive/Anaconda3-2023.03-Linux-x86_64.sh
sh Anaconda3-2023.03-Linux-x86_64.sh
安装完成后,需要exit登出后再ssh登陆进来。
安装NeROIC
git clone https://github.com/snap-research/NeROIC.git
cd NeROIC
conda env create -f environment.yaml
conda activate neroic
sudo apt-get install graphicsmagick-imagemagick-compat
写到这里,其实大家就已经可以按照https://github.com/snap-research/NeROIC/blob/master/README.md中的步骤运行NeROIC了。后面我主要记录一下我的实操过程。
运行example
首先下载README.md中链接的milkbox_dataset数据集,非常关键的一步是将数据集中的图片全部转为png格式的,否则跑不过。
然后将数据集打包上传到上述服务器的/home/ubuntu/NeROIC/data目录(需要使用mkdir data创建)中,并解压成如下图所示:
(base) ubuntu@VM-0-11-ubuntu:/NeROIC/data/milkbox_dataset$ ls
image_names.pkl images images_mask poses_bounds.npy pts.pkl test_img_id.txt
运行优化几何网络的训练example
然后,就可以在/NeROIC目录下运行优化几何网络的example:
python train.py --config configs/milkbox_geometry.yaml --datadir ./data/milkbox_dataset
这个脚本缺省会运行30个epochs,而在我选择的服务器上,运行一个epochs就需要4936.6秒,则全部30个epochs跑下来就是一天多时间。如果仅仅希望快速尝试,则可以修改/home/ubuntu/NeROIC/configs/milkbox_geometry.yaml文件中num_epochs=1。
如果还是觉得运行时间很长,可以使用nohup后台运行
nohup python train.py --config configs/milkbox_geometry.yaml --datadir ./data/milkbox_dataset &
然后可以在/home/ubuntu/NeROIC/nohup.out中看到进度。例如:
tail -f /home/ubuntu/NeROIC/nohup.out
训练完成后,在~/NeROIC/logs目录中获得:
(neroic) ubuntu@VM-0-11-ubuntu:~/NeROIC/logs/milkbox_geometry/version_0$ ls
args.txt config.txt events.out.tfevents.1697757775.VM-0-11-ubuntu.243830.0 hparams.yaml milkbox_geometry_000000
多次训练,version_后面跟着的数字会增加。其中milkbox_geometry_000000目录的内容为:
运行从学习的几何中提取法线的example
从学习的几何中提取法线。
python generate_normal.py
--config configs/milkbox_geometry.yaml
--ft_path logs/milkbox_geometry/epoch=0.ckpt
--datadir data/milkbox_dataset
这里epoch=0.ckpt而不是epoch=29.ckpt,因为我们之前的num_epochs设置为1,而不是30。
生成完成后,~/NeROIC目录下会多一个results目录。里面有:
(neroic) ubuntu@VM-0-11-ubuntu:~/NeROIC/results/cached_rays/milkbox_geometry$ ls
0_normal.png 12_normal.png 15_normal.png 19_normal.png 22_normal.png 26_normal.png 29_normal.png 31_normal.png 35_normal.png 38_normal.png 40_normal.png 5_normal.png 8_normal.png version_1
10_normal.png 13_normal.png 16_normal.png 20_normal.png 23_normal.png 27_normal.png 2_normal.png 32_normal.png 36_normal.png 39_normal.png 42_normal.png 6_normal.png rays.pkl
11_normal.png 14_normal.png 18_normal.png 21_normal.png 24_normal.png 28_normal.png 30_normal.png 34_normal.png 37_normal.png 3_normal.png 4_normal.png 7_normal.png version_0
优化渲染网络
修改配置/home/ubuntu/NeROIC/configs/milkbox_rendering.yaml中的num_epochs为1,示例如下:
python train.py
--config configs/milkbox_rendering.yaml
--ft_path logs/milkbox_geometry/epoch=0.ckpt
--datadir data/milkbox_dataset
同理,这里epoch=0.ckpt。
训练完成后,在~/NeROIC/logs目录中会多一个milkbox_rendering目录,内容有:
其中,milkbox_rendering_spiral_000000_rgb_map_coarse.mp4为效果视频。
总结
NeROIC的应用领域广泛而多样。无论是手办收藏者还是游戏从业者,都能从这项技术中获益匪浅。传统的手办建模方式需要耗费大量时间和精力,然而借助NeROIC,只需几张照片,即可快速生成一个完整的3D模型。游戏制作也能从NeROIC技术中受益,通过简单拍摄物体照片,合成逼真的3D模型,为游戏场景带来完美的视觉效果。
NeROIC不仅仅追求准确的模型形状,更注重提升生成模型的真实感。传统模型在新环境中常常显得格格不入,而NeROIC通过引入新的模型架构,成功解决了从图像中创建虚拟物体所带来的照明和真实性问题。这一突破性创新使得NeROIC生成的模型在各种光照条件下都能呈现出逼真的效果,增强了模型的真实感。
NeROIC模型的设计独具匠心。它将物体的渲染与输入图像中的环境照明分开,通过多阶段的处理,实现对模型的精准控制。首先,几何网络通过结合输入图像、分割遮罩和相机参数估计,建立一个辐射场,获取物体的几何形状。其次,NeROIC通过从学习到的密度场中估计表面法线,找到物体对光线的反应,进一步提升真实感。当然,这种方式问题也有,就是慢。生成结果上,就算只有1次epoch,整体下来也有几个小时的时间。比我预想的要慢。
NeROIC是一项引人注目的前沿技术,能够将图像转化为高度逼真的3D模型。它不仅具备卓越的易用性,还能显著提升生成模型的真实感。随着NeROIC的不断发展和创新,我们可以期待更多令人惊叹的应用场景和创作成果的实现。现在就跟随NeROIC的脚步,开启图形学领域的新篇章吧!