— order: 5 —1 SHERF: Generalizable Human NeRF from a Single Image时间:2023.31.1 概要现存的 Human NeRF 方法一般要求大量多视角图片,或是固定位置的单目视频,这跟真实场景相违背SHERF 是第一个 generalizable Human NeRF model可以从单张图片重建可动画化的 3D 人体SHERF canonical space 中提取编码人体表示,同时捕捉了 global appearance local fine-grained textures这是由 a bank of3D-aware hierarchical features 实现的:1.Global features 增强图片提取的信息并补充部分 2D 观察所缺失的信息2.Point-level features 提供 strong clues of 3D 人体结构3.Pixel-aligned features 保护 fine-grained details为了将它们高效合并,设计了 feature fusion transformer THuman, RenderPeople, ZJU_MoCap, and HuMMan 数据集上进行了广泛实验,证明 SOTA 的实力,代码开源在 github/skhu101/SHERF1.2 引言第一段宽泛引入现存 Human NeRF 主要有两类1.第一类从单目或多视角视频中重建,但是 subject-specific 很耗时且不适应时代发展2.第二类探索泛化模型,可以用少许 multi-view 图片在一次前向中快速重建人体,但是需要在 well-defined camera angles 下。MonoNHR 解决了这个问题,但它重建的人体不能动,应用受限generalizable, single image, animatable 有两个挑战1.missing information from partial observation目前的 generalizable Human NeRF 太关注保护局部特征,在补足缺失信息上不足2.single image but animatable需要连贯的 (coherent) 人体结构的理解SHERF 如前所述提取并合并了 hierarchical features可以在 visible 区域重建正确颜色,在 invisible 区域给出大概正确 (plausible) 猜测。前者得益于 geometry and color details后者得益于 global features为了 animatablilitySHERF canonical space 建模人体,用 SMPL prior hierarchical features 转换到 canonical space 进行 encode主要贡献1.第一个符合 generalizable, single image, animatable 三个属性的 Human NeRF2.提出 3D-aware hierarchical features SHERF 能够恢复细节并补全缺失信息3.新视角和新姿态合成上的 SOTA 性能1.3 相关工作Human NeRF。给定多视角图片或单目视频,Human NeRF 能够高质量合成新视角或姿态,激发了人体重建的工作。Neural Body 稀疏卷积应用于辐射场,而其它方法使用 SMPL LBS weights or optimizing LBS weights with appearance canonical space 中建模human NeRF但是他们需要密集观察和长时间优化,为此探索从 single image 用一次前向过程泛化的 generalizable 方案,同时提出animatable 的追求Monocular Human Reconstruction。基于统计的 3D 人体模型通过估计 coarse human shapes and poses 来建模人体(或者叫Parametric, template 的方法,都是一个意思,即利用 SMPL 来约束单目重建的 geometry)。通过估计 mesh deformation 来建模clothed humans 的复杂形状。Implicit representations(e.g. SDF)被用来提高 geometry 质量。为了充分利用 explicit and implicitrepresentations研究者探索了 hybrid 的方法来得到更好的重建质量和泛化性,比如我看过的 ICON & ECON。相比之下,NeRF的优势在于不需要 3D ground truth 进行训练;此外,作者在 canonical space 中重建人体,可以很容易地改变人体的姿态Generalizable NeRFNeRF 需要密集的带位姿视图,但最近一些发展使得用很少甚至单个视图来训练 generalizable NeRF 成为可能。Cross-scene multi-view aggregators 可以通过学习如何 aggregate sparse views 来合成新视图;其它方法将观察 encode latent space 中,然后 decode NeRF作者的工作则专注于将单视图 encode canonical space 中的 generalizable Human NeRF1.4 Preliminary在看 SHERF 之前,我们先来简单看一下它的前置技术(都看过了,这里不展开,仅列一下核心公式)1.一是 NeRF我的 NeRF 笔记𝒞(𝒓)=𝑡𝑓𝑡𝑛𝑇(𝑡)𝜎(𝒓(𝑡))𝒄(𝒓(𝑡),𝒅)d𝑡2.二是 SMPL我的 SMPL 笔记𝒙𝑜=𝐾𝑘=1𝑤𝑘𝑮(𝜽,𝑱)𝒙𝑐不过这里我们可以看一看非 generalizable 的普通 Human NeRF 是怎么做的 NeRF 用到人体重建的想法非常自然,所以归类于 Human NeRF 的方法也不少,SHERF related works 里列了很多,不过比较有代表性和影响力的是 HumanNeRF: Free-viewpoint Rendering of Moving People from Monocular Video (CVPR2022 oral) HumanNeRF 笔记1.5 方法首先明确输入输出和总体思路输入单张图片𝑰𝑜,假设相机参数𝑷𝑜已知,人体区域的 mask 已知,并且相应的 SMPL 参数{𝜃𝑜,𝛽𝑜}也已知输出人体在 target camera view𝑷𝑡 SMPL 参数{𝜃𝑡,𝛽𝑡}下的渲染结果为了渲染 target space 下的图片,我们发出射线并采样点𝒙𝑡,通过逆 LBS 转换到 canonical space 下的𝒙𝑐怎么转换呢?貌似 SHERF 并没有去学这里的参数,而是直接把 SMPL 参数和蒙皮权重拿来用了。之所以能这样,应该是因为后面提特征做得更高效、更优秀论文中说,它们使用 nearest SMPL vertex 的转换矩阵和逆转换矩阵或许可以在这里把 HumanNeRF 里的那整个 Pose Correction + Motion Field 都搬过来,用作 inference-only refinement为是 Optimization-based),效果应该会更好?接着,用 hierarchical 的方式提取特征,先按下不表然后用一个 feature fusion transformer bank of 3D-aware hierarchical features query𝒙𝑐的总特征𝑓trans(𝒙𝑐)=attn(𝑓global(𝒙𝑐),𝑓point(𝒙𝑐),𝑓pixel(𝒙𝑐))先用 MLPs 把三个 level 的特征 project 32 channels然后用一个三头自注意力层去整合它们为什么要用自注意力?因为特征融合其实并不是一个 trivial 的事情,比如直觉上,可见部分应该更依赖于 pixel-aligned featuresself-Attention 机制有助于这件事情最后把𝒙𝑐连带它的特征𝑓trans(𝒙𝑐)丢到 NeRF decoder 里预测密度𝜎和颜色𝒄,跟 HumanNeRF 一样,作为𝒙𝑡的密度和颜色去渲染出图片来NeRF decoder 来自另一个 generalizable Human NeRF 的工作 MPS-NeRFNHP MPS-NeRF 作为前 SOTA 成为 SHERF 量的 benchmark),但是它们都专注于提取 local feature 导致不能很好地补全缺失信息,这也正说明 hierarchical featureextraction 的重要性下面我们一个个说明 Hierarchical Feature Extraction 是怎么做的1.Global Feature: global structure overall appearance 对单目人体重建这种 partial observation 任务很重要利用 2D Encoder (ResNet18 backbone) 把输入图片压缩成 compact latent code𝑓512然后为了高效解码,采用 EG3D tri-plane 式的体素分解策略(用 GAN generator + discriminator 训练的)。用 MappingNetwork 𝑓映射到 512 维的 style vector然后丢进 Style-Based Encoder 生成特征,再 reshape tri-plane representation这样我们就能把变换到 canonical space 下的任何点𝒙𝑐正交投影到三个平面上,提取 3D-aware global features𝑓global(𝒙𝑐)2.Point-Level Feature: 利用 SMPL prior 搭建 global structure local details 之间的桥梁利用 2D Encoder (ResNet18 backbone) 提取输入图片特征得到 feature map𝑓64×256×256,为了保留更多 low-level 细节,对RGB 值做 positional encoding然后拼接到𝑓上得到𝑓96×256×256 observation space 下的 SMPL vertices 投影到 feature map 上,只提取可见顶点 (from the input view) 的特征(make thepoint-level feature aware of occlusions),然后逆 LBS 转换到 canonical space体素化成 3D volume tensor再用4layers of sparse 3D convolutions 处理,得到 canonical space 下的 96-dimensionalpoint-level features这样我们就可以从 encoded sparse 3D volume tensors 中提取𝑓point(𝒙𝑐)相当于是说,把 2D feature 转存到 mesh 上的点里,再转化到 3D volume 3.Pixel-Aligned Feature: 前面 point-level 的信息由于 SMPL mesh resolution voxel resolution 有限,可能会有信息丢失,所以我们进一步提取 pixel-aligned features使用 feature map𝑓96×256×256同上 canonical space 下的𝒙𝑐转换到 observation space𝒙𝑜,然后投射() input view feature map(𝑊(𝐼𝑜))上,得到 pixel-aligned features𝑓pixel(𝒙𝑐)𝑓pixel(𝒙𝑐)=(𝑊(𝐼𝑜);LBS(𝒙𝑐;𝜃𝑜,𝛽𝑜))如果是 multi-view input 的设置,不同的 pixel-aligned features 应该能指示出 3D 点与表面的远近,但在 SHERF single imagesetting 下,得不到这种隐式信息。为了避免过拟合到无用的 pixel-aligned features就根据𝒙𝑐和最近 SMPL 顶点之间的距离为pixel-aligned features 分配不同的权重这个就有点像 HumanNeRF 那个 volume 的思路了,只不过这里用的是写死的权重,但可以根据距离来调整;而HumanNeRF 是直接学出一个好的权重PS: 看了下代码,感觉写得好乱,根本没和论文里三层结构分开对应上。。。1.6 实验 & 分析 & 结论 THuman, RenderPeople, ZJU_MoCap and HuMMan 这些数据集上做验证,把 MPS-NeRF NHP 作为 benchmark 比较,定性和定量都表现出 SOTA 的实力接下来分析几个更细的指标 (or settings)Training Protocols。以前的 generalizable Human NeRF 方法大多会在训练的时候仔细选择 camera views 并固定它们,而SHERF free view inputs 训练。不过这里也分别用 Front View Input / Free View Input 去都训练了一遍,结果显示前者效果明显更好,但 SHERF 一开始就采用的 free view inputs 更符合现实,并且在两种 setting SHERF 都更好Different Viewing Angles as Inputs。输入视图在[0deg,360deg]角度之间均匀采样12个视角,渲染其它11个角度的图像,结果显示 SHERF 在不同视角输入下都比之前的 SOTA 表现得更好,而且对于不同的输入视角也表现得很稳定Viewing Angle Difference Between Target and Observation。考虑输入视角和目标视角之间的角度差异对新视角合成的影响,发现差异越小,模型越容易合成新视角;而且 SHERF 在所有输入设置下都由于 baselineGeneralizability。在 THuman 上训练的 SHERF, NHP, MPS-NeRF ZJU_MoCap 上推理,SHERF 表现最好,甚至能和直接在ZJU_MoCap 上训练的 NHP, MPS-NeRF 相当Runtimegeneralizable Human NeRF 只用一次前向过程就能完成重建,所以一般都比较快,但 SHERF 的速度也比 NHP, MPS-NeRF 总结一下,SHERF 是第一个可以从单张图片重建可动画化 3D 人体的 generalizable Human NeRF HumanNeRF 比泛化(为什么可泛化呢?因为基于学习的方式学了通用的特征提取方式),跟其它 generalizable Human NeRF方案比 animatable为什么可动画化呢?因为在 canonical space 下建模)和效果(为什么效果好呢?因为 hierarchical feature),最终达到了 SOTA但这里是跟同类 generalizable Human NeRF 的方法比出的 SOTA却没有跟 setting 类似甚至更低(不用准确 SMPL prior也不用复杂相机参数)的 ECON 比较(时间上比 ECON 晚),看图感觉纹理细节不如 ECON可能它这个 hierarchical feature 还是不如ECON 那种手工特征和各种细节有效),而且 ECON github stars 也比 SHERF 高得多缺陷1.有些部位被遮挡时,目标渲染中仍然存在可见的 artifacts需要更好的特征表示来解决这个问题2.如何补全单张图片输入中缺失的信息仍然是一个具有挑战性的问题。SHERF 基于重建视图这个任务,预测出的新视图相对来说具有确定性。一个潜在的研究方向是使用 conditional generative models 来多样地生成更高质量的新视图3.而且闭口不谈 ECON 所挑战的 challenging poses loose clothes感觉是在回避问题?可能的负面社会影响云云1.7 论文十问1.论文试图解决什么问题?从单视图 (with SMPL and camera parameters) 重建一个 animatable 3D 人体2.这是否是一个新的问题?不是,有基于 Implicit 特别是 NeRF 的,有基于 Explicit 而且效果很好的 ECON这篇论文主要对比的是同 setting generalizable Human NeRF3.这篇文章要验证一个什么科学假设?hierarchical feature generalizable Human NeRF 很有效4.有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员?基于 Implicit 的,比如 PIFu, PIFuHD, PaMIR, ICON 这些(它们都是同样 single image setting),Implicit 中基于 NeRF 的又可以分为 Optimization-based 和可以 generalize 的两类;基于 Explicit 的比如 ECON比较值得关注的研究员a.THU Yebin Liu Zerong Zheng (PaMIR)b.MRL Zeng Huang (ARCH), Tuny Tung(ARCH, ARCH++), Shunsuke Saito (PIFu, PIFuHD)c.MPI Gerard Pons-Moll, Justus Thies 以及 Yuliang Xiu (ICON, ECON)d.ETH Siyu Tang5.论文中提到的解决方案之关键是什么?hierarchical feature extraction generalizable NeRF 做隐式函数6.论文中的实验是如何设计的? THuman, RenderPeople, ZJU_MoCap and HuMMan 上跟 MPS-NeRF NHP 两个同样是 generalizable NeRF 的方法比较,分析了各种指标和设置7.用于定量评估的数据集是什么?代码有没有开源?数据集如上,代码开源在 github/skhu101/SHERF8.论文中的实验及结果有没有很好地支持需要验证的科学假设?支持论文自己的假设应该是可以的,但我总觉得不跟 ECON 比划一下而只跟同样 generalizable NeRF 的方法比较,有点自适应setting 的感觉9.这篇论文到底有什么贡献?提出 hierarchical feature特征提取和融合得更好通过 canonical space observation space 的转换实现 animatable10.下一步呢?有什么工作可以继续深入?如果还是用 NeRF 的渲染方法和隐式函数的话,想要提升效果,能做的似乎就只有更好地提特征了(更好地融入 prior然后,NeRF 后续的那么多工作中的 techniques 都可以用上来,在速度、存储、泛化性等等各种方面进行提升