Light-Head R-CNN

版权声明:本文为博主原创文章,未经博主允许不得转载

论文:Light-Head R-CNN: In Defense of Two-Stage Object Detector 

链接:https://arxiv.org/abs/1711.07264 

代码链接:https://github.com/zengarden/light_head_rcnn

旷视的文章


算法分析:

Light-Head R-CNN_第1张图片

这篇文章主要是基于Faster RCNN 和R-FCN做的改进。文章将two stage模型分为两个部分,body和head,原文是这么说的, the first step (body) generates many proposals, and the second step (head) focuses on the recognition ofthe proposals,也就是说head由roi pooling和R-CNN两部分组成。对于像Faster RCNN、R-FCN这样的two stage,第二部分有一些操作耗时且存储量较大,因此称为heavy head,而本文的light head RCNN则是通过对第二部分的修改减少了许多复杂操作,所以称之为light head。

Faster RCNN:ROI pooling的channel数很大,有2048,global average pooling减少了 第一个全连接层的计算,但同时影响了空间定位(pooling操作会丢失位置信息);R-CNN subnet有着两个非常大的全连接层,甚至有着c5全部的卷积层,这对定位非常有利,不过每个ROI单独传递给RCNN subnet做计算,因此存在较多重复计算。

R-FCN解决了重复计算的问题,不过引入的score map channel数很大,是P*P(C+1),C为类别数,在COCO数据集上,channel为3969(7*7*81),存储和时间上都有着不小的消耗。

综上,faster rcnn和r-fcn的head计算量都很大,即使body用了轻量化的网络,它们的速度依然比不上one stage的方法。

light head rcnn的目标就是减小head部分的计算量。作者提出large separable convolution生成thinner feature map,将原来(C+1)*P*P用α*P*P(α是一个与类别数无关且较小的值,文章10)来代替,差不多是从3969降低到490,这样就降低了后续Pooling和其他操作的计算开销。不过不能像R-FCN那样vote,于是在ROI pooling/PSROI之后添加一个全连接层进行预测类别和位置。

large separable convolution如下图所示:separable convolution可分离卷积说白了就是在inception v3模型提出的k ×k卷积分离成 k×1和1 ×k。计算复杂度可以通过 C_mid 和 C_out 进一步进行控制。k较大,感受野大。
Light-Head R-CNN_第2张图片

 

实验结果:

Light-Head R-CNN_第3张图片

 

Light-Head R-CNN_第4张图片

Light-Head R-CNN_第5张图片

 

总体上看,主要是对PSROI Pooling层的输出feature map做通道上的缩减,提高了速度;同时去掉了原来R-FCN或Faster RCNN中最后的global average pooling层,一定程度上提升了准确率。再加上其他一些操作比如pooling with alignment、NMS、multiscale train、OHEM等进一步提升效果。两种不同的主网络,要精度有精度,要速度有速度,可以根据需要灵活选择。

参考:https://blog.csdn.net/u014380165/article/details/78651060

https://www.zhihu.com/question/68483928

你可能感兴趣的:(目标检测)