并且http://openaccess.thecvf.com/content_cvpr_2018/papers/Choutas_PoTion_Pose_MoTion_CVPR_2018_paper.pdf
摘要首先介绍背景,很多一流的动作识别方法都依赖于two-stream的架构,一个处理appearance,另一个处理motion。接着介绍本文工作,本王呢认为将这两个合起来考虑比较好,引入了一个新的representation,可以将semantic keypoints的movement很好的编码,这里面keypoint实际上就是human joint,本文的方法称作Pose moTion,也即PoTion。本文还很罕见的通过介绍工作流程的方式介绍了模型,首先用一流的human pose estimator,抓取出每一帧human joint的heatmap(就是每一个像素点被划分为某一个joint的概率的heatmap),PoTion representation最终通过将这些heatmap沿时序合并起来得到,这个步骤是通过对video中的每一帧进行colorizing,然后求和得到的。这样对整个video得到的固定尺寸的representation适合用浅层卷积网络进行分类。
摘要的第二段简介了实验结果,一方面是本文提出的PoTion表现超过了其他一流的pose representation;另一方面,PoTion对于标准的appearance和motion two-stream模型具有补充作用,将PoTion合并到最近提出的two-stream I3D模型中,可以在三个数据集上取得state-of-the-art的结果。
本文提出的PoTion的representation是clip level的,也就是表征整个video信息的。模型首先需要的就是pose estimation的heatmap,每一个这样的heatmap表征的是每一个像素值被划分为某一个joint的概率值,这样的heatmap在本文中是使用Part Affinity Fields获得的,这个算法不仅能获得每个关节的概率分布,还能得到关节间的affinity,这个affinity表征的是关节间是否有骨骼连接,因为得到人体姿态的估计不仅需要估计出每一个关节的位置坐标,还需要估计出骨骼信息,需要估计出肢体,这个affinity就是做这件事的,但是本文并没有使用pairwise affinity,只使用了关节估计的heatmap。
通过Part Affinity Fields算法,对每一帧图像都得到19个heatmap,每个肢体对应3个关节,一共四个肢体;头上有五个关节;身体中心有一个关节。得到的heatmap的分辨率是比输入图像要低的,在本文工作中,所有的heatmap都会被rescale,使得最小的维度是64,用W和H表示宽和高,则有,此外,heatmap的数值都被限制在[0,1]了。
得到了每一个frame的heatmap之后,接着要用colorization将每一frame都按照其时间序号进行colorize,用表示t时刻的第j个关节的heatmap,其尺寸为H×W,colorize之后我们期望得到的是H×W×C的,C可以被解释为color channel,例如C=3就可以视作RGB三原色的三个channel。下面将color定义为C维的tuple,,对于某一个时刻t的所有的joint的heatmap都采取相同的color ,也就是color只依赖于时间。具体计算每一个color channel的方式如下,假设整个video一共T frame,那么如果C=2,就有,而的元素值则为,x,y是空间坐标值。
上图是一个简单的示意图,展示了一下colorization的大体思想,也就是说将t=0的这帧标记为红色,最后一帧标记为绿色,中间的帧就介于两种颜色之间,连续的从红色变成绿色,红色和绿色具体的比例是按照线性函数计算的,即,C=2的时候,下图左侧即是示意图
这种方法也可以推广到任意的channel数C,方式是将T帧分为C-1个片段,第一个片段对前两个channel使用前述的colorization方法,接着在第二个片段,对第二个和第三个channel使用同样的方式,以此类推,C=3的时候,示意图如上图右侧,看到这我曾有一个疑问,C大于3的时候哪有那么多颜色用来表示,后来想想其实不是这个意思,C=2、3的时候,还有三原色可以表示,但是C多了的时候就没有足够多的颜色可以表示了,但是无妨,因为颜色本来就不是这个表示的本质内容,只是一个可视化的手段,这些channel本身也并不是先天就是颜色,只是看作颜色好理解,而本质上这些channel就是用来表征相对的时间顺序的。
经过colorizing之后,就到了PoTion最后一步,即通过将colorized heatmap聚合在一起得到clip level的representation,即前面Figure1右侧所示。我们的目的是获得一个固定尺寸的表示,和video的长度无关,本文尝试了不同的聚合方式,首先是最简单的直接求和,得到一个C-channel的image 。
这个表达式会使得得到的的元素的数值大小与T有关,为了得到invariant的representation,采取的方法是将求和后的每一个channel c的数值都用所有pixel的最大值除一下,其他的normalize方式也试过,例如除以T或者除以,但是表现都差不多,这个normalize表达式如下,用表示normalize之后的C-channel image,则有
下图第二列是这第一种聚合方式的示意图
图中可看出,关节随时间的变化通过颜色表征出来了,此外,如果某个关节在某一个地方停留时间较长,那么此处的颜色强度值就会较大,作者认为这可能是有害的(不是很懂为什么有害,我还以为这个能够看出关节移动速度,是有利的呢,可能是就算不同颜色分量的成分比例是固定的,但是强度有时大有时小不好优化?看作者提出的第二种聚合方式中的normalize应该是这个意思),由此提出了第二个聚合方式,采取normalized intensity作为正则化方式。
第二种方式计算一个intensity image ,方式是将所有channel的数值加起来,也就是说是一个只有一个channel的image
上面figure3中的第三列展示的就是一个intensity image,这个image是不包含任何temporal顺序信息的,包含的是此关节在每个地方停留的时间长度。有了intensity image,通过除以强度值,便可得到正则化后的PoTion,即
是为了在intensity值较小的时候起到稳定作用,上面Figure3中的第四列就是展示的这种正则化后的image。这样的到的representation,不同的location的重要程度都差不多了,在和中,有停留或者动作缓慢位置的数值会更大一些,也就是重要程度更高一些(more weighted)。在实验中,这三个representation都分别进行了实验,组合也进行了实验,最终发现将三个合在一起效果是最好的(那说明intensity表示的速度大小可能还是有用的)。
得到representation之后,要做的就是进行分类了,本文采取的分类架构是CNN,由于PoTion比普通的image少了很多纹理结构之类的信息,因此不需要太深的网络就能很好的处理。本文采取了6层卷积加一层全连接的网络结构,如下图所示
网络的输入是三种PoTion representation堆叠在一起得到的tensor,这个tensor的channel数是(2C+1),两个C指的是和,而1指的是,本文网络6层卷积划分为3个block,每个block两个卷积层,所有卷积核大小都是3,第一层卷积的stride是1,第二层是2,因此每一个block收到的input都会比上一个block收到的空间尺寸小一半(长宽皆是如此),但在空间分辨率下降的时候,模型将channel数double了一下。
本文的实验部分探索了不同channel数的模型的表现、不同aggregation的表现,还有不同block的组合,即不同网络结构的表现,不同的block包括不同卷积层数量,每一个卷积层不同filter数量。本文介绍了每一个block包含的卷积层数量少网络不够深(应该是说block数量不变,每一个block包含的卷积层数量不同导致了网络深度的变化),太多了认为是数据不够,都会导致performance下降。本文还探究了pose estimation error造成的影响,具体方法是用高斯分布将groundtruth的pose变成heatmap,然后和估计出来的对比,最终发现用groundtruth的可以提升大约4%的performance。为了体现potion的作用,本文对比了添加了potion的I3D模型等模型和不添加potion的原始模型的准确率,发现有所上升,值得注意的是,本文的方法准确率达到state-of-the-art的都是和别的模型合并起来的,单独的表现都不行。