基于深度图的位姿估计(2018至今)
分类:
文章
•
2024-02-12 14:37:04
1. 简介
2. A2J回归网络
-
论文:A2J: Anchor-to-Joint Regression Network for 3D Articulated Pose Estimation from a Single Depth Image (2019)
-
核心思想
- 本着整体学习以增强泛化能力的精神,通过聚合多个anchor点的估计结果预测3D关节位置
-
代码:https://github.com/zhangboshen/A2J
-
主要特点
- 基于anchor的回归网络,具有end-to-end的学习能力
- 提出了一个“内容丰富的锚点(anchor)”方案,同时考虑了关节位置预测误差和锚点空间布局
- 为确保运行效率,采用了2D CNN,且没有反卷积层
2.1 历史总结
2.1.1 先进的非深度学习方案
-
代表作
- Real-time human pose recognition in parts from single depth images (2011,Jamie Shotton)
- Depth-images-based pose estimation using regression forests and graphical models (2015, Li He)
-
步骤
- 第一步:提取人工设计的特征
- 第二步:执行分类或回归
-
不足
2.1.2 2D深度学习方案
-
代表作
- Deeppose: Human pose estimation via deep neural networks (2014, Alexander Toshev)
-
特色
- 深度学习对视觉模式特征具有很强的学习能力
- 2D CNN在2D位姿估计中获得了巨大的成功
-
步骤
- 第一步:获得所有关节的热图(heatmap)集
- 第二步:回归关节2D位姿
-
不足
- 热图设置无法适应不同的关节
- 返卷积操作非常耗时
- 部分基于encoder-decoder的方法无法进行end-to-end训练
2.1.3 3D深度学习方案
-
核心思想
- 为了充分利用深度图中的3D信息以提高性能,近来的研究倾向于3D深度学习
- 此思路又分为两个研究方向:
2.1.3.1 基于3D-CNN
-
代表作
- 3D convolutional neural networks for efficient and robust hand pose estimation from single depth images (2017, Liuhao Ge)
- Hand3d: Hand pose estimation using 3d neural network (2017, Xiaoming Deng)
- V2v-posenet: Voxel-to-voxel prediction network for accurate 3d hand and human pose estimation from a single depth map (2018, Gyeongsik Moon)
-
步骤
- 将深度图像体素化为体积表示(例如,占用网格模型:[Voxnet: A 3d convolutional neural network for real-time object recognition (2017)])
- 执行3D卷积或反卷积操作以提取3D视觉特征
-
不足
- 由于卷积参数众多,3D CNN训练较慢
- 3D体素化操作需要较大的计算力和内存空间
2.1.3.2 基于point-set
-
代表作
- Pointnet: Deep learning on point sets for 3d classification and segmentation (2017, R Qi Charles)
- Pointnet++: Deep hierarchical feature learning on point sets in a metric space (2017, Charles Ruizhongtai Qi)
-
步骤
-
不足
2.1.4 A2J (2D深度学习)
-
分组
-
优点
- 密集的锚点以整体方式捕获全局-局部空间上下文信息,而无需使用计算量大的反卷积层
- 2D CNN用作骨干网络以提高运行效率
2.2 锚点到关节点(A2J)回归网络
2.2.1 A2J网络

-
2D主干网络:
-
三个功能分支:
- 平面内偏移量估计:预测
O
j
(
a
)
O_j(a)
Oj(a)
- 深度估计:预测
D
j
(
a
)
D_j(a)
Dj(a)
- 锚点提案:寻找信息量丰富的锚点, 预测
P
j
(
a
)
P_j(a)
Pj(a)
2.2.2 锚点选取方案
-
锚点选取方案
- 在输入深度图像中密集地选取锚点,其stride 为4个像素(
S
t
=
4
S_t=4
St=4),以同时提取全局-局部空间信息,如下图所示
2.2.3 计算关节位置
-
需要计算关节以下两个位置:
- 关节
j
j
j的平面内位置
- 关节
j
j
j的深度值
-
锚点用途
- 每一个锚点都作为局部回归器,通过平原内偏移预测分支和深度估计分支来预测所有关节的3D位置
- 对于特定的关节,每个锚点的贡献是不同的,通过锚点提案分支获得对应的权重
P
j
(
a
)
P_j(a)
Pj(a)
-
计算关节
j
j
j在平面内的位置和深度值
{
S
^
j
=
∑
a
∈
A
P
^
j
(
a
)
(
S
(
a
)
+
O
j
(
a
)
)
D
^
j
=
∑
a
∈
A
P
^
j
(
a
)
D
j
(
a
)
(
1
)
\begin{cases} \hat{S}_j = \sum_{a \in A} \hat{P}_j(a)( S(a) + O_j(a) ) \\ \hat{D}_j= \sum_{a \in A} \hat{P}_j(a) D_j(a) \end{cases} \quad \quad (1)
{S^j=∑a∈AP^j(a)(S(a)+Oj(a))D^j=∑a∈AP^j(a)Dj(a)(1)
-
S
^
j
\hat{S}_j
S^j:关节
j
j
j在平面内的估计值
-
D
^
j
\hat{D}_j
D^j:关节
j
j
j的深度估计值
-
P
^
j
(
a
)
\hat{P}_j(a)
P^j(a):是锚点
a
a
a相对于关节
j
j
j的归一化权重,使用softmax进行计算而得
P
^
j
(
a
)
=
e
P
j
(
a
)
∑
a
∈
A
e
P
j
(
a
)
(
2
)
\hat{P}_j(a) = \frac{e^{P_j(a)}}{\sum_{a \in A} e^{P_j(a)}} \quad \quad (2)
P^j(a)=∑a∈AePj(a)ePj(a)(2)
- 当
P
^
j
(
a
)
>
0.02
\hat{P}_j(a) > 0.02
P^j(a)>0.02:则认为此锚点
a
a
a对关节
j
j
j来说,是一个信息丰富的锚点(
informative anchor point
)
2.2.4 计算锚点在平面内相对于关节的偏移量