资讯详情

CVPR 2022 Oral|港中文开源PoseC3D:基于3D-CNN的骨骼动作识别框架

极市平台编辑

作者丨Kenny@知乎

来源丨https://zhuanlan.zhihu.com/p/493374779

26958d281f834d27379f93b7613a2ad4.png

Paper:https://arxiv.org/abs/2104.13586

Code:https://github.com/kennymckormick/pyskl

引言

PoseC3D framework

我们以前的工作 PoseC3D [1] 在今年的 CVPR 中以 Oral Presentation 接收,这项工作首先使用 3D-CNN 基于关键点序列的视频理解,同时取得了良好的识别性能,对后续工作具有一定的启发意义。以前的文章(https://zhuanlan.zhihu.com/p在/3958459)中,我们对这项工作的具体方法是相对的 GCN 详细描述了方法的优点和实际性能。在过去的一段时间里,我关于 skeleton action recognition 本文将围绕以下主题进行一些相关研究:

  • 什么是 skeleton action recognition?它的意义在哪里?

  • 现有 skeleton action recognition 解决方案中的一些问题 PoseC3D 的优缺点。

  • 分享我们最新的开源实现 PYSKL [2]这个开源代码库也支持它 PoseC3D 与 GCN 方法及其一系列最佳实践。

Skeleton action recognition 定义及其意义

Skeleton Action Recognition

Skeleton-based action recognition 视频理解是基于和基于时序关键点序列的。举一个具体的例子:如果有一个例子 300 帧视频包含一个人,如使用 17 二维关键点(CoCo 定义),然后输入的形状是 300 x 17 x 2。一般来说,关键点序列主要是指人体关键点序列(如肘部、手腕、膝盖等),但显然,这种方法也可以扩展到其他场景,如面部关键点识别表达、手部关键点识别手势等。

不同于基于 RGB 视频理解,skeleton action recognition 有以下优点:1. 骨点本身作为一种与人体运动密切相关的表达形式,对视频理解具有重要意义;2. 骨点是一种轻模式,因此基于骨点的识别方法往往比基于其他模式的方法轻得多;3. 基于骨点的识别,结合高质量的姿态检测器,在数据较少的情况下,往往能达到良好的识别效果,并具有较强的泛化能力。

而同时,skeleton action recognition 也有以下缺点:1. 并非所有的动作都可以通过骨点序列来识别,有些动作类别需要依靠物体、场景等上下文来确定;2. 骨骼以获得高质量关键点的情况下,骨动作识别的性能会受到很大影响。在实际使用过程中,还需要根据实际需要选择视频理解的模式。

现有计划中的一些问题可以讨论 PoseC3D 的优缺点

现有 Skeleton-based Action Recognition 解决方案主要基于 GCN 或 CNN 本文将讨论两类存在的问题。

共有问题:Skeleton 质量

作为输入,Skeleton 本身的质量对最终的识别效果非常重要,但这往往受到的关注较少。PoseC3D 讨论了这一点,主要发现包括1. 若都局限于 pose estimator 得到的关键点, 那么使用 2D 作为输入,姿态估计的结果通常远好于使用 3D 姿势估计结果,或 2D -> 3D lifting 作为输入的结果;2.. 同为 2D 当姿势作为输入时,依据 pose estimator 识别结果也有优缺点,但差别不大。在 PYSKL 中,我们同样使用了来源于 Kinect 的 3D 骨骼点与 HRNet 输出的 2D 骨骼点训练 ST-GCN [3] 与 ST-GCN [2](我们开发的一个 ST-GCN 简单变种)两种模型。以 2D Pose 仅作为输入 ST-GCN 一个简单的变种,ST-GCN 就能在三项 benchmark (NTURGB D XSub, NTURGB D XView, NTURGB D 120 XSet)上达到所有 SOTA 前三种方法的性能。值得注意的是,HRNet 2D Pose 虽然在大多数评估数据集中都有优势,但并非全部:例如 NTURGB D 120 Xsub 这个评价基准,2D Pose 效果差 3D Pose。值得注意的是,HRNet 2D Pose 虽然在大多数评估数据集中都有优势,但并非全部:例如 NTURGB D 120 Xsub 这个评价基准,2D Pose 效果差 3D Pose。我们认为, 关于 Skeleton 类型和质量对识别效果的影响还有待大量研究。

另一点值得注意的是,我们认为随着姿态估计质量的提高,动作识别效果会单调提高,但两者绝不是简单的线性关系,这是 PoseC3D 中有指出。此外,我们认为,在某些情况下,即使姿势估计的质量很差,只要包含与目标动作相关的模式,也足以用于行为识别。如 HRNet 在 GYM 数据集中的识别效果实际上并不好,但依靠其估计的关键点,它仍然可以在动作识别任务中取得优异的效果。

GCN 方法及其问题

作为 Skeleton Action Recognition 主流方法,GCN 该方法仍存在一系列与实践相关的问题,这些问题限制了模型的性能,并在一定程度上影响了不同方法之间的公平比较。 NTURGB D 以数据集为例,简要介绍存在的问题。

给定一个 skeleton sequence,目前的 GCN 该方法将首先处理,以获得模型输入。预处理主要分为两部分:1. 在空间维度上,第一帧以第一帧为基准 skeleton 将第一帧中的中心点放在原点 skeleton 的脊椎与 z 轴对齐;2. 在时间维度上,针对数据集中序列长度不同的问题,主要有以下解决方案:

  • ST-GCN [3]: 以所有序列为准 zero padding 扩展到最大长度(所有序列中最长序列的长度)。

  • AGCN [4]: 以所有序列为准 loop padding 扩展到最大长度。

  • CTR-GCN [5]: 预处理时不处理, data augmentation 时,使用 Random Crop 剪出子序列 interpolate 到一定长度。

前两种方案的缺点是以确定的形式确定序列 pad 到最长的长度,会浪费计算能力。第三种方案可以产生各种训练样本,但是 interpolate 得到的 skeleton 分布不同于原始数据分布, crop 子序列不一定能完全表示整个动作。

在 PYSKL 我们改进了相关实践。具体来说,我们将 PoseC3D 中直接应用于 GCN,从原本的 skeleton sequence 采样出子序列作为输入,可以在训练中获得更多样化的训练样本(而且每个样本都足以覆盖整个动作),这也使得 test time data augmentation 成为可能。

在 PYSKL 我们也是对的 PoseC3D 训练经验是对的 GCN 改进了超参训练设置。主要的改进包括我们使用的 CosineAnnealing 训练策略,使用更强的正则项。超参设置改进后,GCN 模型的效果有了很大的提高。

CNN 方法及其问题

基于 CNN 进行 skeleton-based action recognition 的方法,主要分为 2D-CNN 与 3D-CNN 两大类。基于 2D-CNN 的方法,如 PoTion [6]将骨点序列成 color coding 画在一张图上,用 2D-CNN 处理它最大的问题在于 color coding 时序维度上的压缩造成了不可弥补的信息损失。

PoTion 使用 color coding 绘制骨骼点序列图

作为基于 3D-CNN 的方案,PoseC3D 将 keypoint heatmap 堆叠为 3D Voxel,并用 3D-CNN 进行处理。作为一个简单明了的方案,PoseC3D 能直接利用 3D-CNN 时空建模能力强,具有鲁棒性好、可扩展性好、兼容性好等优点。但同时,其也有以下的不足之处:

  1. 没有根据骨骼模态的特点进行独特的模型设计,识别效果和优化空间。

  2. 相对 GCN,所需的计算量仍然更多:基于使用 R50 的 3D 网络的计算能耗只能实现 GCN 中的较 heavy 方法 MS-G3D [7] 相当于其他更轻的 GCN 方法。

  3. 如输入为 3D 点的情况下,目前只能将其先投影到 2D,存在信息损失。这一缺陷可能可以为后续一些 Multi-View Projection + PoseC3D 的工作所弥补。

开源实现 PYSKL

基于 MMAction2(https://github.com/open-mmlab/mmaction2),我们最新开发了骨骼动作识别代码库 PYSKL,在已经完成的第一次 release 中,支持了三个模型 PoseC3D [1], ST-GCN [3], ST-GCN++[2] 。 具备如下特点:

  1. 模型完整,实现优秀:PYSKL 同时支持了 3D-CNN 和 GCN 两大类方法。对于 PoseC3D,我们 release 的模型覆盖了多个数据集与主干网络,并对大部分数据集全面覆盖了 Joint, Limb 两个模态。对于基于 GCN 的方法,我们参照 AA-GCN [8] 的实践,release 的权重文件全面覆盖了 Joint, Bone, Joint Motion, Bone Motion 四个模态。用户可以基于 release 的 config 和 weight 轻松复现相关数据集。同时,基于我们提出的良好实践训练的 PoseC3D 和 ST-GCN++,在多个 benchmark 上都取得了排名前列的性能。

  2. 代码简练:专注于骨骼动作识别,PYSKL 对代码进行了精简,只保留主要功能,去掉了冗余的 code。其主目录下只保留少于 5000 行代码,少于 MMAction2 的三分之一。

  3. 易于上手:用户可直接使用 PYSKL 中提供的 pickle 文件进行训练与测试。同时,我们提供了工具来对 2D / 3D 骨骼数据进行可视化。

PYSKL 中的 PoseC3D 与 ST-GCN++ 实现在 NTURGB+D 上取得了良好性能

链接:https://github.com/kennymckormick/pyskl

[1] Revisiting skeleton-based action recognition:https://arxiv.org/abs/2104.13586

[2] https://github.com/kennymckormick/pyskl:https://github.com/kennymckormick/pyskl

[3] Spatial temporal graph convolutional networks for skeleton-based action recognition:https://scholar.google.com/citations%3Fview_op%3Dview_citation%26hl%3Den%26user%3DtAgSyxIAAAAJ%26citation_for_view%3DtAgSyxIAAAAJ%3Ad1gkVwhDpl0C

[4] Two-stream adaptive graph convolutional networks for skeleton-based action recognition:https://openaccess.thecvf.com/content_CVPR_2019/html/Shi_Two-Stream_Adaptive_Graph_Convolutional_Networks_for_Skeleton-Based_Action_Recognition_CVPR_2019_paper.html

[5] Channel-wise topology refinement graph convolution for skeleton-based action recognition:https://openaccess.thecvf.com/content/ICCV2021/html/Chen_Channel-Wise_Topology_Refinement_Graph_Convolution_for_Skeleton-Based_Action_Recognition_ICCV_2021_paper.html

[6] Potion: Pose motion representation for action recognition:https://openaccess.thecvf.com/content_cvpr_2018/html/Choutas_PoTion_Pose_MoTion_CVPR_2018_paper.html

[7] Disentangling and unifying graph convolutions for skeleton-based action recognition:https://openaccess.thecvf.com/content_CVPR_2020/html/Liu_Disentangling_and_Unifying_Graph_Convolutions_for_Skeleton-Based_Action_Recognition_CVPR_2020_paper.html

[8] Skeleton-based action recognition with multi-stream adaptive graph convolutional networks:https://ieeexplore.ieee.org/abstract/document/9219176/

作者也是我们特邀嘉宾:

本文仅做学术分享,如有侵权,请联系删文。

1.面向自动驾驶领域的多传感器数据融合技术

2.面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)3.彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进4.国内首个面向工业级实战的点云处理课程5.激光-视觉-IMU-GPS融合SLAM算法梳理和代码讲解6.彻底搞懂视觉-惯性SLAM:基于VINS-Fusion正式开课啦7.彻底搞懂基于LOAM框架的3D激光SLAM: 源码剖析到算法优化8.彻底剖析室内、室外激光SLAM关键算法原理、代码和实战(cartographer+LOAM +LIO-SAM)

9.从零搭建一套结构光3D重建系统[理论+源码+实践]

10.单目深度估计方法:算法梳理与代码实现

11.自动驾驶中的深度学习模型部署实战

12.相机模型与标定(单目+双目+鱼眼)

13.重磅!四旋翼飞行器:算法与实战

14.ROS2从入门到精通:理论与实战

扫码添加小助手微信,可

也可申请加入我们的细分方向交流群,目前主要有等微信群。

一定要备注:,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。也请联系。

▲长按加微信群或投稿

▲长按关注公众号

:针对3D视觉领域的五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近4000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

 圈里有高质量教程资料、答疑解惑、助你高效解决问题

标签: 3ad50c晶体管怎样3ad00传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台