R-FCN 论文理解2

9 篇文章 1 订阅
7 篇文章 0 订阅

本文转载自:

http://blog.csdn.net/u012361214/article/details/51507590


arxiv上的一篇新论文,出自MSRA,目前还没有发表,今天刚读完,文章的缺点还要想一想,有空更新。原文链接:点击打开链接


本文是基于region based framework的一种新的detection方法,主要目的是通过移除最后的fc层进行加速。同时通过本篇论文,很好的将RCNN,fast rcnn进行了一个general的总结。本文目前是Pascal voc上面速度和performance结合的最好的方法,并且用到了最新的residual network(好吧,也过去好久了其实)。唯一美中不足的是,没有其他网络,比如VGG16和GoogleNet的baseline,所以和不少其他的方法没有比较。

本文的motivation非常直接,首先,region base detection framework有一个问题,就是多多少少会有subnet的重复计算。回忆最早的RCNN,每一个proposal都会独立经历一次CNN网络抽取feature,那么这个时候,这个subnet就是整个网络,非常非常慢。后来的fast rcnn,先把整张image进行卷积计算,然后在最后一层通过ROI pooling把每一个proposal变成一个大小一致的map,对于每一个map,经过若干次fc层然后得到结果,在这个时候,这个subnet指的就是那若干层fc层。假如一幅图片的proposal有N个,所以这样经历subnet的计算也会有N次,subnet越深计算的效率越低。本文的想法就是不用这些subnet,让所有的计算都可以共享。(见下图的总结)



这种思路最早在google net上就出现过。googlenet的原始模型最后一层feature map就是一个7*7的map,然后经过一个7*7的avg pooling转化成向量,最后加一层fc作为分类层。全部共享计算的第一种思路就是直接把fc层给替换成计算低廉的pooling(成为naive faster rcnn),然而这样做效果很不好,因为熟悉CNN分类的人都知道,随着网络深度的提高,网络对于location的敏感度越来越低,也就是所谓的translation-invariance,但是在detection的时候,需要对位置信息有很强的的敏感度。所以在最后一层直接这么做效果很不好,尤其是在深层网络(res-101),甚至比VGG还低。

那么res-101的detection是怎么做的?在本文之前,很简单,把ROI-pooling层放到了前面的卷积层,然后后面的卷积层不共享计算,这样一可以避免过多的信息损失,二可以用后来的卷积层学习位置信息。

本文的一个思路就是利用最后一层网络通过FCN构成一个position-sensitive的feature map。具体而言,每一个proposal的位置信息都需要编码,那么先把proposal分成k*k个grid,然后对每一个grid进行编码。在最后一层map之后,再使用卷积计算产生一个k*k*(C+1)的map(k*k代表总共的grid数目,C代表class num,+1代表加入一个背景类)。




产生完了这张map之后,再根据proposal产生一个长宽各为k,channel数目为c+1的score map。具体产生score map的方法是,假如k=3,C=20,那么score map的20个类每个类都有3*3的feature,一共9个格子,每一个格子都记录了空间信息。而这每一个类的每一个格子都对应前面那个channel数为3*3*21的大map的其中一个channel的map。现在把score map中的格子对应的区域的map中的信息取平均,然后这个平均值就是score map格子中的值。最后把score map的值进行vote(avg pooling)来形成一个21维的向量来做分类即可。

对应的bbox regression只需要把C+1设成4就可以了。

本文采用的一些方法比faster rcnn的baseline提高了3个点,并且是原来faster rcnn更快(因为全部计算都共享了)。但是和改进过的faster rcnn相比(roi pooling提前那种)提高了0.2个点,速度快了2.5倍。所以目前为止这个方法的结果应该是所有方法中速度和performance结合的最好的。


我的评价:难以评价。为什么说难以评价,因为本文没有其他网络的结果。目前为止,fast rcnn那一套东西的变种已经非常多了,但是基于residual网络的目前还没有,基本都是基于VGG16的,所以这套东西虽然强过faster rcnn,但是难说就一定强过其他变种的residual版本(如果有),而且,我认为在VGG的版本下这种模式不一定work。不过具体来说,等我实现了做完实验再看,希望比他release代码快吧哈哈。


依旧,欢迎讨论,尤其是我有解释理解错误的地方。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值