本文介绍了马普所二年级 CS 博士生修宇亮(Yuliang Xiu)入选 CVPR 2022 的一项三维数字人姿态重建新研究 ——ICON[1]。在本文中,他将详述这项工作的来龙去脉,包括厘清本研究的动机及思维起点 (motivation)、梳理出这二十多页论文的主线、论文中没提及的洞见 (insight),并着重讲一下 ICON 的局限及改进思路。
论文地址:https://readpaper.com/paper/4569785684533977089
GitHub 地址:https://github.com/YuliangXiu/ICON
Colab 地址:https://colab.research.google.com/drive/1-AWeWhPvCTBX0KfMtgtMk10uPU05ihoA?usp=sharing
主页地址:https://icon.is.tue.mpg.de/
首先,明确 ICON 的任务:给一张彩色图片,将二维纸片人,还原成拥有丰富几何细节的三维数字人。围绕这一任务,之前有许多基于显式表达的方法 (expliclit representation: mesh[2]、voxels[3]、depth map & point cloud[4], etc)。但直到三年前 PIFu (ICCV’19)[5] 第一个把隐式表达 (implicit representation) 用到这个问题,衣服的几何细节才终于好到 —— 艺术家愿意扔到 Blender 里面玩一玩的地步。但 PIFu 有两个严重的缺陷:速度慢和姿势鲁棒性差。我们在 MonoPort (ECCV’20)[6] 中一定程度上解决了「速度慢」这个问题,整个推理到渲染加一块,用普通显卡可以做到 15FPS 的速度。后来我们把重建和 AR 做了一个结合,用 iPad 陀螺仪控制渲染的相机位姿,最后有幸获得 SIGGRAPH Real-Time Live 的 Best Show Award。但是「姿态鲁棒性」一直没有得到很好的解决。PIFuHD[7] 将 PIFu 做到了 4K 图片上,把数字人的几何细节又提了一个档次,但还是只能在站立 / 时装姿势 (fashion pose) 下得到满意的结果。ARCH[8] 以及 ARCH++ [9] 尝试把问题从姿态空间(pose space)转换到标准空间(canonical space, 把人摆成「大」字)来解决。但这种转换,首先很依赖于姿态估计 (HPS) 的准确性,其次由于转换依赖于 SMPL 自带的蒙皮骨骼权重(skinning weights),这个权重是写死的且定义在裸体上,强行用到穿衣服的人上,由动作带动的衣服褶皱细节就不那么自然。另外一个思路,就是加几何先验 (geometric prior)。通俗点说,就是我给你一个粗糙的人体几何,然后根据图像信息,来雕琢出来一个细致的人体几何。GeoPIFu (+estimated voxel)[10]、PaMIR (+voxelized SMPL)[11]、S3 (+lidar)[12] 都有做尝试。我尝试过直接把准确的几何先验 (groundtruth SMPL) 灌给 PaMIR,但 PaMIR 依旧不能在训练集中没见过的姿态上(比如舞蹈、运动、功夫、跑酷等)重建出满意的结果。![](https://image.jiqizhixin.com/uploads/editor/fc57a59a-4908-464e-a376-7d72a64e20db/640__10_.gif)
提高姿势水平的重要性
提高姿势水平是为了彻底打通基于图像的重建(image-based reconstruction)和基于扫描的建模(scan-based modeling)。随着 NASA[13]、SCANimate[14]、SNARF[15]、MetaAvatar[16]、Neural-GIF[17] 等一系列工作爆发,如何从动态的三维人体扫描 (3D human scan sequences / 4D scans) 中学出来一个可以被驱动的、用神经网络表达的数字人 (animatable neural avatar) 渐渐成为一个研究热点。而高质量的动态人体扫描的获得,费钱费人工,导致普通用户或者没有多视角采集设备的团队,很难进入这个领域。![](https://image.jiqizhixin.com/uploads/editor/9548a6d5-4f10-4636-956b-0476eba3281c/1647326882511.png)
图左为 4D 扫描设备(MPI),图右 Light Stage(USC-ICT)。
问题来了,有没有可能扔掉昂贵且费时费力的扫描流程,用 PIFu 从视频中做逐帧重建(Images to Meshes),然
后把重建结果直接扔给 SCANimate 做建模呢(Meshes to Avatar)呢?在理论上当然是可以的,但是现实却很骨感。症结在于,现有的重建算法,都没有办法在很多样的姿态下保持重建的稳定性。但是,数量足够多且姿势各异的三维人体却是 SCANimate 构建高质量可驱动数字人的必要前提!这个不难理解 —— 要让一个数字人无论怎么动弹,衣服裤子的褶皱都很真实,如果用数据驱动的思路去做,那么网络得先「看过足够多」类似动作下衣服的形变,才能准确摸索出衣服形变与动作姿势之间的关联。总而言之,真要把 Images-Meshes-Avatar 这条路走通,非提高姿势水平不可。提高姿势水平从哪些方面入手
ICON 在思路上借鉴了很多相关工作,比如 PIFuHD 里面的法向图(Normal Image),并和 PaMIR 一样都用了 SMPL body 做几何空间约束。这两个信息都是不可或缺的:SMPL body 提供了一个粗糙的人体几何,而法向图则包含了丰富的衣服褶皱细节,一粗一细,相得益彰。![](https://image.jiqizhixin.com/uploads/editor/0b14312d-37d8-4991-8413-4814548a493d/1647326829527.png)
RGB Image - Normal Image (Body) - Normal Image (Clothed Human)
SMPL 辅助 normal 预测。pix2pix 地从 RGB 猜 normal,要在不同姿态上做到足够泛化,就需要灌进去大量的训练数据。但是,既然 SMPL body 已经提供了粗糙的人体几何,这个几何也可以渲染成 body normal 的形式,那么如果我们把这个 body normal 和 RGB 合并一下,一块扔进网络作为输入, pix2pix 的问题就可以转化为一个新问题:用 RGB 的细节信息对粗糙的 body normal 进行形变(wraping)和雕琢(carving)最后获得 clothed normal。而这个问题的解决,可以不依赖于大量训练数据;
normal 帮助优化 SMPL。既然 clothed normal 可以从图像中攫取到 SMPL body 没有的几何细节,那么有没有可能用这些信息去反过来优化 SMPL body ?这样,SMPL body 和 clothed normal 就可以相互裨益迭代优化,body mesh 准了,normal image 就对;normal image 对了,反过来还可以进一步优化 body mesh。1+1>2,实现双赢;
舍弃 global encoder。最后,SMPL body 和 clothed normal 都有了,即人大致的体型和衣服几何细节都有了,我们真的需要像 S3、PaMIR、GeoPIFu 那样,使用一个巨大的全局卷积神经网络(2D/3D global CNN)来提特征,然后用 Implicit MLP 雕琢出穿衣人的精细外形吗?ICON 的答案是:不需要,SDF is all you need。
效果图
有了 SMPL body(左边,w/ Prior)的加持,clothed normal 预测更准确。让 clothed normal 来优化 SMPL(第二列),同时更好的 SMPL 也提升了 clothed normal 的质量(第三列)。![](https://image.jiqizhixin.com/uploads/editor/8d17e7c9-cba3-4ef4-bd62-ebcfe08d126e/1647326794160.png)
下面这张图展示了 ICON 整体处理 pipeline。先从图像中预测 SMPL body,渲染出正反 body normal,与原始图像合并起来,过一个法向预测网络,出正反 clothed normal。然后对于三维空间中的点,clothed normal 取三维,body normal 上取三维(注意,这里是从 SMPL mesh 上用最近邻取的,而不是从 body normal image 中取的),SDF 取一维,一共七维,直接扔进 implict MLP,Marching Cube 取一下 0.5 level-set 等值面。量化指标这里就不放了。为了确保比较的绝对公平,我除了用原作者放的模型在测试集上跑了结果,还在 ICON 的框架内重新复现了 PIFu、PaMIR。此外,我确保除了方法本身的差异,其他部分(训练数据、优化策略、网络结构)都保持一致,不引入干扰变量。实验结论显示,ICON 是 SOTA,在离谱的姿势下优势明显,训起来省数据。SMPL 不准的时候,加上迭代优化那个模块,甚至要比 PaMIR 直接在精准 SMPL 上的结果还要好。现在放出来的代码只包括测试代码,但完整的训练代码已经在路上。ICON 包括了 PIFu、PaMIR 以及 ICON 各种变种的测试 + 训练代码,而且使用了 PyTorch-Lightning 框架做代码规范。这样以后大家要用自己的数据在 ICON、PIFu 和 PaMIR 上做训练和测试,只需要基于 ICON 调整就行。下面这张图证明了 ICON 的一个特别突出的优势,就是省钱。毕竟 RenderPeople 一个就几百块人民币,实在离谱。仅仅给 1/8 的训练数据(50 个 3D human scan),ICON 重建的质量就可以超过用接近 4000 个训练数据训出来的 PIFu,也超过了用 450 个数据训出来的 PaMIR。作为一个舍弃了 global CNN 的极其 local 的模型,ICON 对训练数据量确实不敏感。而恰恰就是这种钝感,对于提高三维人重建的姿势水平至关重要。为了充分测试 ICON 在非常难的姿势上是什么水平,我从 pinterest 上找了一些动作非常离谱的图片,武术、跑酷、舞蹈以及体育等等。总之,这些动作从未出现在训练集中,也不可能成为训练集(动作转瞬即逝,没法稳定住用仪器进行扫描捕捉)。但结果是令人欣慰的,尽管不完美,但至少还是个人形。![](https://image.jiqizhixin.com/uploads/editor/132ba406-a0ed-4958-9812-ab0594cbee5f/640__8_.gif)
最后,我们按照之前计划的,把 Images-Meshes-Avatar 的流程跑了一下,结果还不错。![](https://image.jiqizhixin.com/uploads/editor/82c7dfeb-7e53-49f0-a8e8-1088149eecb1/640__7_.gif)
ICON 并不完美
ICON 确实可以提高姿势水平,但不是尽善尽美。接下来聊聊 ICON 的劣势。其实原论文及补充材料中对「坏结果」的分析和呈现 (Fig.7 和 Fig.18),已然不怎么遮掩了。虽然 ICON 在量化指标上实现了 SOTA,但对本领域相关研究者而言,「坏结果」往往比「好结果」更能揭示方法的原理和本质。![](https://image.jiqizhixin.com/uploads/editor/8e5f7270-2a75-4dd7-ac99-70e352dca203/1647326682741.png)
鱼和熊掌不可得兼。SMPL prior 带来了稳定性,但也破坏了 implicit function 原有的优势 —— 几何表达的自由性。因此,对于那些离裸体比较远的部分,比如两腿之间的裙子、随风飞扬的外套,就「挂」了。而这些部分,最原始的 PIFu 不见的做的比 ICON 差,毕竟 PIFu 是没有引入任何几何先验的。总之,稳定性 vs 自由度,是一个 tradeoff;
慢。SMPL-normal 迭代优化的设计思路,导致单张图要跑 20s 才能出来不错的结果,实时性大大折扣;
性能天花板受制于 HPS。重建结果受 SMPL 准确性影响极大,SMPL-Normal 的迭代优化,并不能彻底解决严重的姿势估计错误。ICON 现在支持 PyMAF[18]、PARE[19] 以及 PIXIE[20] 三种 HPS,PARE 对遮挡好一些。PIXIE 手和脸准一些,PyMAF 最稳定,但依旧对一些很难的 case 束手无策。所以,尽管 HPS 已经做得很多了,围绕各种 corner case 每年能出数百篇论文,但我们依然不能说这个问题解决了,也不能说这个问题没有价值了。至少,对于 ICON 而言,HPS 的准确度是一切的基础,HPS 挂了,再怎么迭代优化也没用;
几何比法向差。clothed normal 的质量与最终重建的人体几何质量之间有 gap。normal 明明看起来很好,但 geometry 的质量就打了折扣。理论上,重建人体渲染出来的 normal image 和网络预测出来的 clothed normal 不应该有那么大差距。这块我还在 debug,希望下一个版本可以修复。
![](https://image.jiqizhixin.com/uploads/editor/f860a84c-0a13-4a98-a1f9-1f90fc57f082/1647326581818.png)
未来改进方向
基于 ICON,接下来还可以在以下几个方向进行改进:ICON++,进一步提升 ICON 的重建质量,更快更细节更稳定更泛化更通用;
把 ICON 用到别的任务中,比如做动物姿态,比如用 ICON 做个数据集,基于数据集建个生成模型;
Wildvideo-ICON、Multiview-ICON 和 Multiperson-ICON;
扔掉 3D supervision、非监督、自监督,以及训练范式的改进,比如 E2E-ICON。
如果有同学对这些方向有兴趣,我非常欢迎各种形式的合作(yuliang.xiu@tuebingen.mpg.de)。Google Colab 支持上传并测试你自己的图片,最后会生成类似下图这样的重建视频,你可以将视频上传到 twitter 并打上#ICON的标签,@yuliangxiu,无论结果是好是坏,我都会转发,对于重建任务,cherry picks 和 failure cases 都是算法的一部分,好的烂的都放出来,才是一次完整的作品呈现,期待大家奇形怪状的重建结果。另外,Readpaper 这个产品非常吼,大家如果有关于ICON的问题,可以直接在Readpaper上提问:https://readpaper.com/paper/4569785684533977089。![](https://image.jiqizhixin.com/uploads/editor/3059d580-d640-43f9-814b-47622f53efe4/640__6_.gif)
Image - Normal Estimation - Reconstructed Mesh (w/o smooth, w/ smooth)
知乎原文:https://zhuanlan.zhihu.com/p/477379718