哈喽大家好,我是蒙特卡洛家的树。时间到了2016年,fastrcnn问世一年,何凯明老师就立刻提出了更快的算法,fast的名字被占用了,所以干脆就叫faster rcnn了。之前fastrcnn上说他跑一帧只需要0.几秒,其实这里玩了一个文字游戏,因为这里跑一帧只是神经网络部分,并没有涵盖region proposal的时间。而fast rcnn最耗时的部分就是region proposal部分,那一步就已经是秒级别的了,所以要优化速度不得不从这里开刀。而何凯明老师提出的fasterrcnn就正是从这里入手,大大优化region proposal的速度。使得全部过程在GPU上跑可以达到一秒五帧了。
我们知道,之前的RCNN region proposal的方法用的都是基于梯度的selective search,这个方法目前没有现成利用GPU版本的,所以会成为一个瓶颈。论文上还说了一句,把他写成GPU的也不是不可以,只不过这是工程上的优化了,做了这个我们就错事做研究的机会了。哈哈。皮一下很开心。那么不用selective search用什么去找候选框呢?这就是这篇论文所提出来的RPN网络,region proposal network。直接用神经网络去找候选框。因为据观察FAST RCNN本身就可以生成边框,所以干脆直接在网络之前加上一个神经网络,让他去生成边框就好了。
RPN是由一个一个anchor组成的,其实只是换汤不换药,基本上还是传统的金字塔搜索方法,预设了选三种尺度,三种长宽比,一共九种大小anchor在featuremap上滑动,因为featuremap会有差不多2400个点,所以最后会生成24009个anchor,当然这个9是可变的,你还可以设置4种尺度,5种长宽比的20种anchor。anchor扫过每个点都预测一下这个是不是一个物体,然后回归出应该的bbox,所以一共会输出24009*6个值。这里其实概率只需要一个值就够了,但是因为他是用softmax来输出概率的,而softmax的要求就是和为1,所以只好把是和否分开了。
由于anchor是滑动窗,所以同一个proposal他是平移不变的。而基于kmeans的multibox就不能保证全图不变性。但是这个multibox后来成了SSD的核心步骤了,不过SSD的弊端也就因他而起,当然这是后话。 另外,由于multibox是基于全图的全连接做法,输出800维的全连接,所以参数量其大,而anchor的方法由于是类似卷积操作,每个滑块参数都是一样的,都是512维的,再乘以输出维度6和anchor种类9,一共也才两万八千个参数。
在训练的时候选取IOU大于0.7的框作为正样本,IOU小于0.3的框作为负样本训练。
Loss函数和FAST RCNN一样,只不过class的个数改成了2,就是是与否。 接下来就只用接上fastrcnn的网络就可以了。我们来看一下结果,由于也采用了神经网络做计算原来需要两秒的region proposal现在也做到了毫秒级别,整个流程下来可以达到接近实时了。所以RPN的出现同样也是一个质的飞跃。 好了,FASTER RCNN也介绍到这里了。谢谢大家。