香港中大-商汤科技联合实验室的 AAAI 会议论文「Spatial Temporal Graph Convolution Networks for Skeleton Based Action Recognition」,提出了一种新的 ST-GCN,即时空图卷积网络模型,用于解决基于人体骨架关键点的人类动作识别问题,本文是对这一工作的解读分析。
作者 | 纵横
论文 | https://arxiv.org/pdf/1801.07455.pdf
来源 |
https://www.zhihu.com/question/276101856/answer/638672980
质胜文则野,文胜质则史,文质彬彬,然后君子。
GCN 升温的这两年里,动作识别领域出了不少好文章。这也不奇怪,毕竟动作识别以前就有 Graph 的相关应用,套用一下 GCN 总是会有提升的。不过,一年过去了,超过 Spatial Temporal Graph Convolution Networks for Skeleton Based Action Recognition 的工作仍然寥寥可数。我等屁民还是挺佩服的~
还在这个领域耕耘的同学们也不用灰心丧气,ST-GCN 作为一篇开山作(或者说占坑文),很多地方都从简了。要想提升不太困难~ 用大粗话来说,作者的主要工作就两点:
-
使用 OpenPose 处理了视频,提出了一个数据集
-
结合 GCN 和 TCN 提出了模型,在数据集上效果还不错
但是,这篇文章在工程和学术上都做到了文质彬彬:
-
从质上讲,文中针对性的改进着实有效,结果比较令人满意
-
从文上讲,故事讲的很棒,从新的视角整合了卷积、图卷积和时间卷积
-
从代码讲,结构清晰、实现优雅,可以当做模板
很多同学比较关心 st-gcn 到底做了什么,这里用个简单的思路说说我的理解。
OpenPose 预处理
OpenPose 是一个标注人体的关节(颈部,肩膀,肘部等),连接成骨骼,进而估计人体姿态的算法。作为视频的预处理工具,我们只需要关注 OpenPose 的输出就可以了。
视频中的骨骼标注
总的来说,视频的骨骼标注结果维数比较高。在一个视频中,可能有很多帧(Frame)。每个帧中,可能存在很多人(Man)。每个人又有很多关节(Joint)。每一个关节又有不同特征(位置、置信度)。
关节的特征
对于一个 batch 的视频,我们可以用一个 5 维矩阵 表示。
-
代表视频的数量,通常一个 batch 有 256 个视频(其实随便设置,最好是 2 的指数)。
-
代表关节的特征,通常一个关节包含
等 3 个特征(如果是三维骨骼就是 4 个)。
-
代表关键帧的数量,一般一个视频有 150 帧。
-
代表关节的数量,通常一个人标注 18 个关节。
-
代表一帧中的人数,一般选择平均置信度最高的 2 个人。
-
所以,OpenPose 的输出,也就是 ST-GCN 的输入,形状为
。
想要搞 End2End 的同学还是要稍微关注一下 OpenPose 的实现的。最近还有基于 heatmap 的工作,效果也不错~
ST-GCN 网络结构
论文中给出的模型描述很丰满,要是只看骨架,网络结构如下: