读书笔记23:Recognizing Human Actions as the Evolution of Pose Estimation Maps(CVPR2018)

http://openaccess.thecvf.com/content_cvpr_2018/papers/Liu_Recognizing_Human_Actions_CVPR_2018_paper.pdf

这篇文章和skeleton based action recognition有关系,差别在于这篇文章不使用pose estimation估计好的人体关节坐标值,而是使用pose estimation得到的probability heatmap,考虑这个heatmap的演化进行动作识别。

摘要首先介绍大多数动作识别方法都是从整个video中识别人体动作,但是这种方法会受到很多影响,例如混乱的背景和一些non-action的动作,都会限制模型的表现。背景介绍完毕,开始介绍自己的工作,本文提出通过将人体动作视作pose estimation map的演化来进行动作识别,并且,本文不依赖于那些不精确的姿态估计结果,而是依赖于姿态估计的副产品——pose estimation map。

这个pose estimation map其实是pose estimation最终产物的前驱。从一个静态的图片中估计人体的关节的过程如下:首先,表示人体的K个关节的坐标,,表示第k个关节的坐标值。对每一个关节位置的估计都是不断迭代的过程,迭代T次,就表示在第t个阶段预测第k个关节的函数。对第k个关节位置的预测方式就是对图片中的每一个像素都计算pose estimation map,表示每个像素属于关节k的可能性大小。对于image中的位置z来说,将它分配给第k个关节的pose estimation map可以表示为

                                                                     

表示的是位置z的color feature,得到的pose estimation map,∪表示的是向量的联结,表示从上一个pose estimation map中计算得到contextual features的feature function。在T次迭代完成后,就得到了对第k个关节的最终的pose estimation map。而从中用下式得到的

对于video第n帧,有K个不同的pose estimation map分别对应不同的关节,为了减少冗余,将用这些map生成一个表示全身所有关节的heatmap 

                                                                                     

如上图所示的a到b的过程就是将每个关节的map取平均得到全身的map。而得到最终每个关节位置的预测值,其实就是从estimation map中取最大值就可以

                                                                         

也就是从所有像素中选取值最大的,这个像素的坐标值作为第k个关节位置的预测。至此,video的每一帧都表示为一个heatmap和一个pose,video也就转化为了heatmap和poses的演化。

接下来介绍pose estimation map的演化。主要是将得到的heatmap的evolution压缩,每一个video变成一个body pose evolution image。首先介绍temporal rank pooling,对于一个video的heatmap的序列,包含N帧的heatmap,代表一帧heatmap,可以通过下式变成一个vector,也就是一个video转化为了一个vector

                                                                              

V是将一个matrix转化为,一个自然的约束是,temporal rank pooling会优化一个线性方程的参数,这个线性函数是,这个函数会保证,而这个优化过的参数u用来作为temporal rank pooling方法的一个表示,它编码了序列的演化信息。这个u就是我们要的表示video的信息,将其转换成原本的image应有的尺寸,可以得到下图中图(d)中的效果,很神奇,难道真的只需要使得u满足上面说的这个保证顺序的条件就能得到这种效果吗?

接着介绍spatial rank pooling,这个是考虑到temporal rank pooling主要保留了spatial的信息,而忽略了大多数temporal信息(作者对此的解释是让看上图的(d),看起来没有什么temporal的信息保留了,能看出来的是空间形状,这个理由是不是有点随意,还是我理解不够深?)。在每一个heatmap中,其实都有大量的冗余信息,因此,利用这种learning to rank的方法来将每一个heatmap表示成一个紧凑的compact feature,这个feature可以保留spatial的顺序。而将这些feature vector连起来就成了一个matrix,称为body shape evolution image,可以以一种紧凑的形式保留heatmap的时间和空间信息。下图展示了生成body shape evolution map的流程图

heatmap序列的第n帧被划分成P行,也就是说,或者是Q列,,前文所述的函数V被应用在这里将映射到,对目标的优化按下式

                                                           

这里面,给人的感觉是在保证每一对的相对关系的情况下,使得的元素值最小化,将对于所有的N帧生成的按帧的顺序连接起来就得到,最终由rank pooling得到的U定义为,也称之为body shape evolution image,这一个image就包含了整个video的信息。

有了body shape evolution image,作者认为还是不够,认为这个image只是抓取了形状的信息,而没有考虑到每一个节点,因此又提出按照pose estimation的结果,将每一个节点编号,生成body pose image

这个body pose image包含两个channel,每一个channel是根据x,y两个方向之一的坐标生成的。首先,所有的xy坐标值都被标准化为0,1之间的数,之后,按照人体的结构给关节编号,然后每个肢体(例如胳膊,腿这种两个关节之间的骨骼部分称之为肢体limb)都用两端的两个关节的坐标值进行线性插值增加五个节点(如上图所示,按照顺序在每两个原有的关节之间进行插值),这样,一帧人体骨架的一个坐标就处理好了,它构成了body pose image的一个channel的一行或一列,将所有帧都按此方法处理,就得到了body pose image的一个channel,xy坐标值都处理了就得到了完整的两个channel的body pose image。

最终进行分类的时候就是分别对body shape image和body pose image应用CNN,本文使用了imagenet上训练好的CNN模型,为了和这个已有的模型相适应,body shape image将自己的一个channel复制三份形成三个channel,body pose image通过添加一个全是0的channel得到三个channel。

总结:video中的每一帧确实都是有大量的冗余信息,本文巧妙地发现了这个问题,将每一帧有用的信息抓取出来,压缩成一个vector,然后将整个video转化为image,既保留了信息,又去除了大量冗余,还能利用已有的模型进行action识别。这里面有一点弄的不是很明白,就是temporal rank pooling和spatial rank pooling,temporal rank pooling具体是怎么优化的,能够让u包含了原image的信息,感觉文中写的好像有点太简单了,这样真的够吗?还有一个就是spatial rank pooling是怎么优化的,那个risk minimization和max-margin framework都是什么意思?

猜你喜欢

转载自blog.csdn.net/b224618/article/details/82562909
今日推荐