PoseConv3d笔记

papercode

摘要与结论

  • 尽管许多基于GCN的骨架动作识别算法取得不错的结果,但依旧在鲁棒性、互操作性和可扩展性方面存在限制。
  • 提出了PoseConv3D:一种以3D热图体积作为输入的基于3D-CNN的骨骼动作识别方法,与GCN的方法相比
    • 在学习时空特征方面更加有效
    • 对姿态估计的噪声更具有鲁棒性
    • 在交叉数据集中更具有泛化性
    • 在处理多人场景方面无需额外计算成本
  • 另外,更容易与其他模态结合,在八个多模态识别基准达到了SOTA

引言

基于人体骨架的动作识别其动作聚焦性和紧凑性,近年来受到越来越多的关注。在实践中,视频中的人体骨架主要表示为一系列的关节坐标列表,其中的坐标由姿态估计器提取。GCN是最受欢迎的方法之一,具体地说,GCN将每个时间步长的每个人体关节视为一个节点,空间和时间维度上的相邻节点通过边连接起来,然后将图卷积层应用于所构建的图,以发现跨空间和时间的动作模式。

基于GCN的方法在以下方面有局限性:

  • 鲁棒性:由于GCN直接处理关节坐标,坐标上的微小扰动通常导致完全不同的预测。
  • 互操作性:由于GCN是在骨架图上操作的,因此难以与其他模态结合。
  • 可扩展性:由于GCN将每个人体关节视为节点,因此涉及多人的场景中复杂性线性上升。

本文提出了PoseConv3D,解决了GCN方法的局限性:

  • 使用3D热图表示骨架对姿态估计更具有鲁棒性,对不同方法获得的输入挂架具有很好的泛化能力
  • 依赖于热图表示,更容易与其他模态集成到多流网络
  • 热图表示的复杂度与人数无关,处理多人场景不会增加计算开销

网络结构

姿态提取的良好实践

人体骨骼或姿态提取是基于骨骼的动作识别的重要预处理步骤,对最终的识别精度有很大影响。

一般来说2D姿势比3D姿势效果更好,如下图。与自底向上的方法相比,自顶向下的方法在标准基准(如coco -关键点)上获得了优越的性能。

消融实验

作者设计了一系列采用的不同的替代方法的姿态提取的消融实验。以下的3D-CNN实验的输入均为\(T*H*W=48*56*56\)

2D v.s. 3D 骨架

使用MS-G3D(用于基于骨骼的动作识别的当前最先进的GCN),对2D和3D关键点具有相同的配置和训练计划,结果如上表。

除了基于rgb的3d位姿估计方法,还考虑了“提升”方法,直接“提升”2d姿势(序列)到3d姿势(序列),基于HRNet提取的2D姿态对3D姿态进行回归,利用提升后的3D姿态进行动作识别。上表的结果表明,这种被提升的3D姿势没有提供任何额外的信息,在动作识别方面的表现甚至比原始的2D姿势更差。

Bottom-Up v.s. Top-Down.

作者用相同的主干实例化这两种方法(HRNet-w32)。此外,作者还用MobileNet-v2骨干网实例化自顶向下方法进行比较,它在coco验证方面的性能与HRNet(自底向上)相似。上表的结果显示,HRNet(自下而上)在COCO-val上的性能远低于HRNet(自顶向下),接近于MobileNet(自顶向下)。

Interested Person v.s. All Persons.

很多人可能存在于一个视频中,但并不是所有人都与感兴趣的动作有关。作者使用3种人物边界框进行姿态提取:Detection,Tracking(使用Siamese-RPN)和GT(对运动员的关注增加)。从上表的结果可以得到当事人的先验是极其重要的,即使是较弱的先验知识(每个视频1 个GT box)也能大大提高性能。

Coordinates v.s. Heatmaps

存储3D热图可能会占用大量磁盘空间。为提升效率,将每个 2D 关键点存储为坐标 (x, y, score),其中 score 为预测的置信度。在 FineGYM 上进行了实验,以估计这种热图 → 坐标的压缩会带来多大信息损失。作者发现,在使用高质量特征提取器的情况下,使用坐标作为输入,动作识别的精度仅有少量下降 (0.4%)。因此在后续工作中,作者以坐标的格式来存储提取出的 2D 姿态。

从2D姿势生成3D热图

论文用大小为\(K*H*W\)的热图来表示二维姿势,其中K是关节点的数量,H和W是框架的高度和宽度。如果只有coordinate-triplets\((x_k; y_k; c_k)\),可以通过组合以每个关节为中心的K个高斯映射来得到一个关节热图J:

\[ \boldsymbol{J}_{k i j}=e^{-\frac{\left(i-x_{k}\right)^{2}+\left(j-y_{k}\right)^{2}}{2 * \sigma^{2}}} * c_{k} \]

其中\(\sigma\)控制高斯映射的方差,\((x_k, y_k)\)\(c_k\)分别是第k个关节的位置和置信度分数,还可以创建limb热图:

\[ \boldsymbol{L}_{k i j}=e^{-\frac{\mathcal{D}\left((i, j), s e g\left[a_{k}, b_{k}\right]\right)^{2}}{2 * \sigma^{2}}} * \min \left(c_{a_{k}}, c_{b_{k}}\right)\]

第k个limb是在两个关节\(a_k\)\(b_k\)之间。函数D计算从点\((i,J)\)到段\(\left[\left(x_{a_{k}}, y_{a_{k}}\right),\left(x_{b_{k}}, y_{b_{k}}\right)\right]\)的距离。值得注意的是,尽管上述过程假设每一帧中都有一个人,但可以很容易地将其扩展到多人的情况,在这里直接累积所有人的第k个高斯映射,而无需放大热图。最后,一个3D热图堆叠是通过将所有热图(\(J\)\(L\))沿时间维度堆叠而得到的,因此形状会是\(K \times T \times H \times W\)

实际应用中,作者使用了两种方法来尽可能减少 3D 热图堆叠中的冗余,使其更紧凑

  1. Subjects-Centered Cropping

使热图与帧一样大是低效的,特别是当相关人员只在一个小区域活动时。在这种情况,先找到能够囊括了所有的2D姿势的边界框,然后根据找到的框裁剪所有帧,并将它们调整为目标大小。这样的话,2D姿势以及它们的移动能被保存,且使得三维热图体积的大小可以在空间上缩小。

  1. Uniform Sampling.

通过对帧的子集进行采样,还可以沿时间维减小3D热图的体积。具体来说,为从视频中采样n帧,将视频分成n个等长的片段,并从每个片段中随机选择一帧。

用于基于骨架的动作识别的3D-CNN

PoseConv3D

PoseConv3D以3D热图堆叠作为输入,可以用各种3D- cnn的backbone实例化。与一般的3D-CNN网络相比,需要添加两个修改:(1)由于3D热图体积的空间分辨率不需要像RGB剪辑那么大,因此在3D- cnn中删除了早期阶段的下采样操作;(2)由于采用的3D热图已经是中级特征,因此一个更浅(更少层)和更薄(更少通道)的网络对于PoseConv3D已经足够了。基于这些改动,作者采用了三种著名的3D-CNN:C3D,SlowOnly和X3D

如下表所示,采用轻量级版本的3d - cnn可以显著降低计算复杂度,但识别性能略有下降。而SlowOnly直接从Resnet膨胀而来而且具有良好的识别性能,作者将其作为Backbone。

RGBPose-Conv3D

作者提出RGBPose-Conv3D用于早期的人体骨骼和RGB帧的融合,有两条通路分别处理RGB模态和Pose模态。总的来说,RGBPose-Conv3D的架构遵循几个原则:(1)相比于RGB流,Pose流具有较小的通道宽度和较小的深度,以及更小的输入空间分辨率;(2)加了Early Fusion,增加了两个通路之间的双向横向连接,促进两种模式之间的早期特征融合。RGBPose- Conv3D分别使用每个通路的两个单独损失进行训练,因为联合从两种模态学习的单个损失会导致严重的过拟合。