目标检测篇——R-CNN系列学习笔记

本文是一篇关于R-CNN、Fast R-CNN和Faster R-CNN目标检测算法的学习笔记。从算法流程、细节到缺点逐一讲解,包括Selective Search、RoI Pooling、SVM与边框回归等关键点。通过对算法的深入理解,揭示了不同版本R-CNN在效率和性能上的改进与不足。
摘要由CSDN通过智能技术生成

说明

本笔记由个人在学习过程中整理而得,所以难免会有一些错误或者与其它博客雷同情况,请大家多多包涵。

一、R-CNN

R-CNN论文原文:https://arxiv.org/abs/1311.2524v3
在这里插入图片描述

1.1 算法流程

  1. 输入一张多目标图像,采用selective search算法提取约2000个候选框;
  2. 将每个候选框变形为227×227的大小;
  3. 对每个候选框进行去均值的预处理操作,然后再送进AlexNet网络提取特征,最后2000个建议框的CNN特征组合成2000×4096维矩阵;
  4. 将提取的特征送进20个SVM分类器,输出每个候选框对应每个类别的得分;
  5. 对每一个类别进行NMS非极大值抑制剔除重叠度较高的候选框;
  6. 对剩下的候选框进行Bounding Box Regression精细修正候选框的位置。

1.2 算法细节

  1. selective search算法
    ①使用 Efficient Graph-Based Image Segmentation的方法获取原始分割区域R={r1,r2,…,rn};
    ②初始化相似度集合S=∅;
    ③计算两两相邻区域之间的相似度(颜色,纹理,尺寸,交叠等相似度),将其添加到相似度集合S中;
    ④从相似度集合S中找出,相似度最大的两个区域 ri 和rj,将其合并成为一个区域 rt,从相似度集合中除去原先与ri和rj相邻区域之间计算的相似度,计算rt与其相邻区域(原先与ri或rj相邻的区域)的相似度,将其结果添加的到相似度集合S中。同时将新区域 rt 添加到 区域集合R中;
    ⑤重复④步骤,直到S为空;
    ⑥获取每个区域的Bounding Boxes,这个结果就是物体位置的可能结果L。

  2. 怎么样将候选框crop成227×227大小?
    ①各向异性缩放
    这种方法很简单,就是不管图片的长宽比例,管它是否扭曲,进行缩放就是了,全部缩放到CNN输入的大小227*227,如下图(D)所示;
    ②各向同性缩放
    因为图片扭曲后,估计会对后续CNN的训练精度有影响,于是作者也测试了“各向同性缩放”方案。这个有两种办法
    A、直接在原始图片中,把bounding box的边界进行扩展延伸成正方形,然后再进行裁剪;如果已经延伸到了原始图片的外边界,那么就用bounding box中的颜色均值填充;如下图(B)所示;
    B、先把bounding box图片裁剪出来,然后用固定的背景颜色填充成正方形图片(背景颜色也是采用bounding box的像素颜色均值),如下图©所示;
    对于上面的异性、同性缩放,文献还有个padding处理,下面的示意图中第1、3行就是结合了padding=0,第2、4行结果图采用padding=16的结果。经过最后的试验,作者发现采用各向异性缩放、padding=16的效果最好,能使mAP提升3-5%。
    在这里插入图片描述

  3. NMS非极大值抑制
    ①根据分类器类别得分从大到小进行排序,分别为F、E、D、C、B、A;
    ②以最大得分候选框F为标准,判断A-E与F的IOU是否大于某个阈值,假设B、D超过阈值,那么就扔掉B、D,并标记第一个候选框F,保留下来。
    ③从剩下的候选框A、C、E中,选择概率最大的E框为标准,重复②中步骤;
    ④重复上述步骤,直到处理完所有类的候选框。

  4. Bounding Box Regression(边框回归)
    边框回归(Bounding Box Regression)详解 这篇文章对边框回归做了很详细的解释。

  5. 正负样本的选择
    ①AlexNet的微调:IOU>0.5的候选框为正样本,IoU≤0.5的候选框为负样本。
    ②SVM训练:Ground Truth框为正样本,IoU<0.3的候选框为负样本由于负样本太多,采用hard negative mining的方法在负样本中选取有代表性的负样本。
    ③回归器训练:与Ground Truth相交IoU最大的候选框,并且IoU>0.6的候选框。

  6. 网络训练
    先在ILSVRC 2012数据集上进行有监督预训练,然后在PASCAL VOC 2007数据集(既有图像中物体类别标签,也有图像中物体位置标签)上进行微调。

  7. 为什么微调时和训练SVM时所采用的正负样本阈值0.5和0.3不一致?
    微调阶段是由于CNN对小样本容易过拟合,需要大量训练数据,故对IoU限制宽松,与Ground Truth相交IoU>0.5的建议框为正样本,否则为负样本;
    SVM这种机制是由于其适用于小样本训练,故对样本IoU限制严格:Ground Truth为正样本,与Ground Truth相交IoU<0.3的建议框为负样本。

  8. 其它
    Bounding Box Regression时使用的是pool5层输出的特征,SVM分类器使用的是fc7层输出的特征。

1.3 算法缺点

  1. selective search算法耗时;
  2. selective search算法得出的约2k个建议框每一个都需要经过变形处理后由CNN前向网络计算一次特征,耗时而且冗余;
  3. 最后做边框回归时要保留pool5层输出的特征或者再进行一次前向运算,耗时且浪费磁盘空间。

二、Fast R-CNN

Fast R-CNN论文原文:https://arxiv.org/abs/1504.08083
在这里插入图片描述

2.1 算法流程

  1. 一张图片输入CNN网络,经过若干卷积层与池化层,得到特征图;
  2. 在图片上采用selective search算法提取约2k个候选框;
  3. 根据原图中候选框到特征图映射关系,在特征图中找到每个候选框对应的特征框(深度和特征图一致),并在RoI池化层中将每个特征框池化到H×W(VGG-16网络是7×7)的size;
  4. 固定H×W【VGG-16网络是7×7】大小的特征框经过全连接层得到固定大小的特征向量
  5. 第4步所得特征向量经由各自的全连接层,分别得到两个输出向量:一个是softmax的分类得分,一个是Bounding-box窗口回归;
  6. 利用窗口得分分别对每一类物体进行非极大值抑制剔除重叠候选框,最终得到每个类别中回归修正后的得分最高的窗口。

2.2 算法细节

  1. ROI pooling
    ROI Pooling的作用是对不同大小的region proposal,从最后卷积层输出的feature map提取大小固定的feature map。因为全连接层的输入需要尺寸大小一样,所以不能直接将不同大小的region proposal映射到feature map作为输出,需要做尺寸变换。
    在这里插入图片描述
    针对上图
    ①Conv layers使用的是VGG16,feat_stride=32(即表示,经过网络层后图片缩小为原图的1/32),原图800×800,最后一层特征图feature map大小:25×25;
    ②假定原图中有一region proposal,大小为665×665,这样,映射到特征图中的大小:665/32=20.78,即20.78×20.78,如果你看过Caffe的Roi Pooling的C++源码,在计算的时候会进行取整操作,于是,进行所谓的第一次量化,即映射的特征图大小为20×20;
    ③假定pooled_w=7,pooled_h=7,即pooling后固定成7×7大小的特征图,所以,将上面在 feature map上映射的20*20的 region proposal划分成49个同等大小的小区域,每个小区域的大小20/7=2.86,即2.86×2.86,此时,进行第二次量化,故小区域大小变成2×2;
    ④每个2×2的小区域里,取出其中最大的像素值,作为这一个区域的‘代表’,这样,49个小区域就输出49个像素值,组成7×7大小的feature map
    总结,所以,通过上面可以看出,经过两次量化,即将浮点数取整,原本在特征图上映射的20×20大小的region proposal,偏差成大小为7×7的,这样的像素偏差势必会对后层的回归定位产生影响。所以后面有人提出ROI Align这一改进的方法。

  2. Multi-task loss
    损失函数的定义是将分类的loss和回归的loss整合在一起,其中分类采用log loss,即对真实分类的概率取负log,而回归的loss和R-CNN基本一样。分类层输出K+1维,表示K个类和1个背景类。
    L ( p , u , t u , v ) = L c l s ( p , u ) + λ [ u ≥ 1 ] L l o c ( t u , v ) \quad\quad\quad\quad L(p,u,t^u,v) = L_{cls}(p,u) + \lambda[u\geq1]L_{loc}(t^u,v) L(p,u,tu,v)=Lcls(p,u)+λ[u1]Lloc(tu,v)
    i n    w h i c h    L c l s ( p , u ) = − l o g p u    i s    l o g    l o s s    f o r    t r u e    c l a s s    u in\ \ which\ \ L_{cls}(p,u) = -logp_u \ \ is \ \ log\ \ loss\ \ for\ \ true\ \ class\ \ u in  which  Lcls(p,u)=logpu  is  log  loss  for  true  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值