目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)

    • 一、RCNN
      • 1. 介绍
      • 2. 步骤流程
      • 3. 部分详解
      • 4. 缺点
    • 二、Fast RCNN
      • 1. 介绍:
      • 2. 步骤流程
      • 3. 部分详解
      • 4. 比较
    • 三、Faster RCNN
      • 1. 介绍
      • 2. 步骤流程
      • 3. 部分详解
      • 4. 缺点
    • 四、总体对比

资料汇总选自
B站大佬:霹雳吧啦Wz
csdn大佬:gentelyang 以及 小白的深度学习之路 以及 shenxiaolu1984 以及 嘟嘟_猪
注:本文为学习记录笔记,如表述错误或侵权,烦请提示指出;如果有不能理解的部分,可以前往以上博主的文章中查看更详细的说明,并且还有更详尽的视频讲解。


一、RCNN

目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)_第1张图片

1. 介绍

RCNN(Regin with CNN feature)由Ross Girshick提出,很大程度的提升了识别效率,是卷积神经网络应用于目标检测问题的一个里程碑的飞跃。具有良好的特征提取和分类性能,采用RegionProposal方法实现目标检测问题。

目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)_第2张图片

2. 步骤流程

目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)_第3张图片

  1. 使用区域建议 (Region Proposal) 生成候选区域(使用Select Search算法,简称SS算法)→矩阵框
  2. rescale将图片缩放到相同的尺寸,然后每个候选区域逐个放入深度网络中提取特征(图片分类网络→特征向量)
  3. 特征送入SVM分类器中,判别二分类的类别,然后使用非极大值抑制剔除重叠框
  4. 使用bbox边界回归器修正候选框位置→最小二乘积解决回归问题,即候选框映射到实际框的回归

注意,上面的主要步骤将第三大步分为两小部分,分别为3. 和 4.


3. 部分详解

非极大值抑制
先了解 IoU(Intersection over Union)= (A ∩ B) / (A ∪ B)
目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)_第4张图片

非极大值抑制剔除重叠建议框过程:

  • 寻找通过二分类框住的得分最高的目标
  • 计算它与其他目标的IoU值
  • 删除大于设置的阈值的目标
  • 返回第一步,遍历所有的目标后取得最好的建议框

目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)_第5张图片

4. 缺点

  1. 候选框之间存在重叠,提取特征操作冗余
  2. 对于传统cnn,需要标准化图像输入,这种图片的形变会导致特征量减小或损失
  3. 训练速度繁琐,每个操作独立(需要训练图像分类网络,svm分类器,bbox边界框回归器)
  4. 占领大量的磁盘空间来提取多个候选区域的图像

二、Fast RCNN

目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)_第6张图片

1. 介绍:

Fast RCNN 由 Ross Girshick 在RCNN的基础上改进,提升了测试和训练速度。从框架上比较,将三大步骤提升为两步骤,有效解决了输入图片尺寸不一致,占用内存大等问题。注意,下面的主要步骤将第二大步分为两小部分。

2. 步骤流程

目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)_第7张图片

  1. 候选区域生成方法不变,即ss算法随机采样获得候选框。
  2. 将尺寸不一的整幅图输入cnn,获得特征图;将候选区域映射到特征图feature map中得到特征矩阵
  3. 特征矩阵通过ROI Pooling层(最大池化下采样,不限制输入尺寸大小)缩放到固定尺寸的特征图,展平+两个全连接得到RoIfeature vector;然后并行分别操作全连接层,一个使用softmax loss分类器得到类比概率,一个bbox边界框回归器训练。

3. 部分详解

3.1 ROI Pooling层
将候选区域分成m*n个快。针对每个快执行最大池化下采样操作,是的特征映射上不同大小的候选区域变为尺寸大小的特征向量,然后传入下一层。好处:不限制输入图像的特征,yyds

3.2 softmax loss分类器
输出N+1个类别的概率,1为背景部分,即有N+1个节点。
符合概率分布,和为1

3.3 bbox边界框回归器
输出对应N+1个类别的候选边界框回归参数,即框的真实坐标位置,共(N+1)x4个节点
目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)_第8张图片

3.4 Fast RCNN 损失函数-Multi-task loss

目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)_第9张图片

3.4.1 Fast RCNN分类损失函数

  • 分类损失 = softmax的交叉熵损失
    目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)_第10张图片
    目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)_第11张图片

3.4.2 边界框回归损失
目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)_第12张图片

  • 其中,[u≥1]是艾弗森括号,即if u ≥ 1,[u≥1] =1;if u < 1,[u≥1] =0。解释:当为1时,即候选框为目标,可以进行边界框回归损失,当为0,即候选框为背景,不用继续进行。
  • 当结束回归损失后,可以进行反向传播来训练整个fast rcnn网络。

更多损失对比详细可见:《回归损失函数1:L1 loss, L2 loss以及Smooth L1 Loss的对比》


4. 比较

相比RCNN,主要有以下不同:

  1. ※最后一层卷积层后增加了一个 ROI Pooling layer,不需要进行尺度变化,避免像素的损失和特征损失
  2. ※损失函数使用多任务损失函数,即 Multi-task loss
  3. 整张图片输入CNN
  4. 将类别判断和位置回归同意用深度网络实现,不需要额外的存储

三、Faster RCNN

目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)_第13张图片

1. 介绍

Faster RCNN是作者的升级版本,目标检测的四个基本步骤(候选区域生成,特征提取,分类,位置精修)终于被统一到一个整体,即深度网络框架之内。它同样使用VGG16作为网络主干,推理速度和准确率有了很大的提升,在当时各种竞赛中获得多个项目的第一名。

特点:

  • Faster RCNN 由两个模块组成的:RPN区域生成网络候选框提取模块+Fast RCNN分类和回归检测模块。
  • 因为仍需要先生成候选区域,再进行分类,所以它仍被划分在两阶段(two-stage)的目标检测网络。
  • 将RPN(region proposal network)替代SS算法。

2. 步骤流程

目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)_第14张图片
实现端对端的过程,将训练及预测一体。

  1. 图片输入网络得到特征图,即feature map
  2. 使用RPN网络生成候选框(图中灰色三个框),将其投影到特征图上得到对应的特征矩阵(图中全黑框中的三个白色框)
  3. 每个特征矩阵通过ROI Pooling层缩放到规定一致的特征图(7x7),将特征图展平通过一系列全连接层得到预测结构

3. 部分详解

3.1 候选区域/c窗口 anchor锚点
特征可以看做一个尺度51×39的256通道图像(基于ZF网络的backbone),对于该图像的每一个位置,考虑9个可能的候选窗口:三种面积{128x128,256x256,515x512} × 三种形状{1:1,1:2,2:1}。
下图表示出尺度为51×39个anchor中心,以及3×3=9种的anchor示例。
目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)_第15张图片

在整个faster RCNN算法中,有三种尺度。
原图尺度:原始输入的大小。不受任何限制,不影响性能。
归一化尺度:输入特征提取网络的大小,在测试时设置,源码中opts.test_scale=600。anchor在这个尺度上设定。这个参数和anchor的相对大小决定了想要检测的目标范围。
网络输入尺度:输入特征检测网络的大小,在训练时设置,源码中为224*224。

3.2 RPN(region proposal network)
RPN是全卷积神经网络,其内部与普通卷积神经网络不同之处在于是将CNN中的全连接层变成卷积层。

操作如下:
目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)_第16张图片

RPN的实现方式:在conv5-3的卷积feature map上用一个nn的滑窗(论文中作者选用了n=3,即33的滑窗)生成一个长度为256(对应于ZF网络)或512(对应于VGG网络)维长度的全连接特征。然后在这个256维或512维的特征后产生两个分支的全连接层:

  • reg-layer,用于预测proposal的中心锚点对应的proposal的坐标x,y和宽高w,h;
  • cls-layer,用于判定该proposal是前景还是背景.sliding window的处理方式保证reg-layer和cls-layer关联了conv5-3的全部特征空间.事实上,作者用全连接层实现方式介绍RPN层实现容易帮助我们理解这一过程,但在实现时作者选用了卷积层实现全连接层的功能。
    目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)_第17张图片

全连接层本来就是特殊的卷积层,如果产生256或512维的fc特征,事实上可以用Num_out=256或512, kernel_size=3x3, stride=1的卷积层实现conv5-3到第一个全连接特征的映射.然后再用两个Num_out分别为2x9=18和4x9=36,kernel_size=1xx1,stride=1的卷积层实现上一层特征到两个分支cls层和reg层的特征映射。

这里2x9中的2指cls层的分类结果包括前后背景两类,4x9的4表示一个Proposal的中心点坐标x,y和宽高w,h四个参数.采用卷积的方式实现全连接处理并不会减少参数的数量,但是使得输入图像的尺寸可以更加灵活。在RPN网络中,我们需要重点理解其中的anchors概念,Loss fucntions计算方式和RPN层训练数据生成的具体细节。


3.3 损失函数

3.3.1 anchors的标点方法
正样本标定规则:

  • 如果Anchor对应的reference box与ground truth的IoU值最大,标记为正样本
  • 如果Anchor对应的reference box与ground truth的IoU>0.7,标记为正样本
  • 对于一些极端情况,例如所有的Anchor对应的reference box与groud truth的IoU不大于0.7,可以采用第一种规则生成

负样本标定规则:

  • 如果Anchor对应的reference box与ground truth的IoU<0.3,标记为负样本

剩下的既不是正样本也不是负样本,直接去除,不用于最终训练


3.3.2 RPN多任务损失函数(RPN Multi-task Loss)

RPN Multi-task Loss=classification loss (即softmax loss)+ regression loss (即L1 loss)
目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)_第18张图片
目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)_第19张图片
3.3.3 Fast R-CNN 多任务损失函数(Fast R-CNN Multi-task Loss)
目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)_第20张图片
这里的Fast R-CNN 多任务的分类损失和边界框回归损失已经讲过了,跟上面的是一致的。


4. 缺点

  • 无法达到实时检测
  • 虽然简化了运行内存,但每个候选框的分类计算还是很大

四、总体对比

目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)_第21张图片

你可能感兴趣的:(学习笔记,算法,目标检测,计算机视觉)