📌 前言
从单张2D图像估计人体的3D网格模型是计算机视觉领域的重要任务,在增强现实(AR)、人机交互、动作识别等应用中有着广泛的应用前景。然而,现有方法大多依赖CNN提取的全局图像特征来重建3D网格,忽略了网格表面与图像像素之间的稠密对应关系,导致重建效果不够理想。
本文将详细解读CVPR 2020论文《3D Human Mesh Regression with Dense Correspondence》,该论文提出了一种名为DecoMR的模型无关框架,通过在UV空间中显式建立网格与局部图像特征之间的稠密对应关系,实现了更精确的3D人体网格重建。
1. 研究背景与动机
1.1 现有方法的局限性
现有的3D人体网格估计方法主要分为两类:
基于模型的方法(Model-based):
- 代表方法:HMR、SPIN、CMR等
- 核心思路:回归SMPL模型参数
- 局限性:参数空间对网络学习不够友好,表征能力受限于预定义的人体模型
模型无关方法(Model-free):
- 代表方法:BodyNet(体素表示)、CMR(Graph-CNN)、DenseBody(UV位置图)
- 局限性:仍然依赖全局图像特征,缺乏网格与图像之间的稠密对应关系
1.2 核心问题
如图所示,传统方法(如SPIN和CMR)从全局图像特征向量重建3D网格,丢失了网格表面与图像像素之间的稠密对应关系:
传统方法流程:
输入图像 → CNN提取全局特征 → SMPL参数/Graph-CNN → 3D网格
↑
丢失了局部对应关系
关键洞察:输入与输出之间的稠密对应关系对于各类视觉任务至关重要,但在3D网格表示中这种对应关系是缺失的。
2. DecoMR框架详解
2.1 整体架构
DecoMR框架由两个核心组件构成:
-
稠密对应网络(CNet,Correspondence Net):在图像空间工作,预测IUV图像并提取局部特征
-
定位网络(LNet,Location Net):在UV空间工作,回归位置图生成3D网格
整体流程:
输入图像 → CNet → IUV图像 + 局部特征图
↓
UV特征迁移
↓
LNet → 位置图(Location Map) → 3D人体网格
2.2 核心创新:连续UV映射
2.2.1 SMPL默认UV映射的问题
SMPL模型的默认UV映射将人体网格分割成多个独立的部分放置在UV平面上,这破坏了原始网格表面的邻接关系:
- 手臂与手掌在UV平面上距离较远
- 不同身体部位之间的连接关系丢失
- 对网络学习不友好
2.2.2 新型连续UV映射的设计
DecoMR提出了一种保持更多邻接关系的连续UV映射:
设计步骤:
- 将模板网格切割成开放网格,同时保持整个网格表面为一个整体
- 使用面积保持的3D网格平面参数化算法,最小化UV映射与原始网格表面之间的面积失真
- 通过对称轴对齐和UV坐标平均来保持对称顶点的对称性
量化对比:
| UV映射类型 | 2D相关系数(S1) | 余弦相似度(S2) |
|---|---|---|
| SMPL默认 | 0.2132 | 0.8306 |
| DecoMR | 0.7758 | 0.9458 |
其中,S1计算公式为:
S1=∑m∑n(Amn−Aˉ)(Bmn−Bˉ)∑m∑n(Amn−Aˉ)2∑m∑n(Bmn−Bˉ)2S_1 = \frac{\sum_m\sum_n(A_{mn}-\bar{A})(B_{mn}-\bar{B})}{\sqrt{\sum_m\sum_n(A_{mn}-\bar{A})^2}\sqrt{\sum_m\sum_n(B_{mn}-\bar{B})^2}}S1=∑m∑n(Amn−Aˉ)2 ∑m∑n(Bmn−Bˉ)2 ∑m∑n(Amn−Aˉ)(Bmn−Bˉ)
其中A和B分别是原始网格和UV映射的顶点距离矩阵。
2.3 稠密对应网络(CNet)
CNet采用编码器-解码器架构:
编码器:
- 主干网络:ResNet50
- 输出:局部特征图 Fim\mathcal{F}_{im}Fim + 全局特征向量 + 相机参数
解码器:
- 结构:上采样卷积层 + 跳跃连接
- 输出1:人体掩码(前景/背景分类)
- 输出2:前景像素的UV坐标(构成IUV图像)
损失函数:
LIUV=λcLc+λrLr\mathcal{L}_{IUV} = \lambda_c\mathcal{L}_c + \lambda_r\mathcal{L}_rLIUV=λcLc+λrLr
其中:
- Lc\mathcal{L}_cLc:二值交叉熵损失(前景/背景分类)
- Lr\mathcal{L}_rLr:L1回归损失(UV坐标预测)
2.4 顶点坐标回归(LNet)
2.4.1 特征迁移
通过预测的IUV图像,将图像空间的特征迁移到UV空间:
FUV(u,v)=Fim(x,y)\mathcal{F}{UV}(u,v) = \mathcal{F}{im}(x,y)FUV(u,v)=Fim(x,y)
其中(x,y)(x,y)(x,y)是被分类为前景的像素坐标,(u,v)(u,v)(u,v)是预测的UV坐标。
关键优势 :迁移后的特征图FUV\mathcal{F}_{UV}FUV与输出的位置图在UV空间中完美对齐。
2.4.2 位置图回归
LNet是一个轻量级CNN,输入包含:
- 迁移后的局部图像特征
- 扩展的全局图像特征
- 参考位置图
位置图损失:
Lmap=∑u∑vW(u,v)⋅∥X(u,v)−X^(u,v)∥1\mathcal{L}_{map} = \sum_u\sum_v W(u,v) \cdot \|X(u,v) - \hat{X}(u,v)\|_1Lmap=u∑v∑W(u,v)⋅∥X(u,v)−X^(u,v)∥1
其中WWW是权重图,远离躯干的区域被赋予更高的权重。
3D关节损失:
LJ3D=∑ik∥Zi−Z^i∥1\mathcal{L}_J^{3D} = \sum_i^k \|Z_i - \hat{Z}_i\|_1LJ3D=i∑k∥Zi−Z^i∥1
2D投影损失:
LJ2D=∑ik∥vi(zi−z^i)∥22\mathcal{L}_J^{2D} = \sum_i^k \|v_i(z_i - \hat{z}_i)\|_2^2LJ2D=i∑k∥vi(zi−z^i)∥22
2.4.3 一致性损失
为了提高3D网格与图像的对齐精度,引入一致性损失:
Lcon=∑(x,y)∥(x,y)−π(X(u,v),c)∥22\mathcal{L}{con} = \sum{(x,y)} \|(x,y) - \pi(X(u,v), c)\|_2^2Lcon=(x,y)∑∥(x,y)−π(X(u,v),c)∥22
其中π(X,c)\pi(X,c)π(X,c)表示使用相机参数ccc的投影函数。
原理:通过IUV图像将位置图从UV空间迁移回图像空间,投影后的2D坐标应该与原始像素坐标一致。
2.5 总体损失函数
L=LIUV+LLoc+λconLcon\mathcal{L} = \mathcal{L}{IUV} + \mathcal{L}{Loc} + \lambda_{con}\mathcal{L}_{con}L=LIUV+LLoc+λconLcon
其中:
- LLoc=Lmap+LJ3D+LJ2D\mathcal{L}{Loc} = \mathcal{L}{map} + \mathcal{L}_J^{3D} + \mathcal{L}_J^{2D}LLoc=Lmap+LJ3D+LJ2D
3. 实验结果与分析
3.1 数据集
| 数据集 | 类型 | 用途 |
|---|---|---|
| Human3.6M | 大规模室内数据集 | 训练+评估 |
| UP-3D | 室外3D姿态数据集 | 训练 |
| SURREAL | 合成数据集 | 训练+评估 |
| LSP | 2D姿态基准 | 分割评估 |
3.2 与SOTA方法对比
Human3.6M测试集结果(MPJPE-PA,mm):
| 方法 | MPJPE-PA |
|---|---|
| SMPLify | 82.3 |
| HMR | 56.8 |
| CMR | 50.1 |
| DenseRaC | 48.0 |
| SPIN | 41.1 |
| DecoMR | 39.3 |
SURREAL数据集结果(平均顶点误差,mm):
| 方法 | Surface Error |
|---|---|
| SMPLify++ | 75.3 |
| BodyNet | 73.6 |
| DecoMR | 56.5 |
3.3 消融实验
不同输入配置对比(Human3.6M):
| UV映射 | 全局特征 | 局部特征 | 原始像素 | MPJPE-PA (P2) |
|---|---|---|---|---|
| SMPL | ✓ | 49.1 | ||
| SMPL | ✓ | 44.8 | ||
| SMPL | ✓ | ✓ | 42.6 | |
| Ours | ✓ | 47.1 | ||
| Ours | ✓ | 42.3 | ||
| Ours | ✓ | ✓ | 39.3 |
关键发现:
- 局部特征比全局特征带来更大的性能提升
- 结合全局和局部特征效果最佳
- 迁移原始像素的改进远小于迁移特征(缺乏姿态信息)
- 连续UV映射在所有配置下均优于SMPL默认UV映射
3.4 失败案例分析
典型失败情况包括:
- 训练集中罕见的极端姿态
- 不常见的视角
- 严重的自遮挡
- 多人交互导致的混淆
4. 方法优势总结
| 特性 | 传统方法 | DecoMR |
|---|---|---|
| 特征利用 | 仅全局特征 | 全局+局部特征 |
| 对应关系 | 隐式/缺失 | 显式稠密对应 |
| UV映射 | SMPL默认(不连续) | 连续UV映射 |
| 邻接保持 | 差 | 好 |
| 网格细节 | 一般 | 更精细 |
5. 核心代码实现思路
5.1 UV特征迁移
python
def uv_transfer(feature_map, iuv_image, uv_map_size):
"""
将图像空间特征迁移到UV空间
Args:
feature_map: 图像空间特征图 [B, C, H, W]
iuv_image: 预测的IUV图像 [B, 3, H, W]
uv_map_size: UV映射尺寸
Returns:
transferred_feature: UV空间特征图 [B, C, uv_H, uv_W]
"""
B, C, H, W = feature_map.shape
transferred_feature = torch.zeros(B, C, uv_map_size, uv_map_size)
# 获取前景掩码
foreground_mask = iuv_image[:, 0] > 0 # I通道 > 0表示前景
# 获取UV坐标
u_coords = iuv_image[:, 1] # U通道
v_coords = iuv_image[:, 2] # V通道
# 迁移特征
for b in range(B):
fg_pixels = foreground_mask[b]
u = (u_coords[b][fg_pixels] * uv_map_size).long()
v = (v_coords[b][fg_pixels] * uv_map_size).long()
# 从图像空间采样特征并放置到UV空间
transferred_feature[b, :, v, u] = feature_map[b, :, fg_pixels]
return transferred_feature
5.2 位置图到3D网格
python
def location_map_to_mesh(location_map, uv_coords):
"""
从位置图重建3D网格
Args:
location_map: UV空间位置图 [B, 3, H, W]
uv_coords: 每个顶点的UV坐标 [N, 2]
Returns:
vertices: 3D顶点坐标 [B, N, 3]
"""
B = location_map.shape[0]
N = uv_coords.shape[0]
# 双线性插值获取顶点坐标
vertices = F.grid_sample(
location_map,
uv_coords.unsqueeze(0).unsqueeze(0).expand(B, -1, -1, -1),
mode='bilinear',
align_corners=True
)
return vertices.squeeze(2).permute(0, 2, 1) # [B, N, 3]
5.3 一致性损失计算
python
def consistency_loss(location_map, iuv_image, camera_params):
"""
计算一致性损失
Args:
location_map: 预测的位置图
iuv_image: GT IUV图像
camera_params: 相机参数
Returns:
loss: 一致性损失值
"""
# 获取前景像素的图像坐标
foreground_mask = iuv_image[:, 0] > 0
image_coords = get_pixel_coordinates(foreground_mask) # (x, y)
# 获取对应的UV坐标
uv_coords = iuv_image[:, 1:3][foreground_mask]
# 从位置图获取3D坐标
coords_3d = sample_from_location_map(location_map, uv_coords)
# 投影到图像平面
projected_2d = project_to_image(coords_3d, camera_params)
# 计算L2损失
loss = F.mse_loss(projected_2d, image_coords)
return loss
6. 应用场景与展望
6.1 应用场景
- 增强现实(AR):虚拟试衣、虚拟人物叠加
- 人机交互:机器人理解人体姿态和形状
- 视频编辑:人体动作捕捉与重定向
- 健身运动分析:姿态分析与动作纠正
- 安防监控:人体检测与追踪
6.2 未来研究方向
论文指出,未来工作可以关注:
- 重建超越现有人体模型的表面细节(如衣物褶皱、发型等)
- 处理多人场景中的相互遮挡问题
- 提升对极端姿态和罕见视角的鲁棒性
7. 总结
DecoMR通过以下创新解决了3D人体网格估计中缺乏稠密对应关系的问题:
- 连续UV映射:设计了保持更多邻接关系的UV映射,使网络学习更加友好
- 显式稠密对应:通过IUV图像和特征迁移,在UV空间建立图像特征与网格表面的稠密对应
- 局部特征利用:充分利用局部图像特征而非仅依赖全局特征,提升重建细节
实验表明,DecoMR在多个公开基准测试上取得了当时的SOTA性能,证明了显式建立稠密对应关系对于3D人体网格估计的重要性。
参考文献
- Zeng W, Ouyang W, Luo P, et al. 3D Human Mesh Regression with Dense Correspondence[C]//CVPR 2020.
- Loper M, et al. SMPL: A skinned multi-person linear model[J]. TOG, 2015.
- Kanazawa A, et al. End-to-end recovery of human shape and pose[C]//CVPR 2018.
- Kolotouros N, et al. Learning to reconstruct 3D human pose and shape via model-fitting in the loop[C]//ICCV 2019.
- Guler R A, et al. DensePose: Dense human pose estimation in the wild[C]//CVPR 2018.
如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔!有任何问题欢迎在评论区讨论交流!