Contextual Action Recognition with R*CNN-论文阅读

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014381600/article/details/59484659

Contextual Action Recognition with R*CNN: arXiv
文章源代码: https://github.com/gkioxari/RstarCNN

摘要:
基于动态图像的行为识别主要是学习到图片中人体的动作,比如当图片中运动员慢跑时,周围的环境同样可以为慢跑的识别提供信息,在本文中我们很好的结合了运动物体和环境因素来实现静态图像的行为识别。我们将RCNN改造成能够对图片进行分类同时回归物体位置的网络,称为R∗CNN,在PASAL VOC Action dataset上的map达到了90.2%,这是目前最高的(仅限于2015年而言)。

1. Introduction
这里写图片描述
如上图,我们如何判断a中人是在用电脑呢,亦或是b中人在慢跑,我们使用R∗CNN来提取首要的区域(primary)和包含环境因素的次要区域(secondary),选取首要区域很简单,问题是如何定义包含环境因素的次要区域呢?
我们通过如下方程将二者统一联系起来:
I代表一张image图片,r代表I中的一个region区域,某个动作类别α,
这里写图片描述
其中W_s^α和W_p^α分别代表secondary和primary区域属于动作α的权重, φ(r; I)是从I中r区域提取出来的特征,R(r; I) 代表所有次要区域的集合,可以是靠近首要区域的集合,也可以是整个image。得到某个动作α的分数以后,就可以用类似softmax的函数来计算概率,其实就是归一化到0和1:
这里写图片描述
我们使用RCNN的方法来对每张图片生成多个region,整体框架如下图:
这里写图片描述
红色的是选出的首要区域。绿色的是多个次要区域,可以看到次要区域选出了很多个,但是最后和首要区域的score相加时用了一个max,就只选取了一个次要区域。最后的实验结果在数据库上选出的首要次要区域示意图如下:
这里写图片描述
可以看到即使是同一个种类的动作,选取的最具有参考意义的区域也是不一样的。

2. Related Work
讲了一些action从传统研究发展到CNN网络,但是讲的都是基于image的action recognition,没有将基于video,但是毕竟二者用的数据库都不用一样,也没有参考意义。
训练策略上我们选用SGD实现端到端的在线训练。

3. Implementation
在实现中,我们对测试和训练中所有的数据库都手动标出首要位置区域,然后使用自底向上的区域产生方法来生成次要区域,然后对于每个动作,都通过max选取出最重要的一个次要区域和首要区域相加,然后使用softmax来进行概率估计并预测label。
3.1. R∗CNN
我们的网络在fast rcnn的基础上进行改进,对于多个ROI区域最后的卷积层的输出被用来输入到一个max pooling层中,然后对每个ROI区域输出一个固定大小的feature map(如对于16层的CNN网络输出就是7×7),得到的ROI-pooled features随之进入一个全连接层来做最后的预测。这种方法是很节省时间的,因为所有的卷积特征都是在原图上计算的,提取时根据roi的区域去提取相应区域就行,而不需要对每个ROI重新计算特征。
我们将FRCN扩展成:
主要区域:每个ROI区域r都对全部的动作类别进行预测得到score,
次要区域:通过max pooling对所有区域选出最大的一个score,和主要区域的score相加。
我们通过如下公式来定义次要区域:
这里写图片描述
S(I)是使用Selective Search算法对图片I产生的region,通过每个region和首要区域的重叠比例来定义次要区域,重叠比例上下界分别为l和u,当l=0和u=1时,就代表叠加和完全不叠加的region都被定义为次要区域。

3.2. Learning
我们使用SGD反向梯度传播来训练网络,我们使用在分类和检测都有良好表现的VGG16网络来测试。
用P(α|I,r)来表示图片I中 区域r属于动作类别α的概率,那么经典的SGD一个batch的梯度通过下式估计:
这里写图片描述
Li代表正确的动作label。
在训练过程中,我们并不是将一个训练图片的首要区域选择一个出来训练,而是将overlap概率大于0.5的都用来当做正样本进行训练,其实也就是一个data augment的策略,对于一个真正的首要区域,在训练时从次要区域中选择N个区域也将这N个区域当做首要区域来进行训练,N的大小受GPU内存限制。
我们依然fine-tuneImageNet的模型,也使用了其中初始权值fc6和fc7两个层,但是最后的score没有用模型的weight, learning rate =0:0001, batch size = 30,N = 10 就是data augmentation,每张图片训练时首要区域不仅有人工框选的一个groundtruth,还有从selective选取的最大概率的N=10个框,迭代次数10K。

4. Results
The PASCAL VOC Action dataset数据库比较小,只有10个动作类别,心爱你关闭起来HMDB51有51个类别,UCF101有101个类别,还是video的数据库比较大。
后面的性能对比作者做了好几个实验,最重要的有两个:
这里写图片描述
R∗CNN (l; u)就是经典的前文说的方法, 设定l和u的阈值来筛选出一个次要区域,而比较有趣的是另一个R∗CNN (l; u; nS),这里作者还试验了选取多个次要区域,将nS的值设定为大于1,最后全文最好的结果在nS=1,l = 0:2; u = 0:75上面取得,nS=2时同样可以得到这个结果。可见选取多个次要区域并没有明显改善性能。
接下来将实验结果可视化一下,显示出选出的首要区域和次要区域:
这里写图片描述
后面的结果对比有好几页,感兴趣的自己看原文 吧,接下来准备跑下代码看看结果。
总体来说就是参照的RCNN,将检测用来classification中来。

猜你喜欢

转载自blog.csdn.net/u014381600/article/details/59484659
今日推荐