目标检测(一)------Two stage(R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN、R-FCN)

1.基本概念

1.1 计算机视觉的几大任务

分类-Classification:解决“是什么”?的问题,即找出一张图像中物体的类别。
定位-Location:解决“在哪里”?的问题,即定位出目标的位置。
检测:解决“是什么”?“在哪里”?的问题,即定位出目标的位置,并确定其类别。
分割:分为实例分割(Instance-level)和场景分割(Scene-level),解决每个像素属于哪个目标物或哪个场景的问题。

1.2 目标检测的定义

目标检测的任务是找出图像中所有感兴趣的目标,确定他们的类别位置,包含分类和定位两项任务。
在这里插入图片描述

1.3 目标检测的核心问题

1.目标可能出现在图像的任意位置。
2.目标的大小不同。
3.目标的形状不同。
4.目标属于的类别。

1.4 两类目标检测算法

1.4.1 Two stage目标检测算法(候选区域 + CNN分类)

预先找出图中目标可能出现的位置即候选区域(Region Proposal),再通过卷积神经网络进行样本分类。

​ 任务:特征提取—>生成RP—>分类/定位回归。

​ 常见的two stage目标检测算法有:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN和R-FCN等。

1.4.2 One stage目标检测算法

​ 不用RP,直接在网络中提取特征来预测物体分类和位置。

​ 任务:特征提取—>分类/定位回归。

​ 常见的one stage目标检测算法有:OverFeat、YOLOv1、YOLOv2、YOLOv3、SSD和RetinaNet等。

在这里插入图片描述

2.Two Stage 目标检测算法

2.1 R-CNN(Selective Search + CNN + SVM)

在这里插入图片描述在这里插入图片描述

2.1.1 R-CNN详细步骤

1.训练一个分类模型,如AlexNet,并将分类模型进行微调(更改分类数,删掉最后一个全连接层)

在这里插入图片描述
2.利用选择性搜索(Selective Search)算法提取全部的候选框RP
3.缩放RP至统一大小227 * 227(为了满足CNN全连接层输入的需求),通过CNN完成特征提取,将第五个池化层的输出(就是对候选框提取到的特征)存到硬盘
在这里插入图片描述

4.每一个类别训练一个SVM分类器(二分类),通过分类器判断每个候选框里物体的类别
如下图为狗的SVM分类器
在这里插入图片描述
5.使用回归器修正候选框:对于每个类别,训练一个线性回归模型去判定候选框是否完美
在这里插入图片描述

2.1.2 R-CNN的优缺点

优:
1.不再像传统方法用滑动窗口去穷举候选框。
2.使用CNN进行特征提取,效果更好。
缺:
1.Selective Search获得的候选框在2000个左右仍较多。
2.每个候选框都需要进行CNN的特征提取以及利用SVM进行分类,重复计算,检测速度慢。
3.非端到端训练,训练是多阶段的,训练特征仍需要保存后再利用SVM分类

2.2 SPP Net(空间金字塔池化)

由于候选框RP为一张图像中的各个部分,进而考虑不对每个候选框都进行卷积操作而是采取只对这一张原始图像进行卷积,然后根据候选框在原图的位置将其映射到卷积特征图中。再将获得结果输入给全连接层。但是CNN的全连接层输入需要固定尺寸的图片,而卷积层的输入没有特定要求。故考虑在卷积的最后加入某种结构(SPP)使其输入给全连接层的大小固定。

在这里插入图片描述

2.2.1 SPP Net的结构

在这里插入图片描述

2.2.2 SPP Net的优缺点

优:

  1. SPP Net在卷积层后加入ROI池化层,其可以使卷积特征的结果大小统一,并输入给全连接层,即将CNN的输入尺寸固定,输出尺寸固定的要求变为输入尺寸任意,输出尺寸固定。
  2. SPP Net的引入可以不再对全部的候选区域都进行CNN特征提取,只对原图进行一次卷积计算,便得到整张图的卷积特征feature map,然后找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层,完成特征提取工作。

缺:
训练是多阶段的,训练特征仍需要保存后再利用SVM分类

2.3 Fast R-CNN(Selective Search + CNN + ROI Pooling)

Fast R-CNN是基于R-CNN和SPPnets进行的改进。
Fast R-CNN只对整张图像进行一次CNN特征提取,并使用ROI池化将其转化为固定大小的特征图。在这里插入图片描述

2.3.1 Fast R-CNN流程

在这里插入图片描述

2.3.2 ROI Pooling 层详解

1. ROI Pooling 目的:
由于 Fast R-CNN使用的是全连接层,故利用ROI Pooling将特征提取后不同大小的候选框转换为固定大小
在这里插入图片描述2. ROI Pooling的解释
对于任意大小的图片均可将其分为s × s 份,之后对每一份内的小方格特征进行max pooling,即从原始图片提取出s × s维特征,如下图:
在这里插入图片描述

3. ROI Pooling的输入
ROI Pooling 的输入包含两部分:
①.特征图(feature maps): 即CNN提取的特征,Fast R-CNN中,其位于ROI Pooling之前。
②.ROIs: 即RoI的N*5的矩阵。其中N表示RoI的数量,第一列表示图像index,其余四列表示其余的左上角和右下角坐标

4. ROI Pooling 的输出
输出是batch个vector, 其中batch = ROI的个数,vector = channel * w * h, ROI Pooling的过程就是将一个个大小不同的box矩形框都映射成大小固定为(w*h)的矩形框, w、h取决于划分区域时的section(若section = 2 * 2, 则 w = 2,h = 2。)

5. ROI Pooling的具体操作
①.根据候选框在原图中的位置,将ROI映射到特征图的对应位置。
映射规则:原图上候选框各点坐标除以“输入图片与特征图片(feature map)大小的比值”
②.将映射后的区域划分为大小相同的sections,(sections数量与输出的维度相同)
③.对每个sections进行maxpool操作

Example
我们有一个8 * 8大小的特征图,一个候选框,以及输出大小为2 * 2。
输入固定大小的特征图feature map如下
输入图像
候选框映射后的位置:左上角坐标(0, 3),右下角坐标(7, 8)
在这里插入图片描述
将其划分为(2 * 2)个sections(因为输出大小为2 * 2),其中输入图片大小8 * 8,特征图片大小5 * 7,在pooling之后需要得到22的,所以在57的特征图划分成2*2的时候不是等分的,行是5/2,第一行得到2,剩下的那一行是3,列是7/2,第一列得到3,剩下那一列是4

在这里插入图片描述
对每个section做max pooling,可以得到:
在这里插入图片描述

2.3.3 Fast R-CNN 创新点

1.只对整副图像进行一次特征提取,避免R-CNN每个候选框均进行特征提取
2.用RoI pooling层替换最后一层的max pooling层,同时引入建议框数据,提取相应建议框特征
3.Fast-RCNN末尾采用了并行的不同全连接层,可同时输出分类结果和窗口回归结果,实现了端到端的多任务
4.采用SVD对Fast R-CNN网络末尾并行的全连接层进行分解,减少计算复杂度,加快检测速度。

2.3.4 Fast R-CNN 与 R - CNN比较

R-CNN:许多候选框(比如两千个)–>多次CNN–>得到每个候选框的特征–>分类 + 回归
Fast R-CNN:一张完整图片–>一次CNN–>得到每张候选框的特征—>ROIpooling–>分类 + 回归


2.4 Faster R-CNN(RPN + CNN + ROI)

在这里插入图片描述
由于Fast R-CNN中单独利用selective search的方法进行候选框提取只可在cpu上运行,仍很耗时,进而考虑加入一个进行边框提取的神经网络,即RPN。

2.4.1 RPN简介

RPN是一个全卷积的网络能实现端到端的训练,可以接受任意大小图像的输入,可以直接在GPU上运行。
RPN 网络的作用是输入一张图像,给出一批目标候选区域,类似于Selective Search这一步。在给出候选框的同时,对候选框进行分类,给出框中是否为物体(前景)的得分。 注意:RPN中只判断框中是否为物体,而不给出物体的具体类别。
在这里插入图片描述其中虚线以上为ZF网络,其提供给虚线下方的RPN网络3 * 3 * 256 的输入。在RPN特有网络部分先进行了3 * 3的卷积,后通过1 * 1的卷积将输出分为两路,左边用于分类,输出目标和非目标的概率, 右边用于定位,输出目标位置框的四个参数(x , y, w, h)

2.4.2 RPN中的anchor

在这里插入图片描述原始图像的短边固定为600,在特征图中选取9个大小形状不同的候选框即为anchor,面积大小分别为128 * 128,256 * 256, 512 * 512,宽、高比为1 :1, 1 :2, 2 : 1作为**候选框的初始比例和大小 **。

2.4.3 RPN的实现过程

在这里插入图片描述
①.在特征图像(feature map)上滑动窗口(sliding window),再进行一次3 * 3的卷积。
②.由于滑动窗口上的每一个点对应原始图像的一片区域,在滑动窗口上每个点选取 9个框,这9个框也分别对应原始图像的一片区域。
③.根据论文特征图像的大小为60 * 40, 故共有2400 * 9( ≈ 20000)个框。
④.由于部分候选框在原图像中产生越界,对损失函数不产生影响,因而训练时将其过滤掉。(剩下约6000个框)测试时将多余部分裁剪。
⑤.采用NMS过滤,由于框和框之间存在重叠,若两个框之间的 IOU > .7则认为他们重叠,再比较这两个框的是否是物体的得分值,保留分值高的框。(剩下约2000个)。
⑥.采用top-n方法排序,即按每个框是否为物体的得分对其进行降序排列,只取前128个(256 / 2)正例。
⑦.对这些框分别进行两个1 * 1的卷积,其中一部分用于分类,另一部分用于框回归。

2.4.4 RPN的损失函数

对于256个候选框,我们需要知道其类别标签
确定正标签的两种方式:
(i)和ground-truth box计算的IOU最大的anchor标记为正。
(ii)和ground-truth box计算的IOU超过0.7的ancho标记为正。
负标签的确定
(i)和ground-truth box计算的IOU低于0.3的anchor。
损失函数
在这里插入图片描述
i —— —— —— 第 i 个anchor
pi —— —— —— 第 i 个anchor 是物体的概率
Pi*—— —— —— 标签值, 第 i 个anchor 是物体 ==>Pi* = 1, 反之为0
ti —— —— —— 四维向量, 当前第i个框和预测值的参数关系
ti* —— —— —— 当前第i个框和真值的参数关系
Lcls —— —— ——二分类的log loss(是否是目标)
Lreg —— —— ——表示robust loss
Ncls、Nreg、λ都是平衡参数,分别为256、2400、10。
bbox的参数化坐标
在这里插入图片描述
x, xa, x*分别表示预测值,当前anchor值,真值。y,w,t,h都是如此
x,y:框的中心点坐标,w:框的宽,h:框的高

公式细节

  1. 回归中的Pi意义:若该anchor不是物体,则Pi = 0,故不进行回归,减少运算。
  2. λ的作用:平衡分类和回归两种损失。
2.4.5 RPN的训练

①.属于端对端训练
②.优化器为SGD
③.mini_batch = 1, 即每次训练只取一张图像进行训练,并从2400 * 9个框中随机选择256个框
④.256个样本中,正负样本尽量满足1 : 1,若正样本(前景)< 128个,则使用负样本(背景)填充
⑤.参数初始化采用高斯初始化,标准差为0.01


2.5 三大检测算法的比较

R-CNN(Selective search + 多次CNN + SVM)

1.利用Selective Search 在图像中选取2000个候选框。
2.将每个候选框图像缩放至相同大小,并输入到CNN提取特征。
3.每个类别训练一个SVM二分类器,判断候选框是否属于某个类别。
4.对于属于某一类别的候选框,用回归器进一步调整其位置。

Fast R-CNN(Selective search + 一次CNN + ROI Pooling)
  1. 利用Selective Search 在图像中选取2000个候选框。
  2. 将整张原图像输进CNN,得到特征图,找到候选框在原图中的映射。
  3. 通过ROI Pooling层将不同尺寸的候选框转换为统一尺寸。
  4. 利用并行的分类器和回归器完成候选框的分类与定位。
Faster R-CNN(CNN + RPN + ROI)
  1. 将整张原图像输进CNN,得到特征图。
  2. 将特征图输进RPN层,得到候选框是否为物体的得分以及位置信息。
  3. 通过ROI Pooling层将不同尺寸的候选框转换为统一尺寸。
  4. 利用并行的分类器和回归器完成候选框的分类与定位。

在这里插入图片描述

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值