- 核心技术
- 以原创技术体系为根基,SenseCore商汤AI大装置为核心基座,布局多领域、多方向前沿研究,
快速打通AI在各个垂直场景中的应用,向行业赋能。
CVPR 2022 Oral|PoseConv3D开源:基于人体姿态的动作识别新范式
引言
PoseC3D framework
我们此前的工作 PoseC3D[1]在今年的CVPR中以Oral Presentation接收,这项工作第一个使用3D-CNN进行基于关键点序列的视频理解,同时取得了较好的识别性能,对后续的工作存在一些启发意义。
在之前的文章(https://zhuanlan.zhihu.com/p/395588459)中,我们已对这项工作的具体方法,相对 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. 在难以获取高质量关键点的情况下,骨骼动作识别的性能会受到较大影响。在实际使用过程中,还需要依据实际需求,来选择究竟基于那种模态,进行视频理解。
存在问题
现有Skeleton-based Action Recognition的解决方案,主要有基于GCN或CNN的两大类别,本文会分别讨论其中存在的一些问题。
GCN方法及其问题
作为Skeleton Action Recognition的主流方法,GCN方法依然存在一系列实践相关的问题,这些问题制约了模型的性能,并一定程度上影响了不同方法间的公平比较。本文以NTURGB+D数据集为例,对存在的问题进行简述。
Preprocessing & Augmentation
给定一个skeleton sequence,目前的GCN方法会先对其进行处理,以得到模型输入。预处理主要分为两个部分:
空间维度上,以第一帧作为基准,将第一帧中的skeleton的中心点置于原点,将第一帧中skeleton的脊椎与z轴对齐。
2. 时间维度上,针对数据集中序列长短不一的问题。
主要有以下解决方案:
1. ST-GCN[3]: 将所有序列以zero padding扩充至最大长度(所有序列中最长序列的长度)。
2. AGCN[4]: 将所有序列以loop padding扩充至最大长度。
3. CTR-GCN[5]: 预处理时不进行处理,在data augmentation时,使用Random Crop裁剪出子序列,并 interpolate 到一定长度。
其中,前两个方案的缺点在于,将序列以确定形式pad到最长的长度,产生了计算力浪费。第三种方案,虽可以产生多样的训练样本,但interpolate得到的skeleton分布与原本的数据分布不同,且crop出的子序列不一定能完整地表示整个动作。
在PYSKL中,我们对相关实践进行了改进。具体说,我们将PoseC3D中Uniform Sampling直接应用于 GCN,从原本的skeleton sequence中采样出子序列作为输入,这种方式在训练时可以得到更多样的训练样本(且每个样本都足以覆盖整个动作),也使test time data augmentation成为可能。
Hyper Parameter Setting
在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] 。PYSKL具备如下特点:
模型完整,实现优秀: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上都取得了排名前列的性能。
代码简练:专注于骨骼动作识别,PYSKL对代码进行了精简,只保留主要功能,去掉了冗余的code。其主目录下只保留少于5000行代码,少于MMAction2的三分之一。
易于上手:用户可直接使用PYSKL中提供的pickle文件进行训练与测试。同时,我们提供了工具来对2D/3D骨骼数据进行可视化。
PYSKL中的PoseC3D与ST-GCN++实现在NTURGB+D上取得了良好性能
传送门
论文地址
https://arxiv.org/abs/2104.13586
项目主页
https://github.com/kennymckormick/pyskl
References
[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/