一、实验
一篇引入关节点信息的论文,要点(abstrat中作者提到):
- 端到端的模型,lstm,没有经过先提取关节特征这种步骤;
- 不同于独立的学习关节点特征(human-joint features),这篇文章引入的pose-attention机制通过不同语义相关的关节点(semantically-related human joints)分享attention参数,然后将这些通过human-part pooling层联合起(这一点不是很懂,暂时理解为把关节点特征又联合为部分特征,再合起来成为图片特征);
- 测试集中不需要关节特征的标注,这个方法同时可以粗略的形成关节点标注。
总架构图,输入首先是由TSN双流提取的特征,这里叫做Conv Feature Cube
特征图大小为K1*K2,t代表时间(帧),空间图是K1xK2的大小,共dc个通道。所以Ct是K1xk2个dc维的向量。可以看到这里的特征还是带有位置的不同,方便后面对应不同关节点。
Pose-Attention模块
图中可以看到定义了13个关节点,又分为了5个Parts,Parts和Joints的对应就是人为定义的,因为是lstm结构,输入是图片特征和ht-1。
右上角标为J表示每个关节点不同,P表示每个Part不同,这里有一些参数共享,得到的就是每个关节点在不同位置的权重
之后进行归一化,得到attention值
这一步根据 part 和 joint 的对应关系,把关节点的特征合并为 part 的特征,F是human-part-related feature。
再把每个部分经过PartPool层合在一起,得到整张图片的特征,St是pose-related feature。这里的PartPool层对比了max,mean,concat三种,结果是concat效果最好。
得到的St输入lstm中。loss分为两个部分,从loss理解为什么测试集不需要标注更容易一些
第一部分
交叉熵来对最终分类结果的one hot求loss。
第二部分
α是attention得到的关节位置,M是标注(文章中说的是在关节点处采用高斯分布,形成对应的热点图,具体实现没有看)。总之可以理解为通过标注形成一张图片关节点位置的热点图,和生成的关节点attention求loss。
二、数据集和实验结果
数据集用了两个较小的带有关节点标注的数据集,Sub-JHMDB and PennAction
和state-of-the-art的对比,文中还要很丰富的实验诸如有无attention参数(效果不是特别明显),pooling方式,图片特征提取方式(双流分开做对比),attention参数share方式等,这里不贴了。
三、实现代码
https://github.com/lanlianhuaer/Recurrent-Pose-Attention (原作者的,用theano框架实现)
https://github.com/agethen/RPAN (其他人的实现,用tensorflow)