深度学习完全攻略!(连载九:fast-RCNN模型理解)

在前面的章节中,我们已经介绍了RCNN了,可以很明显的看到RCNN是一种基于多方法联合使用的策略。这种方法最大的缺点就是可控性较差。一旦有一个环节没有处理好就影响最终的结果。比如说:

  1. select search 方法如果处理不好,后面的基本不用再搞了,而且,这也是算法最耗时的部分
  2. CNN需要对每个候选框做扩展,然后送入到神经网络中,这极大的限制了CNN对原始数据的利用
  3. SVM分类虽然可以做到较好的分类,同时结合bounding box回归可以预测物体位置,但是这样做很费事
  4. 深度学习最擅长的就是做大数据的分析。很久以前,我在研究稀疏表示的时候,参数是自己逐个逐个的调,而且参数不易过多,深度学习却可以用成千上百万的参数做相同的事情。既然是这样,过多的额外步骤就发挥不了深度学习的优势。所以,一个大的趋势就是怎么充分利用CNN的优势,做我们想做的事情,同时去掉额外的多余外来处理和操作。

 

第一,fast-rcnn的原理

在此背景下,fast-rcnn就诞生了。

好了,一张图说一说fast-rcnn的原理。先配一张原文的图。

看起来不明了,我手动画一个图。

从图中可以看到,fast-rcnn相比于rcnn最大的改变是去掉了后面的SVM。直接将目标预测和位置预测放到了CNN中。但是,fast-rcnn保留了select search候选区生成方法,这也为进一步的改进留下了空间。

【原文翻译】1. fast-rcnn首先会对整个的输入图像做原卷积和池化操作,得到feature map。2. 在feature map中,找到region proposal对应的位置,提取长度固定的特征向量。3.将特征向量喂给全连接层,用来实现预测类别和位置。

第二,fast-rcnn关键点说明

Fast-rcnn有两个地方是最值得说明的,这也是本文主要的内容所在,ROI pooling 和联合目标函数。

(1)ROI pooling

从上图中可以看到,根据候选区域在feature map中生成特征向量时,要面对的一个主要问题是,每个候选区域的大小不一,那么特征向量的尺寸也不同。但是FC层却需要相同尺寸的特征向量作为输入。怎么解决这个问题呢?ROI pooling就诞生了。从pooling这个词可以看到,跟max pooling其实是一样的。只不过在实施的时候,略有区别。怎么做呢?先确定向量的尺寸,假设为W*H,那么就把feature map上对应的region proposal的位置划分为W*H的大小,然后在每个格子内做pooling,可以是max,可以是其他的pooling,那么最后生成的w*H就是想要的。

(2)联合目标函数

由于最终将目标分类和位置预测分为两个部分来描述,但是实际操作的时候不可能单独来训练,怎么办呢?就采用联合训练的方式,将目标预测的损失函数和位置预测的损失函数进行结合。直接上原文中的公式。

式中,Lcls(p,u)=-logPu是类别u预测损失。Lloc是位置预测损失,假设真实值为V=(Vx,Vy,Vw,Vh),预测值为tu=(tx,ty,tw,th),则损失函数定义为:

 

在fast-rcnn中,select search生成候选框很讨厌,怎么把这一部分也省去,让CNN来做呢?下一节,faster-rcnn将做介绍。

本文已同步至微信公众号--> 麻瓜智能,欢迎关注

发布了77 篇原创文章 · 获赞 150 · 访问量 23万+

猜你喜欢

转载自blog.csdn.net/Aoulun/article/details/95018947