论文原文:https://arxiv.org/abs/1407.1239
本文的研究是通过单张RGB图像中的人体2D姿态转换成3D姿态,即作了姿态升维。
总体思路
借鉴了对抗生成网络与传统坐标透视转换的思想,模型分为三部分:
-
第一部分姿态网络:就是传统做法常用的带残差的全连接神经网络直接通过2d姿态坐标预测3d姿态坐标。
-
第二部分相机网络:相机的参数由六个坐标决定(选择、缩放),采用与姿态网络相似的网络直接回归出六个坐标。
-
第二部分批判网络:类似GAN中的对抗网络,学习3D姿态的正常分布情况,迫使姿态网络产生符合常理的3D姿态。
姿态网络通过2d坐标生成3d坐标,相机网络生成相机参数,由相机参数重新将3d坐标投影回2d坐标(Reproject,论文名字由来),通过与原始坐标的损失进行反向传播。间隔一定周期更新批判网络。
姿态网络
使用人体16个关键点的2d坐标作为输入,输入层为<?, 32>,模型由如图所示的带残差的全连接层以及普通全连接层组成,输出层为<?, 48>,代表16个点关键点的3d坐标。这种网络就是传统直接使用深度学习从2d向3d转换的典型网络。模型相当于做了一个从
X
∈
R
2
×
n
X \in \mathbb{R}^{2 \times n}
X∈R2×n到
X
∈
R
3
×
n
X \in \mathbb{R}^{3 \times n}
X∈R3×n的映射。输出
X
∈
R
3
×
n
X \in \mathbb{R}^{3 \times n}
X∈R3×n
相机模型
与姿态模型类似的结构,直接回归出确定一个相机位姿所需的六个参数,输出层为<?, 6>,相当于一个长度为6的向量,每个向量都是一个相机参数,该向量被reshape为后期运算所需的形状2x3。输出为 K ∈ R 2 × 3 \boldsymbol{K} \in \mathbb{R}^{2 \times 3} K∈R2×3。
重投影层
框架图的右下角部分,通过3D姿态坐标与相机参数矩阵,可以将3D坐标重新投射到2D坐标(精髓所在),称为2D重投影坐标。实质上就是做了一个矩阵乘法:
W
′
=
K
X
W^{\prime}=K X
W′=KX
通过与输入模型的真实2D坐标的F范数得到重投影损失函数:
L
r
e
p
(
X
,
K
)
=
∥
W
−
K
X
∥
F
\mathcal{L}_{r e p}(\boldsymbol{X}, \boldsymbol{K})=\|\boldsymbol{W}-\boldsymbol{K} \boldsymbol{X}\|_{F}
Lrep(X,K)=∥W−KX∥F
批判网络
如图所示,模型的输入为姿态网络生成的3D姿态坐标,模型分为上下两路,先对进行KCS(论文为kinematic chain space,没了解)转换成类似于球坐标(因为原始的全连接层难以提取运动链,对称性和关节角度等人体姿态特征),然后接一层全连接层。下路直接使用全连接层,两路并行后拼接再经过全连接层获取批判网络的输出。批判网络以Wasserstein loss作为损失函数
数据预处理
- 相机参数的确定:对于每个姿态,设计了一个模板姿态,然后将3D姿态于模板姿态对齐,从而计算其旋转、缩放等参数