物体检测学习

目标检测需要同时解决分类和定位两个任务,利用深度学习进行目标检测首先需要学习的是R-CNN。
一些基础知识

1、R-CNN

Selective Search(选择候选区域)
选择性搜索对图像中最有可能包含目标的区域进行搜索以提高效率,首先对输入图像进行分割产生很多小区域(如2000个),根据这些小区域的相似性(颜色、纹理、大小等)采用子区域合并的方法进行区域迭代合并,生成外切矩形,也就是候选框。
非极大值抑制
IoU(Intersection over Union)表示:(A∩B)/(A∪B)
对于有重叠的候选框:若大于规定阈值(IOU)则删除,低于阈值的保留。 最后保留的可能不止一个候选框。
详细举例:
https://blog.csdn.net/qq_30815237/article/details/88572525
步骤
首先通过Selective Search算法生成2000个候选区域
对每个候选区域,使用深度网络提取特征
将特征送入每一类SVM分类器,判别是否属于该类
使用回归器修正候选框位置

1、获取到的原始区域可能需要进行合并,获得一个层次化的区域结构,需要将2000个候选区域缩放到固定尺寸,按照论文中即227x 227pixel,这些候选区域输入实现训练好的AlexNet CNN中,获得4096维的特征,得到2000 x 4096维的矩阵。每一行相当于一个候选区域的特征向量
使用VOC数据集,有20个类别,加一个背景
2、将2000 x 4096维特征与20个SVM分类器组成的权值矩阵4096 x 20相乘,得到2000 x 20维的特征,表示每个建议框是某个目标类别的得分,每一列是类别(20类),每一行是每个候选框属于某个类别的得分
分别对上述矩阵中**每一列(每一个类别)**进行非极大值抑制,去掉重叠的框,得到该类中得分最高的一些建议框,这些建议框属于某类别的可能性最高。物体检测学习_第1张图片
上图中,第一个矩阵为特征矩阵,第一行表示第一个候选款的特征向量,第二个矩阵是分类器,每一列表示识别一种分类,比如第一列识别猫,第一行与第一列相乘,得到的是该候选框为猫的概率,以此类推相乘,第三个矩阵得到的第一行就是第一个候选框是20个类别的概率,第一列就是2000个候选框是猫的概率,每列进行非极大值抑制,就可以剔除重叠的框(可能会剩下几个框)剩下的都是得分最高的框(是该类的可能性最大)

3、使用回归器精细修正候选框的位置
对NMS处理后剩余的建议框进一步筛选,再分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,得到每个类别最高得分的框。具体训练方法在Fast-RCNN中介绍

2、Fast-RCNN

步骤
1、一张图像生成2K个候选区域(使用Selective Search方法)
2、将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵,只需要一次图像的卷积操作。
3、将每个特征矩阵通过ROI pooling层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果。预测类别和边界框回归参数使用一个网络就完成了,不需要svm分类器和回归分别训练

R-CNN需要2000次卷积操作,存在重叠部分多次计算、反复计算的情况,Fast-RCNN将整张图像输入网络,通过原图与特征图经过卷积之后的映射关系(会记录映射关系,缩放倍数,候选框可以通过映射关系得到特征图上的候选框),从特征图像中提取相应的候选区域。
建议框大小不一,得到的特征框需要转化为相同大小,这一步是通过ROI Pooling层来实现的。将每个特征框划分为7 x 7的网格,进行max pooling(最大池化)操作,这样每个特征框就被转化为7 x 7 x channel的矩阵。
经过两次全连接操作,对每个矩阵拉长为一个向量,这样会有一些向量(候选框个数),分别作为之后的全连接层的输入,分类和预测框的位置大小都是通过卷积神经网络输出的。
该向量并联两个全连接层,一个经过全连接(20+1个节点)后经过softmax得到的是当前候选框为20+1(背景)个分类所占的百分比(概率)。另一个经过全连接后,进行边界框回归,输出的是20+1个类别的候选边界框回归参数(Dx,Dy,Dw,Dh), 一共(20+1) x 4个节点。所以参数一共有4 x (20+1) x 候选框个数
物体检测学习_第2张图片
在这里插入图片描述
物体检测学习_第3张图片

边界框回归(R-CNN)
下图为边界框更新公式,将候选框进行调节,得到最终预测的边界框坐标、宽高。P指的是人为标定的样本框的值。
物体检测学习_第4张图片
在这里插入图片描述
计算分类损失、边界框回归损失
物体检测学习_第5张图片
交叉熵:计算两种模型相差多少

1、分类损失使用交叉熵进行损失计算,Pu为分类器预测为类别u的概率,u是真实类别的标签,
物体检测学习_第6张图片
对于softmax输出,假设真实标签使用one-hot编码[0,0,,,1,0],只有真实标签为1,预测得到的softmax概率为[0.1,0.2,,,0.4,0.2],当预测第i个时,可以认为Oi*为1,其他为零,最后就只有-logPu了。

物体检测学习_第7张图片
2、边界框回归损失(确定位置的损失)
物体检测学习_第8张图片
学习链接

[u≥1]是艾佛森括号:u≥1为1,反之为零,u为真实标签,可以认为候选区域确实属于检测的某一个类别中,即正样本,才会计算边界框回归损失,如果是0,表明这个候选框并不属于某个类别,是背景,不需要寻找边界框。

最后得到了分类结果以及边界框位置

采样

训练的时候,并不是训练所有候选框区域,正样本:候选框中存在所需检测目标的样本,负样本:没有向检测的目标。论文中随机采样64个样本,选择的就是与标记的样本框IOU值大于0.5的候选框(正样本)进行训练。

ROI Pooling
每个区域,使用该区域内最大的值作为池化后该点的值。保留感兴趣区域

3、Faster R-CNN

步骤

1、将图像输入网络得到相应的特征图
2、使用RPN结构生成候选框,将RPN生成的候选框投影到特征图上获得相应的特征矩阵
-3、将每个特征矩阵通过ROI pooling层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果

Faster R-CNN == RPN+Fast R-CNN

输入为一张图片,输出为一张图片的特征,即feature map。通过一组conv+relu+pooling层提取图像的feature map,用于后续的RPN网络和全连接层。

RPN
结构图
物体检测学习_第9张图片

3*3卷积,每个点又融合了周围3x3的空间信息
物体检测学习_第10张图片
256:特征图channel为256,所以经过类似3 x 3卷积得到的也是256维,
2k:k个anchor boxes,得到是前景还是背景的概率,一共有2k个
4k:k个anchor boxes,得到中心x、y、宽高四个数据,一共4k个

对于每一个像素点,设置9个预设anchor(论文中设置),设置anchor是为了覆盖图像上各个位置各种大小的目标。k个anchor boxes和proposal不同,还需要通过分类的概率和位置信息进行一些修改才能得到框的位置
物体检测学习_第11张图片

根据网络结构图可以看出,上面一条线通过1 x 1卷积后,得到(M/16)x(N/16)x18的特征,这里通道数为18是因为feature map中每个点有9个anchor并且每个anchor预测其是前景还是背景。因为我们后面需要使用softmax函数计算每个anchor属于前景和背景的概率,所以需要先将(M/16)x(N/16)x18 维度变换为 (3xM/16)x(3xN/16)x2,将第三维变换为仅仅是前景背景的得分。得到概率后再将维度变换回来,然后输出每个anchor属于前景与背景的概率。softmax分类anchors获得positive和negative分类,选择positive正样本作为候选框,因为基本认为negative负样本表示的是背景,没有分类的意义。

下面一条用于计算对于anchors的bounding box 回归偏移量,利用1x1卷积输出(M/16)x(N/16)x36的特征,这个36包含每个点上9个anchor的偏移值预测,每个anchor的偏移值有四个数据,分别是中心点的横纵坐标以及宽高。这四个数据都是相对于真值的偏移量。

RPN损失
在这里插入图片描述
这里指路b站视频,个人认为解释的比较全面基础

而最后的Proposal层则负责综合positive anchors和对应bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals,应用非极大值抑制(NMS)将重叠的框去掉。其实整个网络到了Proposal Layer这里,最后在剩余的proposal中再次根据RPN的预测得分选择前2000个作为最终的proposal输出到下一个阶段。

采样
文中选择256个样本进行训练,正负样本按照1:1进行选择,正样本不足128时,选择负样本补足。
RPN训练中对于正样本文章中给出两种定义。第一,与ground truth box有最大的IoU的anchors作为正样本;第二,与ground truth box(人为标注的样本框)的IoU大于0.7的作为正样本。文中采取的是第一种方式。文中定义的负样本为与ground truth box的IoU小于0.3的样本。

ROI Pooling
RPN输出的候选框的特征大小不相同,因此需要先将这些区域的特征池化到固定的维度然后再输入到全连接网络中,再利用已经获得的proposal feature maps,通过全连接层与softmax计算每个proposal具体属于那个类别(如车、盒子、塑料瓶等),输出cls_prob概率向量;同时再次利用bounding box regression获得每个proposal的位置更加精确的偏移量bbox_pred,用于回归更加精确的目标检测框。

参考链接
物体检测学习_第12张图片

4、FPN

FPN(特征金字塔网络)用来提取不同尺度特征图(实现对大小不同的物体进行识别),提供给后面的网络执行预测任务。PN包含两个部分:第一部分是自底向上的过程,第二部分是自顶向下和侧向连接的融合过程。
物体检测学习_第13张图片
详细步骤,利用下图举例说明
物体检测学习_第14张图片

第一步: 自下而上的路径。以resnet作为backbone,我们取conv2,conv3,conv4,conv5这几个残差块的最后输出组成特征金字塔,记为{C2 , C3 , C4 , C5}。它们为了侧向融合,经过一个1 x 1卷积得到256维的特征图,记为{T2,T3,T4,T5}。

第二步: 自上而下的路径。将空间信息少但是语义信息强的最深层卷积层的输出,也就是上面的T5进行2倍的上采样,与T4进行相加融合得到B4,并且T5进行3 x 3卷积操作得到P5;B4进行2倍的上采样,与T3进行融合得到B3,并且B4进行3 x 3卷积操作得到P4;B3进行2倍的上采样,与T2进行融合得到B2,并且B3进行3 x 3卷积操作得到P3;B2进行3 x 3的卷积操作得到P2。

第三步: P5进行一个max pooling,乘以一个1 x 1的矩阵,其实就是保留原本的数据,但是步长为2,所以得到的P6为P5的1/2。

在Faster R-CNN中,仅仅只有一个特征层,在这一个特征层上生成不同面积、不同比例的anchor。
在RPN网络中生成多个预测特征层,在不同的特征层上分别针对不同尺度的目标进行预测.例如:P2是相对较底层的预测特征层,保留底层细节信息更多,所以适合预测小型目标。(面积为32 x 32,比例为1:2, 1:1, 2:1),越大的特征图越适合预测小的物体,因为这样得到的信息更多。

5、SSD(one-stage)

1、VGG详解
VGG16主要有13个卷积层和三个全连接层组成。
物体检测学习_第15张图片
每种卷积之间还有最大池化,最大池化下采样会将大小变成一半,channel数不变,channel数在卷积时会发生变化,最后是两个4096的全连接层以及最后一个1000个神经元的全连接层,这个全连接层因为直接使用softmax激活归一,所以不需要relu函数。

亮点:通过堆叠多个3 x 3的卷积核来替代大尺度卷积核(减少所需参数)例如:论文中提到可以通过堆叠两个3 x 3的卷积核替代5 x 5的卷积核,三个3 x 3的卷积核替代7 x 7的卷积核,这里的“替代”指的是感受野大小相同。
感受野通俗来讲就是输出的特征图上的一个单元对应的输入层上的区域大小。

输入通道个数 = 卷积核通道个数
卷积核个数 = 输出通道个数

物体检测学习_第16张图片
上图计算公式可以看出堆叠卷积核所用参数更少。

抽象程度较低一些,所以它会保留更多的细节信息
特征图像小(分辨率小,多次卷积后的特征图),卷积次数更多,感受野大,可以检测图像中较大的物体。

2、SSD

网络架构图
采用了vgg16的部分网络作为基础网络,在5层网络后,丢弃全连接,改为两个卷积网络,分别为:1024x3x3、1024x1x1。
物体检测学习_第17张图片
物体检测学习_第18张图片
这里选择的6个特征图就是VGG14中conv4的第三次卷积,在经过conv5三次卷积操作后,经过卷积核为3 x 3,步长为1,padding=1的max pooling后,得到的是19 x 19 x 512的特征图,在经过conv:3 x 3 x 1024 得到conv6,类似于VGG中的FC6,后续卷积操作可以从图中查看。
最后采用Conv4_3、FC7、Conv8_2、Conv9_2、Conv10_2和Conv11_2特征层的每个单元按照不同长宽比分别提取4~6个默认框,最终获取8732个默认框。
这里的default box(类似于Faster R-CNN中的 anchor box)匹配真实的GT box,关于SSD中关于box的尺度和比例,如下设定
物体检测学习_第19张图片
但是一般不这样设定,这里直接有一些代码预测特征层的目标尺度以及比例,在原论文当中,对于比例为1的情况,我们会额外增加一个default box。特征层①⑤⑥会生成4个box,特征层②③④会生成6个。

物体检测学习_第20张图片
在这里插入图片描述

特征图预测
对于预测为m x n x p的特征矩阵,用3 x 3 x p的卷积层,生成概率分数以及坐标偏移量(边界框回归参数)
对于特征图上的每一个位置,都会生成 k个default box,对每一个default box分别计算c个类别分数以及4个坐标偏移量(边界框回归参数),所以就需要k (c+4)个卷积核进行卷积处理。那么对于mn的特征矩阵而言,就会生成m * n * k * (c+4)个输出值。
物体检测学习_第21张图片
四个参数分别为中心坐标,宽度以及高度的预测。(这里与Faster R-CNN不同,这里对每个default box都只生成4个参数,不区分类别;而Faster R-CNN,会对每一个anchor box 进行分类生成,即4*c个参数,c为类别个数)。
物体检测学习_第22张图片
每一个default box都会预测c个类别分数,这里的c个类别分数包括了背景类别(即会预测背景概率)。

正负样本的选择:原论文给出2个准则:1、对每一个ground truth box去匹配与它 iou值最大的default box,则也是正样本。 2、对于任意一个default box,只要它与任意一个ground truth box的iou值大于0.5,则是正样本。在上面剩下的所有负样本,计算它们的最大confidence loss(可以理解为越大,越不能被选取),选取值较小的作为负样本,数量为正样本的3倍。

损失计算
物体检测学习_第23张图片

这里的损失计算其实和softmax的的交叉熵损失计算类似,参考b站讲解视频

目标检测中一些指标
物体检测学习_第24张图片
AP:相当于求precision为y轴,recall为x轴时,对应的点相连所占的面积。

ppt、截图等来源b站视频

你可能感兴趣的:(计算机视觉,深度学习)