[保姆级]腾讯云服务器上实操NeROIC

2023-10-20 14:46:25 浏览数 (1)

综述

南加州大学华人博士提出的新模型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地址】,鉴权后登陆。示例如下:

代码语言:txt复制
sudo apt-get update
sudo apt update

安装Conda

代码语言:txt复制
wget https://repo.anaconda.com/archive/Anaconda3-2023.03-Linux-x86_64.sh
sh Anaconda3-2023.03-Linux-x86_64.sh

安装完成后,需要exit登出后再ssh登陆进来。

安装NeROIC

代码语言:txt复制
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创建)中,并解压成如下图所示:

代码语言:txt复制
(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:

代码语言:txt复制
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后台运行

代码语言:txt复制
nohup python train.py --config configs/milkbox_geometry.yaml --datadir ./data/milkbox_dataset &

然后可以在/home/ubuntu/NeROIC/nohup.out中看到进度。例如:

代码语言:txt复制
tail -f /home/ubuntu/NeROIC/nohup.out

训练完成后,在~/NeROIC/logs目录中获得:

代码语言:txt复制
(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

从学习的几何中提取法线。

代码语言:txt复制
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目录。里面有:

代码语言:txt复制
(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,示例如下:

代码语言:txt复制
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的脚步,开启图形学领域的新篇章吧!

0 人点赞