PIFuHD:多层级像素对齐隐式函数——用 1k 分辨率单图重建高保真穿衣人体

Saito, Simon, Saragih, Joo. PIFuHD: Multi-Level Pixel-Aligned Implicit Function for High-Resolution 3D Human Digitization, CVPR 2020.

这是 PIFu 的高分辨率续作。如果说 PIFu 解决了"单张图能不能长出完整人体"的问题,PIFuHD 解决的是"长出来的细节够不够真"——它把输入分辨率从 $512\times512$ 抬到 $1024\times1024$(1k),用粗到细的两级 PIFu 在 1k 分辨率上直接回归 3D 几何,并用一个 image-to-image 网络预测背面法线来补全单张图永远看不到的后背。手指、面部、衣服褶皱这些细节,这一版才真正稳住了。

一、一句话结论

PIFuHD 的核心论断是:高保真重建被两个互相冲突的需求卡住了——要"准"就得看大范围上下文,要"细"就得看高分辨率图像。它用多层级(coarse-to-fine)像素对齐隐式函数同时满足二者:粗层看整张降采样图,负责整体姿态与深度;细层看 1k 原图的高分辨率局部特征,负责高频细节;两级之间用隐式 3D 嵌入 $\Omega$ 传递全局上下文,而不是传递"绝对深度"。再叠上正/背面法线图作为额外条件,把背面不可见区域的推断从"模糊平均"变成"有方向的锐利几何"。

二、一句话先交代与 PIFu 的关系 / 要解决什么问题

PIFuHD 直接搭建在 PIFu 之上:粗层就是 PIFu 本身,细层是全新加的;论文明确说这两级就是"upper half / lower half"。要解决的问题是 PIFu 的分辨率天花板——由于显存限制,PIFu 的图像编码器必须把感受野覆盖整张图(靠 stacked hourglass 的 bottom-up/top-down + 中间监督来保证全局推理),因此只能吃 $512\times512$ 图、只能出 $128\times128$ 的特征图。即便隐式表示理论上能表达任意分辨率的几何,实际表达力被特征图分辨率锁死("the expressiveness of the representation is bounded by the feature resolution in practice")。PIFuHD 要把特征图抬到 $512\times512$,同时不丢全局推理。

三、核心方法

3.1 从 PIFu 的公式开始

PIFu 把重建定义为对连续 3D 空间求占据值,对任意点 $X=(X_x,X_y,X_z)\in\mathbb{R}^3$:

$$f(X,I)=\begin{cases}1 & X \text{ 在网格表面内}\ 0 & \text{否则}\end{cases}\tag{1}$$

它先取投影点处的图像特征,再由深度 $Z$ 消歧:

$$f(X,I)=g\big(\Phi(x,I),\,Z\big),\qquad x=\pi(X)=(X_x,X_y),\quad Z=X_z\tag{2}$$

关键点:同一相机射线上所有点的图像特征完全相同(都取自同一个 $x$),所以 $g$ 必须靠变化的深度 $Z$ 来区分射线上各点的内外。$\Phi$ 用 CNN、$g$ 用 MLP,端到端训练。

PIFuHD 原样保留这个框架作为粗层,只是把输入从纯 RGB 扩成正/背面法线一起喂进去:

$$f^{L}(X)=g^{L}\big(\Phi^{L}(x^{L},I^{L},F^{L},B^{L}),\,Z\big)\tag{3}$$

其中 $I^L$ 是低分辨率输入,$F^L,B^L$ 是同分辨率的正面/背面法线图,$x^L$ 是 $X$ 在 $I^L$ 图像空间的投影。

3.2 细层:用 3D 嵌入替代绝对深度

细层是全篇最关键的改动:

$$f^{H}(X)=g^{H}\big(\Phi^{H}(x^{H},I^{H},F^{H},B^{H}),\,\Omega(X)\big)\tag{4}$$

  • $I^{H},F^{H},B^{H}$ 是 $1024\times1024$ 的原图、正面法线、背面法线;
  • $x^{H}=2x^{L}$,是同一 3D 点在高分辨率图像空间的投影(分辨率翻倍,坐标也翻倍);
  • $\Phi^{H}$ 结构与 $\Phi^{L}$ 类似,但感受野不再覆盖整张图——因为它是全卷积的,可以随机滑窗训练、在原分辨率(1k)上推理;
  • $\Omega(X)\in\mathbb{R}^{256}$ 是从粗层 MLP 中间层抽出的 3D 嵌入,替代了 PIFu 里的绝对深度 $Z$。

为什么这个替换这么重要? 论文做了个对照实验(Fig. 3):如果把细层条件化在绝对深度上,那么用滑窗训练会显著拉垮训练与测试精度——网络无法处理"训练看 $512\times512$、推理看 $1024\times1024$"的输入尺寸差异,且高分辨率局部特征缺乏全局推理,严重受困于深度歧义。反过来,换成从粗层学来的 3D 嵌入 $\Omega$,全局上下文被隐式地传播到高分辨率层级,细层就只需要专心补细节即可。论文的原话是:"3D reconstruction using high-resolution features without holistic reasoning severely suffers from depth ambiguity and is unable to generalize with input size discrepancy between training and inference."

还有两个直接好处:

  1. 不退化:因为细层吃的是粗层 MLP 的中间特征,最坏情况也不会比粗层更差,网络设计得当就只会更好;
  2. 省显存:细层不需要做归一化(不需要产出全局一致的 3D 深度),因此不必看整张图,可以用 $512\times512$ 的随机裁剪来训练——这正是能上 1k 输入而不被显存卡死的原因。

这里体现了与"传统 coarse-to-fine"的根本区别:PIFuHD 不在粗层显式确定任何几何表示(不早做几何决策),而是把隐式编码的几何上下文一路传播上去,只在最高层才最终确定几何。这是它相对"先低模、再贴位移/法线"那一派(如 Tex2Shape 贴位移、Shape-from-Shading 贴法线)的本质优势——后者细节受限于基础模板的表达力。

3.3 背面:用 image-to-image 预测正/背法线

单张图永远看不到背面,背面几何是病态问题。论文观察到:如果全靠 MLP 自己推,因为占据损失在不确定处偏向"平均解",加上最后几层 MLP 要学一个很复杂的函数,恢复出来的背面往往又平又糊、没有特征。

解决办法是把一部分推断搬到特征提取阶段:用一个 pix2pixHD 网络做 RGB → 法线图的 image-to-image 翻译,分别预测正面法线和背面法线,再把它们作为特征喂给像素对齐预测器。法线图相当于 3D 几何在图像空间的"代理(proxy)",重建被这些图引导着走向特定几何,MLP 就更容易长出细节——论文说这让可见区和遮挡区细节水平更一致("a more consistent level of detail between the visible and occluded parts")。这与 SiCloPe、Moulding Humans、FACSIMILE 等"预测深度/法线"的思路同源,论文也承认:对穿衣人体这类约束足够的问题域,它能给出合理的背面结果。

3.4 损失函数与表面采样

PIFuHD 不用 PIFu 的平均 L1/L2,而是用 extended Binary Cross Entropy(BCE),在采样点集 $S$ 上:

$$L_o=\sum_{X\in S}\Big[\lambda\,f^{}(X)\log f^{{L,H}}(X)+(1-\lambda)\big(1-f^{}(X)\big)\log\big(1-f^{{L,H}}(X)\big)\Big]\tag{5}$$

其中 $f^{}(\cdot)$ 是真值占据,$f^{{L,H}}(\cdot)$ 分别是粗/细两级 PIFu 的输出,$\lambda$ 是 $S$ 中表面外点的比例(起类别平衡作用)。注意这个损失同时作用于两级*。

采样沿用 PIFu 的混合策略:均匀体采样 + 表面附近的重要性采样(对均匀表面点做高斯扰动)。但论文强调一个经验发现:这种用高斯球在表面附近打点的方式,比"按到表面距离的倒数采样"能得到更锐利的结果。理由是——曲面上的高斯球在高曲率区域采样密度更高(最高可达高斯球半径的倒数),而曲率是几何的二阶导数,基于曲率的重要性采样自然就强化了细节与保真度。

四、网络结构 / 训练与实现细节

图像编码器:粗细两级都用 stacked hourglass,粗层 4 stacks、细层 1 stack,采用 [Jackson et al. 2018] 的改动,并把 batch norm 换成 group norm。细层编码器去掉一次下采样,以换取更大的特征图分辨率。特征维度:粗层 $128\times128\times256$,细层 $512\times512\times16$。

两级 MLP:粗层神经元数 $(257,1024,512,256,128,1)$,在第 3、4、5 层加 skip connections——$257=256\,(\Phi^L)+1\,(Z)$。细层神经元数 $(272,512,256,128,1)$,在第 2、3 层加 skip connections——$272=256\,(\Omega)+16\,(\Phi^H)$。也就是说,细层输入端拼的是"粗层第 4 层输出的 3D 嵌入 $\Omega\in\mathbb{R}^{256}$"和"高分辨率图像特征 $\Phi^H\in\mathbb{R}^{16}$"。

训练:
- 粗层 PIFu 先预训练,输入缩放到 $512\times512$,batch size 8;
- 细层 PIFu 用 batch size 8、从 1k 图上随机裁 $512\times512$ 窗口训练;
- 优化器 RMSProp,每 10 个 epoch 做一次权重衰减 0.1;
- 每步采样 8000 个点,混合均匀采样 + 表面附近重要性采样,粗层标准差 5cm、细层 3cm;
- 关键经验:交替(alternate)训练粗细两级,比端到端联合训练精度更高(见下节表格)。

法线预测网络:用 [Johnson et al. 2017] 的架构(9 个 residual blocks + 4 层下采样),前/背面各训一个网络,损失为

$$L_N=L_{VGG}+\lambda_{l1}L_{l1}\tag{6}$$

其中 $L_{VGG}$ 是感知损失(perceptual loss),$L_{l1}$ 是预测法线与真值法线的 L1 距离,相对权重 $\lambda_{l1}=5.0$。用 Adam、学习率 $2.0\times10^{-4}$ 训到收敛。训练数据是那 450 个 RenderPeople 训练样本合成的正/背法线。

数据:RenderPeople 数据集,500 个商业高分辨率摄影测量扫描,450 训练 / 50 测试。用预计算辐射传输(PRT)渲染,163 个二阶球谐,HDRI Haven 环境光;yaw 轴每 2 度渲染一帧,仰角固定 0°。与 PIFu 不同,PIFuHD 用 COCO 数据集随机贴背景来增广,从而不需要分割掩码这个预处理。

五、实验与结果

评估指标有三个:Normal(用真值几何算的表面法线一致性,越小越好)、P2S(point-to-surface,点到面距离)、Chamfer(倒角距离)。P2S 与 Chamfer 单位是 cm。数据集为 RenderPeople 与 BUFF。

5.1 消融实验(Table 1)

方法 RenderPeople Normal / P2S / Chamfer BUFF Normal / P2S / Chamfer
Fine module only 0.213 / 4.15 / 2.77 0.229 / 3.63 / 2.67
Fine module + Global image feature 0.165 / 2.92 / 2.13 0.183 / 2.767 / 2.24
Single PIFu 0.109 / 1.45 / 1.47 0.134 / 1.68 / 1.76
Ours (ML-PIFu, end-to-end) 0.117 / 1.66 / 1.55 0.147 / 1.88 / 1.81
Ours (ML-PIFu, alternate) 0.111 / 1.41 / 1.44 0.133 / 1.63 / 1.73
Ours with normals 0.107 / 1.37 / 1.43 0.134 / 1.63 / 1.75

从这张表能读出几条硬结论:

  1. 只用细层(Fine module only)最差:Normal 0.213、P2S 4.15,因为局部特征缺全局推理,严重过拟合、泛化差;
  2. 补上全局图像特征(ResNet34 做 global feature encoder,仿 [Iizuka et al.])能大幅改善(Normal 0.165、P2S 2.92),但依然远不如单层 PIFu——论文指出全局特征缺精确空间信息,对非刚体铰接物体(人体)尤其致命,鲁棒性差;
  3. 单层 PIFu(0.109/1.45/1.47)本身其实相当强:这说明在单纯数值误差上,512 输入的 PIFu 已经很能打;
  4. 交替训练 > 端到端联合训练:alternate 版(0.111/1.41/1.44)全面优于 end-to-end 版(0.117/1.66/1.55);
  5. 加法线(Ours with normals)最优:RenderPeople 上 Normal 0.107、P2S 1.37、Chamfer 1.43,正面和背面都更准、褶皱更真实。

这里有个值得玩味的点:光看 P2S/Chamfer 这类整体误差,单级 PIFu 和 PIFuHD 差不多,甚至个别项 PIFu 略低。PIFuHD 的价值不在这类"平均几何误差"上,而在高频细节与局部保真度——所以要结合下面 Fig. 4、Fig. 5、Fig. 6 的定性结果一起看。

5.2 定性结论

  • Fig. 3:滑窗训练若不接 3D 感知的上下文(用绝对深度),学不出合理几何——直接证明 $\Omega$ 的必要性;
  • Fig. 4:多层级相对"只细层 / 细层+全局特征 / 单层 PIFu"的定性对比,细节与鲁棒性同时更好;
  • Fig. 5:只吃原图的 PIFu 在背面缺失区明显模糊;加上预测背面法线后,正反两面的重建精度和褶皱真实度都提升;
  • Fig. 6:在 People Snapshot 数据集上与三件代表作定性对比——多尺度体素 DeepHuman、像素对齐隐式 PIFu、参数化模板+位移/法线的 Tex2Shape。

对 Fig. 6 的点评很到位:Tex2Shape 和 DeepHuman 虽然也是 coarse-to-fine,但基础形状表达力有限,细化效果边际——体素法空间分辨率受限,模板法难处理拓扑变化和大形变。Tex2Shape 虽然能保住一些皱纹这类特征形状,但因为用现成的 dense correspondences 把图像空间映射到纹理参数化,这个映射不完美,导致结果丢失输入主体的保真度。相比之下 PIFuHD 基础形状和细化形状都用高表达力的隐式表示,在像素级直接预测几何,把输入图里的细节全留住。Fig. 7 还展示了用合成数据训练、却能重建真实互联网照片(in-the-wild)的高保真结果。

六、局限与未来工作

  1. 依赖前级成功:多层级方法建立在粗层能提取出好的 3D 嵌入之上——"Since the multi-level approach relies on the success of previous stages in extracting 3D embeddings",粗层不稳,整体就崩。因此提升基线模型鲁棒性会直接转化为整体精度;
  2. 背面仍是"合理幻觉":背面法线靠 pix2pixHD 从 RGB 翻译而来,对穿衣人体这类约束域有效,但本质仍是从统计先验"猜",不是真实观测;
  3. 未来方向:引入人体特定先验(语义分割、姿态、参数化 3D 人脸模型),以及给隐式曲面加 2D 监督([Sitzmann et al. 2019]、[Liu et al. 2019]),以支持更强的 in-the-wild 输入;
  4. 训练仍需成对的扫描真值(RenderPeople 这类高分辨率摄影测量数据)。

七、对 3D 人体重建 / 服装重建 / 虚拟试衣方向的意义

  • 它确立了"多层级 + 隐式 3D 嵌入"这个范式:证明高分辨率细节必须靠"大上下文粗层 + 高分辨率细层 + 隐式上下文传递"三者组合,而非简单放大输入。后续高分辨率人体重建基本都在这个骨架上演化。
  • 它解决的不是"精度"而是"保真":注意 P2S 上它甚至不比 PIFu 低很多——真正的进步是手指、面部、褶皱这类高频细节和可见/遮挡区细节一致性。对服装重建而言,这意味着布料褶皱、蕾丝、纽扣这类细节才第一次被稳稳重建出来,宽松衣物(裙、大衣)的任意拓扑也吃得下。
  • 背面法线条件化 = 给"看不见的衣服"一个先验:虚拟试衣最怕的就是背面、腋下、下摆这些自遮挡区。PIFuHD 的"image-space 补全 + 3D 引导"路线说明:与其让 3D MLP 硬猜模糊平均,不如在图像域先补出正/背法线代理再引导几何——这条思路对单图试衣时推断背面服装形变极其有用。
  • 无模板仍是双刃剑:它不依赖 SMPL,故能表达任意拓扑;但也因此缺语义部件先验,手、脸、衣物边界的语义一致性无从保证。前沿做法(如加分割 / 姿态 / 2D 监督)正是往这个缺口补。
  • 像素级对齐 + 1k 输入 + 免分割掩码(COCO 增广):让整条链路更贴近真实商品图 / 用户自拍,对落地的试衣与电商场景更友好。

八、术语表 / Key Terms

  • pixel-aligned implicit function (PIFu) — 像素对齐隐式函数;把逐像素局部特征与 3D 全局上下文对齐的隐式曲面表示
  • PIFuHD — 本文方法名;Multi-Level PIFu 的高分辨率版本
  • multi-level / coarse-to-fine — 多层级 / 粗到细;先整体后细节逐级细化
  • coarse level — 粗层;看降采样整图、负责全局与深度(即 PIFu 本身)
  • fine level — 细层;看 1k 原图、负责高频细节
  • 3D embedding — 3D 嵌入;$\Omega$,从粗层 MLP 中间层抽出、传给细层的隐式几何上下文
  • $\Omega(X)$ — 粗层 MLP 第 4 层输出,$\mathbb{R}^{256}$,替代绝对深度做细层条件
  • depth conditioning — 深度条件化;把 $Z$ 显式喂给隐函数(PIFu 的做法,本文细层弃用)
  • occupancy field — 占据场;空间点"内/外"的连续概率场
  • occupancy loss — 占据损失;监督内外判定的损失
  • pixel-aligned — 像素对齐;特征严格对齐到 3D 点的投影像素
  • fully convolutional — 全卷积;输出与输入空间对齐,故可随机滑窗训练
  • sliding window — 滑窗(裁剪);细层用 512×512 随机窗口训练 1k 输入
  • receptive field — 感受野;神经元能看到的图像范围(细层不再覆盖整图)
  • holistic reasoning — 整体推理;看整张图做全局一致的深度推断
  • depth ambiguity — 深度歧义;沿相机射线观测相同导致的固有不确定性
  • stacked hourglass — 堆叠沙漏网络;本文图像编码器结构
  • group normalization — 组归一化;替换 batch norm,适合小 batch
  • skip connection — 跳连;把浅层特征直连深层,助信息/梯度传递
  • MLP — 多层感知机;隐函数 $g$ 的实现
  • front/back normal map — 正面/背面法线图;作为几何代理的附加输入
  • image-to-image translation — 图像到图像翻译;RGB→法线的转换范式
  • pix2pixHD — 高分辨率条件 GAN 图像翻译网络(本文用来预测法线)
  • proxy — 代理;用法线图在图像空间代替直接预测 3D 几何
  • extended Binary Cross Entropy (BCE) — 扩展二元交叉熵;本文占据损失
  • importance sampling — 重要性采样;在表面附近多采点
  • curvature — 曲率;几何二阶导,本文据此论证采样密度带来的细节提升
  • iso-surface — 等值面;从占据场里提取出的曲面
  • Marching Cubes — 行进立方体;阈值 0.5 提等值面的经典算法
  • point-to-surface (P2S) — 点到面距离(cm),衡量几何精度
  • Chamfer distance — 倒角距离;点集间双向最近点距离
  • RenderPeople — 商业高分辨率摄影测量扫描数据集(500 个,450/50 划分)
  • BUFF — 带真值的穿衣人体扫描评测数据集
  • People Snapshot — 公开定性对比数据集(对比 DeepHuman/PIFu/Tex2Shape)
  • Tex2Shape — 模板 + UV 位移/法线的高精度人体几何方法(对比对象)
  • DeepHuman — 多尺度体素人体重建(对比对象)
  • parametric body model — 参数化人体模型(SMPL/SCAPE 等)
  • template-free — 无模板;不依赖参数化人体网格
  • arbitrary topology — 任意拓扑(裙摆、长发、高跟鞋等)
  • precomputed radiance transfer (PRT) — 预计算辐射传输;合成训练图的光照渲染技术
  • perceptual loss — 感知损失;$L_{VGG}$,基于 VGG 特征的距离
  • in-the-wild — 真实自然场景(互联网照片)
  • self-occlusion — 自遮挡;身体自身挡住的区域
  • ill-posed problem — 病态问题;解不唯一的反问题(如单图推背面)
  • alternate training — 交替训练粗细两级(本文优于端到端联合训练)
posted @ 2026-09-16 00:09  Quentin_Yws154  阅读(14)  评论(0)    收藏  举报