ST-GCN基于skeleton的动作识别
gcn
图卷积,其实是基于graph-structure这种结构,不再是一维或2维的空间,本身就可以表示空间的图结构。多张骨架skeleton可以共同组成一张图graph
st_gcn有两种类型的边:(基于openpose提取的skeleton)
- 一种是符合关节自然连通性的空间边,
- 另一种是跨越连续时间步长连接同一关节的时间边。
并在此基础上构造了多个时空图卷积层,实现了信息在时空维度上的集成
这样构成的同时具有空间关系边和时间关系边的“多帧skeleton组成1张graph_structure",经过多次GCN(论文中提及graph的维度变化是比如输入多帧组成的1张graph----64-64-64-128-128-128-256-256-256这叫保持时间操作等长,即卷积核变多就会减少featuremap大小),最终得到高层特征,然后对这个高层特征用softmax分类得到动作类别。(当然也需要正确的置信度阈值)
问题:st-gcn一次的输入帧数是不是固定的(可以不固定,因为全卷积可以控制输出尺度;但是论文中应该是固定的,因为不固定1张graph的大小就变了),gcn采用了9层。
动作识别:
- 基于RGB图像(精度不错)---如Non-local Neural Networks,78% top1准确率,ksinetics
- 基于Two-stream(RGB+光流场)(精度不错)---如TSN,I3D
- 基于骨架(精度差些)---如ST-GCN
比如kinetics大概都在10s左右的动作,也即300帧,那么提取视频的特征就是(300,3, 18 ,nums_person)18:每个骨架的关键点及置信度,每帧只选了关键点自信度最高的两人(这里做法也是为了固定最终的tensor尺度)。
一个action:多个不同动作帧的有序组合,因此一个action的识别也需要长期的信息交互。
当然也可以将动作识别直接用到动作检测中,那就需要密集的动作识别。是不是可以有一个检测过程,像Faster rcnn一样可以给出region(frames) proposal,然后送入动作识别组件中去。
为什么yolo会火尤其在工业界?想想就明白了!
工业界和学术界对算法的不同追求:
-
工业界青睐的算法在学术界其实并不重视,一方面是因为开源的原因。
-
另一方面可以看到顶会的算法都不是注重速度的,通常用了很复杂的模块和trick来提升精度。而且这些trick不是一般意义的trick了,是针对这个数据集的或者说针对糟糕检测器的一些trick, 对于实际应用几乎没有帮助。
-
因此,在这里提醒一下,应该把重心往代码能力上靠拢了,真正有价值的东西必然很少,没必要焦虑生怕拉下来什么关键技术。
为什么同一个目标或者不同目标的提取后的特征不完全一样也可以做跟踪??阈值!DL中常用的就是阈值。
既然在工业界就要做工业界应该做的事!不是吗?
跟踪
基于skeleton的动作识别还需要结合poseTrack(alphapose中用的是PoseFLOW),保证动作识别时不同目标的pose不交叉。否则无法对单人时序建模。
人是典型的非刚体,因此大部分跟踪问题(75%)都是研究人。
典型的跟踪方法过程:
- 检测(目标类别),
- 特征抽取(像NLP一样给予目标嵌入向量),
- 数据关联(对不同帧之间的目标嵌入作数据关联,这步一般还是hand-crafted。)
对于人这种目标:
ReID是处理多目标跟踪任务中轨迹因长时间遮挡或者漏检而丢失的找回任务的必须模块。
attention主要用来处理部分遮挡的问题。