【目标检测算法系列】1、R-CNN算法

R-CNN 是第一个成功将深度学习应用到目标检测上的算法,也是后续Fast R-CNN , Faster R-CNN等系列算法的鼻祖算法

1、R-CNN总体架构

R-CNN的全貌以下图所示 网络

它主要分为4个模块
架构

  1. 候选区域(region proposal)提取机器学习

  2. 一个大型的CNN网络用来特征提取函数

  3. 使用SVM分类模型进行类别分类学习

  4. 使用回归(Regression)模型进行具体定位测试

具体RCNN的训练流程以下:优化

  1. 先使用ImageNet数据集训练一个CNN网络(论文中使用的是AlexNet)设计

  2. 使用选择性搜索(selective search)算法提取出2000个候选框3d

  3. 将提取出来的候选框统一resize到 CNN网络所须要的尺寸

  4. 使用本身的数据集对CNN网络进行fine-tuning(微调)

  5. 利用fine-tuning后的CNN网络对候选框进行特征提取

  6. 训练多个二元SVM分类模型

  7. Bounding-box回归来减小候选区域偏差


2、具体模块设计


1.在ImageNet数据集上训练一个CNN网络

论文中提到,由于实际标签数据太少,远远不够去训练一个大型的CNN网络模型,因此须要先借助ImageNet数据集进行训练CNN网络,也就是预训练过程,而后再在本身的数据集上针对特定任务进行微调,也就是调优。这是在训练数据稀少的状况下一个很是有效的训练大型卷积神经网络的方法


2. 候选区域提取

R-CNN算法使用的 选择性搜索(selective search)算法提取出了2000个候选框,Selective search综合考虑图像的颜色、纹理、尺寸类似性和空间重合度来划分区域,并将小区域按照类似性合并为大区域。

具体选择SS算法的大概思路以下:

1. 使用图像分割算法建立候选区域

2. 使用贪心算法来进行候选区域合并:

计算全部候选区域的类似度

将最类似的两个候选区域合并为一个区域

3. 重复迭代2过程,直到知足条件


3.候选框的缩放

由于CNN网络输入的图像尺寸是固定(论文中为224*224),因此须要将不一样大小的候选框resize到CNN网络所须要的尺寸,

候选区域大小调整选择最简单的各向异性缩放,同时论文中在缩放以前,还对原候选区域增长了一个边缘(padding),大小为16个像素,用原始图像中的点进行填充,这样使候选区域边缘有必定的缓冲


4. fine-tuning CNN网络

经过ImageNet数据集训练来的CNN网络是用来进行1000种类别分类,须要替换掉最后的分类层,改成一个随机初始化的K+1类分类层,K即为本身数据集上针对特定任务的目标分类数,后面+1是由于还须要加上背景类别。论文中做者是在VOC数据集上进行目标检测的,因此为20+1,即21个类别的分类任务。


CNN网络中的卷积层则保持不变。关于进行fine-tuning时的正负样本,若是候选框与真实标注框的IOU>=0.5,就认为此候选框为正样例,不然为负样例,另外,因为对于一张图片的多有候选区域来讲,负样本是远远大于正样本数,因此须要将正样本进行上采样来保证样本分布均衡

在进行fine-tuning 时,须要选用比较小的学习率,以保证不会破坏初始化的成果,论文中所采用的learn_rate为0.001。每轮迭代,统一使用32个正例窗口(跨全部类别)和96个负例窗口(背景),即每一个mini-batch的大小是128


5.候选框特征提取

R-CNN算法是用CNN网络来进行特征提取,而后用提取出来的特征进行后续的SVM分类。

全部须要将fine-tuning 后的CNN网络去掉最后的softmax层,而后用来对候选框进行特征提取


6. 训练多个二元SVM分类模型

R-CNN算法,对于每一个类别单独训练一个二元SVM分类。这块有个问题,为何不用上面CNN网络的softmax直接进行分类,而要把CNN网络提取出来的特征,从新用SVM进行分类?做者给出的答案是通过测试发现,从新使用SVM单独进行分类效果更好。另外,在训练每一个SVM分类模型时,正负样本的构建和上面fine-tuning CNN网络 时有所不一样。在训练对应某个类别的SVM分类模型时,ground-truth(即对应类别的真实标注框)为正样本,负样本为与ground-truth(真实标注框)的IOU小于0.3的候选框,也就是说IOU<0.3被做为负例,ground-truth是正例,其他的所有丢弃


7.Bounding-box回归

为了减小Selective search 候选框的偏差,最后须要进行 Bounding-box Regression(BBR)来对候选框进行精修

这块须要注意,只有IOU值大于0.6的候选框,才会进行Bounding-box Regression

首先,来具体看下,Bounding-box Regression是什么,以下绿色框P为输入进来的候选框,红色框G为ground-truth,也就是真实标注框。咱们的目标就是经过线性回归,训练一种关系,使得输入原始的窗口 P 通过映射获得一个回归窗口G'(蓝色框),须要尽量的让回归窗口G'(蓝色框)跟真实窗口 G 更接近。

Bounding-box Regression的目的就是:给定(Px,Py,Pw,Ph),寻找一种映射f, 使得 f(Px,Py,Pw,Ph)=(Gx',Gy',Gw',Gh') 而且(Gx',Gy',Gw',Gh')≈(Gx,Gy,Gw,Gh)

因此咱们须要通过平移和尺度缩放,将窗口P变为窗口G'。

首先看下平移变化,假设

为对应平移转换,因此有:

因为候选框的大小各不相同,因此这块须要使用相对位移来进行统一,因此

接下来看下尺度缩放:

,这块统一进行对数变换,是为了确保缩放比例大于0

因此:

因此,Bounding-box Regression 最终是为了得到

这四个变化。

Bounding-box Regression 的输入是一组N个训练对(P,G), 输出为

咱们设从P到G实际的转换为:

,因此有

因此最终的损失函数为:

训练结束后,能够得到最终的

,进而得到

到此,R-CNN的训练就结束了


3、R-CNN不足之处

R-CNN做为目标检测算法中的一个里程碑之做,自己也就有许多缺点

首先,最大的一个缺点就是不论是预测仍是训练,速度都很慢,

由于

1.候选框选择算法严重耗时

2.每张图片2000个候选框中会有不少重复的部分,从而致使后面在使用CNN时有不少重复计算

3.在进行候选区域的特征提取时,为了适应CNN网络的输入,须要对候选区域进行扭曲,缩放等操做,这会致使一些图片特征信息的丢失和变形,从而下降了检测的准确性

另外,RCNN是分步骤进行,过程比较繁琐


全部后面在此基础上,衍生出来其余一些目标检测算法,来对相关问题进行改进优化,具体咱们后面再介绍

 

 欢迎关注个人我的公众号 AI计算机视觉工坊,本公众号不按期推送机器学习,深度学习,计算机视觉等相关文章,欢迎你们和我一块儿学习,交流。

                                       

相关文章
相关标签/搜索