【目标检测】R-CNN

目录

  • 概述
  • 细节
    • 检测流程
    • 一些细节
    • 存在的问题

概述

R-CNN是将CNN用于目标检测领域的开山之作(虽然不一定是最早的,但确实最早出现好效果的),也是两阶段目标检测技术的开山之作,是后面一个系列的第一篇文章。

细节

检测流程

流程概述:

  1. 在原图上进行选择性搜索,获得2000个候选框
  2. 将每个候选框进行缩放,通过网络进行特征提取
  3. 每个候选框对应一个特征,借助这些特征,通过SVM进行分类,通过NMS剔除部份候选框
  4. 通过一个bbox回归器对比原始候选框进行微调

【目标检测】R-CNN_第1张图片

详细流程:

  • 首先从输入图片中使用选择性搜索获得2000个与类别无关的候选框
  • 将这些候选框缩放到固定尺寸(227x227)逐一喂到同一个网络中(如AlexNet)进行特征提取,得到2000*4096维的矩阵
  • 之后使用各个类别的线性SVM基于这些特征对候选框进行打分,判断是否为该类。如voc数据集20个类别就有20个SVM,他们对应的权重矩阵就是4096*20,经过SVM之后我们就得到了2000*20的矩阵,接着使用NMS剔除部分候选框。
  • 首先是对于NMS之后的候选框进一步剔除,只保留与GT相交并且IOU大于一定阈值的候选框,接着20个回归器对20个类别中剩余的候选款进行回归操作,最终得到每个类别得分最高的bbox。
  • 第三步补充一:中间过程如下图所示:左边的每一行都代表一个候选框的特征,中间的每一列代表一个分类器的权重,那么他们相乘得到的就是某个候选框为某个类别的概率。因此右边的每一行代表的是每个候选框在各个类别下的概率,每一列表示某个类别下各个候选框的概率。而NMS就是对于每一列(也就是每一类)做的,每次取这一列得分最高的候选框,然后与该列其他框计算IOU,若是该IOU大于我们给定的阈值,就将后者的剔除(得分置0),得分最高的候选框处理完之后就是得分第二高的候选框,以此类推。
    【目标检测】R-CNN_第2张图片

一些细节

预训练:首先是特征提取网络会在ImageNet上预训练,然后将最后的分类层替换成随机初始化的参数,接着在当前数据集上微调(固定前面层的参数,只训练最后的分类层)。
选择性搜索:是一个类似于聚类的过程,开始根据颜色、纹理、大小等找到一些相似的初始区域,然后慢慢加权合并,最终得到2000+的候选框。
缩放:文中列举了三种方式:1、包含临近的像素,保留长宽比例进行等比例缩放;2、不包含临近的像素,保留长宽比例进行等比例缩放;3、不包含临近的像素,强行缩放不等比例,如下面的BCD,但是最终作者选用的包含临近的像素,强行缩放不等比例的方式,其实就相当于是将候选框放大一点(捕捉上下文信息),然后调整大小放入网络。
【目标检测】R-CNN_第3张图片
缩放结果如下:
【目标检测】R-CNN_第4张图片
为什么不用softmax分类而是采用SVM呢?好像也没有看到很信服的解释,可能是作者实验下来,确实是SVM效果会好一点。

网络微调和SVM训练时的正负样本:网络微调时候的正样本是与GT的IOU最大并且大于0.5的候选框,其余样本是负样本;训练SVM时候的正样本是与GT完全重合的候选框,而负样本是与GT的IOU小于0.3的候选框,而IOU在0.3到1之间的候选框就被忽略了。(训练SVM的最优策略实验得到的,且采用困难错误样本挖掘的方式姿训练)

bbox回归:就是得到一组偏移量,对候选框施加这个偏移量,实现对候选框的精调,得到最终的预测框。
说起来简单,但是到底怎么做呢?其实就是网络训练的过程。我们有标注框的信息,有候选框的信息,只需要四个参数就可以使得候选框变得和标注框一样,接着网络训练就是为了去得到这四个参数。刚开始网络预测的四个参数很差,我们根据这四个参数,得到的预测框也很差,但是我们使用真实的标注框信息监督这个过程,网络的预测输出会越来越精确。
那么当网络训练完毕之后,网络输入候选框信息,就能输出精确的偏移,我们再使用这个偏移就得到了预测框了。

在实际中,bbox回归器的训练用的都是网络最后一层的2000*4096的向量。
【目标检测】R-CNN_第5张图片

存在的问题

时间消耗大:检测的速度很慢,由图可见,主要的耗时来自于选择性搜索、候选框预处理(缩放裁剪)以及每个候选框的特征提取,并且这些操作是与类别无关的,相对而言,后面的候选框分类打分以及NMS虽然与类别相关,但是耗时很少很少。
【目标检测】R-CNN_第6张图片
流程臃肿:算法中的每个流程对于算法性能都是至关重要的,严重依赖上下游,不端到端,所以需要对每个流程都进行优化,才能得到最终的效果。

你可能感兴趣的:(论文学习,其他)