计算机视觉方面的顶级学术会议 CVPR 2020 不久前刚结束,不过会上仍有不少论文值得一读。
今天我们介绍的这篇 PIFuHD,在大会上入选口头报告 (oral presentation)就非常有趣,它提出了一种全新的基于神经网络方法:只用一张人物全身正面照片,几分钟的计算时间,就可以自动重建高分辨率细节丰富的3D模型。
不仅如此,和已经存在的类似技术相比,它还可以“猜”出照片里并不存在的身体部位,比如背部:
更好玩的是,由于它可以自动生成一个标准格式的3D模型文件 (.obj),你还可以用它来进一步进行动作绘制,制作各种奇奇怪怪的视频……
我挑了一张自己不太标致的半侧身照片,试着跑了下代码(后附教程),效果虽不完美,重建的3D模型有明显噪音,脚部处理的不太好,而且跟本人长得也不算太像……不过模型的还是很令人惊喜,而且用 Google Colab 生成模型只用了三分钟:
为了避免到这里就读不下去了,我们还是放点比本文作者更养颜的效果图来看看吧……
那么,这个神经网络是如何工作的呢?
基本原理
在计算机视觉技术的范畴里,对人体进行3D模型重建有好几种方向。
最经典的方法是采用多台相机,从多个角度拍摄对象的照片,以及采用手持的结构光扫描设备,进行全方位的扫描,再在专业的软件中进行拼贴重建。2014年史密森学会制作前美国总统奥巴马的3D肖像,就是用的这种方法:
如果用机器学习的思路,用参数模型回归能够比较准确地提取人体模型,但是往往只能提取出来“裸体”的模型,人体自有的外观,包括面部特征、服装、发型等等,都被舍弃掉了。
另一种方向是无模型学习,可以还原人体的表面细节,但是模型本身的还原度很低,而且对计算资源的依赖太大。
这篇 PIFuHD 论文的目标,是对单张照片上穿着衣服的人进行高细节的3D重建,分辨率足以识别手指、面部特征、衣服褶皱等详细的信息。
基于该团队之前开发的 PIFu(像素对齐隐式函数)算法,分成两个原理相同,但功能不同的模块:
第一个模块对输入图像进行下采样,进行粗糙推理,输出一个低分辨率的三维模型;第二个模块从输入图像读取更精确的表面细节,并且引入第一个模块的结果,(这也是这篇论文标题中 Multi-Level PIFu 的来源)。
结合两个 PIFu 模块的结果,PIFuHD 实现了其目标,从一张照片中得到了高清晰度、细节丰富的3D重建模型,并且对于内存等计算资源的依赖更少,还其它已知3D重建算法直接对高清输入图像重建出1024*1024分辨率的3D模型。以及,其它方法经常出现的“假象”,在这一新方法中也有效避免。
还有一个问题:PIFuHD 是如何重建人物后背的3D模型的呢?
考虑到整个研究的限制,输入图像是单一的、正面的照片,背部的细节根本不存在,也就无法真的“重建”,只能靠猜。而猜的工作,是由两个模块都具备的多层感知器 (Multilayer Perceptron, MLP) 进行的。
由于 MLP 的工作原理,以及研究限制,如果不进行优化的话,生成的模型背面,其肌理非常平滑,几乎没有任何细节的存在,这又显得太不真实。
所以研究者在流程当中增加了一个环节,把背部模型推理工作的一部分移到特征提取的步骤里,就能够生成具有更多细节,更容易让观看者信服的背部肌理。
除了图像之外,PIFuHD 还可以对视频进行逐帧重建:
这篇论文的设计巧妙,也提出和引用了很多计算机视觉领域和3D重建方向最新的概念。论文由Facebook 的人工智能实验室、Facebook现实实验室(原 Oculus Research)和南加州大学共同进行,第一作者为 Shunsuke Saito。
网友神·二次创作
研究者非常体贴地在 Google Colab 上提供了运行所需的代码,只要经过简单的配置就可以运行。我找了一些难度较低的淘宝和街拍照片进行测试:
第一张,除了鞋的重建说不过去,整体完美:
第二张,似乎因为背景太复杂,导致提取细节时出现了误判,其它还原的比较精确,包括手和包,以及头左侧头发的质感:
又找了一些不是很标致,并非完全正脸的照片,效果也还算不错:
生成的模型也可以下载下来,放到诸如 Blender 等动画软件里,进行“二次创作”……这不,网友们已经大开脑洞了。
在下面这条视频里,这位网友似乎是用一张模特照片重建了3D模型,还增加了细节贴图,然后放到 ARKit 里,这样就可以在手机上打开了:
更厉害的还在后面。
静态的3D模型已经不能满足网友了,下面这位把自己的模型和舞蹈动作追踪组合起来,变成了街舞达人:
最后这个最神奇,网友把七国集团领导人全部复制成了3D模型,然后强迫他们跳日本神曲《新宝岛》:
这些网友的二次创作,玩的复杂多了,但其实技术门槛并不算高:只要用 PIFuHD 生成的模型文件,在 Blender 等3D渲染软件里打开,把输入图片作为贴图加上去,再用动画软件给新的模型加上动作什么的……
简直是没有做不到,只有想不到。
上手教程
论文作者很体贴地在 Google Colab(一个免费、在线、无需配置的 Python 开发环境)上提供了代码,任何人只要可以访问 Google 都可以进行测试。
在这里我们提供一个简单的教程,即使你不会写代码也可以轻松制作自己的3D模型:
首先访问论文的展示页面 https://shunsukesaito.github.io/PIFuHD/,点击"Demo"链接,进入 Google Colab;点击下图中这个按钮:
然后在新打开的 Google Colab 页面("PIFuHD Demo 的副本") 上开始操作。右上角选择连接到托管代码执行程序 (hosted runtime),然后在菜单栏的代码执行程序 (runtime) 里确认 runtime 种类为 GPU,保存:
Google Colab 是一个既可以写代码,又可以添加文字、图片和视频等各种注释内容的平台,不过我们关注代码块就好了。
每个代码块的左上角都会有一个运行的按钮,就像播放键一样。接下来你需要按从第一个到第四个代码块的运行按钮,跳过第五个代码块,选择第六个代码块,先不要按播放。
点击页面左边的文件夹,点击刷新,上传你的图片文件(最好是.png,实测.jpg等其他格式偶尔报错),然后把上传好的文件拖拽到 /pifuhd/sample_images 文件夹里
然后回到右边刚才选定的代码块,把你上传的输入图像的文件名写到下图中高亮位置:
然后,点击菜单栏的代码执行程序 (Runtime),选择“运行当前单元格以及其后的所有单元格”,或者用键盘快捷键输入⌘/Ctrl+F10即可。
然后看着代码运行就好了。
一般重建3D模型的工作只用三五分钟。完成后你可以在左侧文件夹的 pifuhd/results/pifuhd_final/recon 路径里找到并下载生成的模型文件(.obj 格式) 和一张特征图(.png 格式,没什么用)。
你会发现程序仍然在跑余下的代码块,因为剩下的时间主要是在等渲染,程序会把输入图像和重建3D模型拼接到一起,生成一条可以下载的视频。
Colab 毕竟是一个免费的工具,图像处理的输入和输出尺寸也有限制。我自己测试后发现,在 Colab 上重建的模型,脸部细节和衣服还原真实程度比研究者自己做出来的差多了。
不过,就算没有任何代码知识,只需五分钟就可以体验机器学习3D重建模型的快乐,还是蛮不错的~
0 条评论
请「登录」后评论