动机与贡献
这篇文章是基于他们在2017年ICCV上发表的《learning to estimate 3d hand pose from single RGB images》论文基础上,做的进一步改(guan)进(shui), 两篇论文对比,比较大的区别是2019年的工作在输出手部关节点的3D pose基础上,同时给出了mesh的估计结果,同时改进了2017年的关节点检测方案,摒弃了手部分割子网络。
这篇文章认为的目前业界方案存在的问题:
- 单目RGB方案仅生成手部关键点的3D位置,不生成mesh,不能完整表达手的3D形态。
- 没能解决合成数据训练和真实场景应用之间的domain gap。
工作贡献:
- 利用Graph CNN重构手部表面的完整3D面片。
- 为了实现全监督训练,构建了包含3D meshes和3D poses的大尺度合成数据集。
- 提出利用真实数据深度图的弱监督训练方案,解决合成与真实之间的domain gap问题。
结构设计
Loss设计
Heat-map Loss
L
H
=
∑
j
=
1
J
∣
∣
H
j
−
H
j
^
∣
∣
2
2
L_H = \sum_{j=1}^{J} ||H_j - \hat{H_j}||^2_2
LH=j=1∑J∣∣Hj−Hj^∣∣22
J=21, 2D关键点热力图的分辨率为64*64,真值图是由每个2D关节点为中心,4px标准差的2D高斯分布。本质上是MSE Loss。
Mesh Loss
L
M
=
λ
v
L
v
+
λ
n
L
n
+
λ
e
L
e
+
λ
l
L
l
L_M = \lambda_vL_v + \lambda_nL_n + \lambda_eL_e + \lambda_lL_l
LM=λvLv+λnLn+λeLe+λlLl
L
v
L_v
Lv是面片顶点的2D/3D loss,
L
n
L_n
Ln是面片的法向Loss,
L
e
L_e
Le是组成面片的边loss,
L
l
L_l
Ll是Lalacian loss.
疑惑:通过渲染得到的合成数据尚能得到此loss,如果对真实场景做调优,很难获取如此完备的真值。
L
v
=
∑
i
=
1
N
∣
∣
v
i
3
D
−
v
i
^
3
D
∣
∣
2
2
+
∣
∣
v
i
2
D
−
v
i
2
D
^
∣
∣
2
2
L_v = \sum_{i=1}^N ||v_i^{3D} - \hat{v_i}^{3D}||_2^2 + ||v_i^{2D} - \hat{v_i^{2D}}||_2^2
Lv=i=1∑N∣∣vi3D−vi^3D∣∣22+∣∣vi2D−vi2D^∣∣22
L
n
=
∑
t
∑
(
i
,
j
)
∈
t
∣
∣
⟨
v
i
^
3
D
−
v
j
^
3
D
,
n
t
⟩
∣
∣
2
2
L_n = \sum_t\sum_{(i,j)\in t}||\langle\hat{v_i}^{3D} - \hat{v_j}^{3D}, n_t\rangle||_2^2
Ln=t∑(i,j)∈t∑∣∣⟨vi^3D−vj^3D,nt⟩∣∣22
mesh中第t个三角面片的第i和第j个顶点,这两个顶点构成的向量应与法向量
n
t
n_t
nt正交。
L
e
=
∑
i
=
1
E
(
∣
∣
e
i
∣
∣
2
2
−
∣
∣
e
i
^
∣
∣
2
2
)
2
L_e = \sum_{i=1}^{E}(||e_i||_2^2 - ||\hat{e_i}||_2^2)^2
Le=i=1∑E(∣∣ei∣∣22−∣∣ei^∣∣22)2
L
l
=
∑
i
=
1
N
∣
∣
δ
i
−
∑
v
k
∈
N
(
v
i
)
δ
k
/
B
i
∣
∣
2
2
L_l=\sum_{i=1}^N||\delta_i -\sum_{v_k\in N(v_i)}\delta_k/B_i||_2^2
Ll=i=1∑N∣∣δi−vk∈N(vi)∑δk/Bi∣∣22
δ
i
=
v
i
3
D
−
v
i
^
3
D
\delta_i=v_i^{3D} -\hat{v_i}^{3D}
δi=vi3D−vi^3D,
N
(
v
i
)
N(v_i)
N(vi)是顶点
v
i
v_i
vi的周围点集合,
B
i
B_i
Bi是集合内的顶点数,Laplacian loss的引入防止相邻顶点有相反的offset,保证面片的局部表面平滑性。
在参数配置上,
λ
v
=
1
\lambda_v=1
λv=1,
λ
n
=
1
\lambda_n=1
λn=1,
λ
e
=
1
\lambda_e=1
λe=1,
λ
l
=
50
\lambda_l=50
λl=50。
3D Pose Loss
L J = ∑ j = 1 J ∣ ∣ ϕ j 3 D − ϕ j ^ 3 D ∣ ∣ 2 2 L_J = \sum_{j=1}^J||\phi_j^{3D} - \hat{\phi_j}^{3D}||_2^2 LJ=j=1∑J∣∣ϕj3D−ϕj^3D∣∣22
ϕ j 3 D \phi_j^{3D} ϕj3D和 ϕ j ^ 3 D \hat{\phi_j}^{3D} ϕj^3D分别是3D关节点的真值与估计值。
在网络实际设计时,先分别训练stacked hourglasse网络+heat-map loss, 3D pose regressor + 3D pose loss,得到准确的2D/3D关节点。再利用
L
f
u
l
l
y
L_{fully}
Lfully端到端训练整体网络(stacked hourglass网络 + residual网络+Graph CNN)用以生成面片。
L
f
u
l
l
y
=
λ
H
L
H
+
λ
M
L
M
+
λ
J
L
J
L_{fully} = \lambda_HL_H+\lambda_ML_M+\lambda_JL_J
Lfully=λHLH+λMLM+λJLJ
其中,
λ
H
=
0.5
\lambda_H=0.5
λH=0.5,
λ
M
=
1
\lambda_M=1
λM=1,
λ
J
=
1
\lambda_J=1
λJ=1
效果
耗时
在1080 GPU上可以跑到19.9ms,大头在backbone上,花了12.6ms,residual network + Graph CNN花了4.7ms,pose regressor花了2.6ms