RCNN目标检测算法内容详解(依托论文讲解)

RCNN论文下载地址:https://arxiv.org/pdf/1311.2524.pdf

       作为目标检测的开山鼻祖,对于RCNN的学习一定是有里程碑的意义的,RCNN的横空出世让我们对神经网络有了更深的认识,在CNN识别盛行的年代开创了先河,因此了解RCNN对于我们学习目标检测算法有非常重大的意义。

我在学习目标检测算法的时候,发现有些概念总是模糊不清,因为我是直接学习yolo系列的,但是学了好几遍总感觉差点什么,对于一些大佬给我的建议是要重头撸一遍目标检测算法,RCNN作为目标检测的第一个算法,他的出现影响了后续一大堆目标检测算法,因此我打算从RCNN开始将经典的目标检测算法都学习一下,同时也会写下随笔博客,对于文中不对的地方欢迎大家批评指正。

这里有个很有意思的论文翻译,对于阅读英文论文有困难的同学,可以看一下

R-CNN论文详解(论文翻译)_目标检测_v1_vivian-DevPress官方社区

RCNN算法结构:

RCNN算法总的分为如下四步:如下图所示

1、使用Selective Search(选择性搜索​​​​​​)算法,将图片生成1K-2K个Region propsals:

可以理解成就是根据SS算法的方法将图片分成2000个可能含有目标的候选框

2、对于每个生成的Region propsals,使用深度网络提取feature:

        我们将图像切割成了2000个区域,那就相当于产生了2000个小图片,然后我们将这2000个小图片打入神经网络进行训练,就是所谓的用CNN提取这2000个小图片的特征。

        RCNN这里使用的CNN神经网络是Alexnet神经网络,然而这里出现了一个问题就是Alexnet网络的输入均为277*277大小的图片,但是我们切割的2000个候选区域不一定是刚好符合这个大小的,因此作者在这里对着2000个图片进行了resize,即将所有的候选区域小图片均调整为了277*277,然后再在候选区域周围加上了16的padding,再进行异性缩放,作者在文中指出这种方法使得RCNN的mAp提高了3到5个百分点。

       另外在这里需要解释一下,我们使用的Alexnet卷积神经网络是迁移学习过的,因为如果从头开始训练一个网络的话,数据量太小效果会很差,因此我们使用迁移学习的方法训练我们的网络。

3、将feature送入每一类对应的SVM支持向量机:

     如果bounding box 没包含到车辆部分叫正样本;如果bounding box 没有包含到车辆的某部分,我们称它为负样本。接触过目标检测的同学们都知道,正负样本的区分是需要阈值划分的,划分的基础是IOU(IOU不知道是啥的自行百度),作者测试了IoU阈值的多个值, 0.1, 0.2, 0.3, 0.4, 0.5 。最后通过测试发现,IOU阈值为0.3效果最好(选择为0精度下降了4个百分点,选择0.5精度下降了5个百分点),即当重叠度小于0.3的时候,我们就把它标注为负样本。


     到这里我们的RCNN已经在经过Alexnet神经网络之后提取到了我们想要的特征,因为作者在Alexnet最后一层中去掉了全连接层,因此我们这个特征即为2000*4096-D的向量(D为物体的种类+背景),然后我们将这D类的特征向量送入D个SVM进行训练,(这里解释一下,因为SVM只能做二分类,因此我们需要建立D个SVM分类器对特征向量进行打分),注意这个打分很重要,这D个SVM的打分又会组成一个新的特征向量,同时SVM训练过程是将打分和真实的label进行比较,计算出loss然后再对SVM进行反复训练。

     另外在这里需要解释一下,RCNN在这里用到了一个比较特别的算法叫做hard negative mining方法(因为刚开始训练的时候,很多情况下负样本远远高于正样本,这样会导致训练的优化过程很慢,hard negative mining算法是将经过一轮训练后得分最高,即最容易被误判的负样本加入新的样本训练集,进行再次训练,重复上述步骤,直到算法收敛)。hard negative mining方法的作用就是去掉负样本中对优化作用影响很小的负样本,保留最接近阈值(最接近正样本容易分辨错误的负样本)。

4、最后使用回归算法对候选框进行微调,然后进行NMS(非极大值抑制选出最合适的候选框):

Selective search算法会生成1K~2K的候选区域,这些候选区域存在这种那种的问题,因此我们需要在最后一步对候选框进行微调。在RCNN中,作者使用线性回归器对候选框位置进行微调,得到更加准确的候选框。训练样本:判定为本类的候选框中和真值重叠面积大于0.6 的候选框。

NMS(非极大值抑制的过程)首先我们需要先计算出每一个bounding box的面积,然后根据它的score进行排序,把score最大的bounding box作为我们选定的框,然后计算其余bounding box与我们上述最大score与box的IoU,删除IoU大于设定的阈值的bounding box。反复进行上述过程,直至所有bounding box用完,然后再删除score小于一定阈值的选定框。

这就是RCNN的全部过程了,后续会更新其他系列的RCNN的文章,欢迎关注

有问题可以在评论里指出来,非常感谢

猜你喜欢

转载自blog.csdn.net/qq_43215597/article/details/127038205
今日推荐