目标检测算法分类

目标检测算法分类:

1、两步走的目标检测:先找出候选的一些区域,再对区域进行调整分类

                                      代表:R-CNN、SPP-net、Fast R-CNN、Faster R-CNN

2、端到端的目标检测:采用一个网络一步到位,输入图片,输出有哪些物体,物体在什么位置

                                       代表:YOLO、SSD

目标检测的任务:

分类原理:

        如下是一张CNN组成图,输入一张图片,经过其中卷积、激活、池化相关层,最后加入全连接层达到分类概率的效果。

 分类的损失与优化:

        在训练的时候需要计算每个样本的损失,那么CNN做分类的时候使用softmax函数计算结果,损失为交叉熵损失

         对于目标检测来说不仅仅是分类这样简单的一个图片输出一个结果,而且还需要输出图片中目标的位置信息,所以从分类到检测,如下图标记了过程:

检测的任务:

分类:

        N个类别

        输入:图片

        输出:类别标签

        评估指标:Accuracy

定位:

        N个类别

        输入:图片

        输出:物体的位置坐标

        主要评估指标:IOU

        其中我们得出来的(x,y,w,h)有一个专业的名词,叫做bounding box(bbox) 

物体位置:

x,y,w,h:x,y:物体的中心点位置,以及中心点距离物体两边的长款

xmin,ymin,xmax,ymax:物体位置的左上角、右下角坐标

目标定位的简单实现思路:

        在分类的时候我们直接输出各个类别的概率,如果加上定位的话,我们可以考虑在 网络的最后输出加上位置信息。(增加一段全连接输出4个位置,做损失计算)

回归位置:

增加一个全连接层,即为FC1、FC2

FC1:作为类别的输出

FC2:作为这个物体位置数值的输出

         假设有10个类别,输出[p1,p2,p3,...,p10],然后输出这一个对象的四个位置信息[x,y,w,h]。同理要知道网络输出什么,如果衡量整个网络的损失

        对于分类的概率,还是使用交叉熵损失

        位置信息具体的数值,可使用MSE均方误差损失(L2损失)

如下所示:

两种Bounding box名称:

在目标检测当中,对bbox主要由两种类别。

        Ground-truth bounding box:图片当中真实标记的框

        Predicted bounding box:预测的时候标记的框

一般在目标检测当中,我们预测的框可能有多个,真实框也有很多个。

目标检测-Overfeat模型

滑动窗口:

目标检测的暴力方法是从左到右、从上到下滑动窗口,利用分类识别目标。

        为了在不同观察距离处检测不同的目标类型,使用不同大小和宽高比的窗口

 注:这样就编程每张子图偏输出类别以及位置,变成分类问题。

但是滑动窗口需要初始设定一个固定大小的窗口,这就遇到了一个问题,有些物体适应框不一样

         所以需要提前设定K个窗口,每个窗口滑动提取M个,总共K*M个图片,通常会直接将图像变形转换成固定大小的图像,变形图像块被输入CNN分类器中,提取特征后,我们使用一些分类器识别类别和该边界框的另一个线性回归器。

Overfeat模型总结:

        这种方法类似一种暴力穷举的方法,会消耗大量的计算力量,并且由于窗口大小问题可能会造成效果不佳,但是提供了一种解决目标检测问题的思路。

R-CNN:

        不使用暴力方法,而是用候选区域方法(region propasal method),创建目标检测的区域改变了图像领域实现五团体检测模型思路,R-CNN是以深度神经网络为基础的物体检测的模型。

(但是对于多个目标的情况,就不能以固定个数输出物体的位置值)

 步骤(以AlexNet网络为基准)

1、找出图片中可能存在目标的候选区域region proposal

2、将候选区域调整为适应AlexNet网络的输入图像的大小227*227,通过CNN对候选区域提取特征向量,2000个建议框的CNN特征组合成网络Alex*Net最终输出:2000*4096维矩阵

3、将2000*4096维特征经过SVM分类器(20种分类,SVM是二分类器,则有20个SVM),获得2000*20种类别矩阵。

4、分别对2000*20维矩阵中进行非极大值抑制(NMS:non-maximum suppression)提出重叠建议框,得到与目标物体最高的一些建议框

5、修正bbox,对bbox做回归微调

CNN网络提取特征:

在候选区域的基础上提取出更高级、更抽象的特征,这些高级特征是作为下一步的分类器、回归的输入数据。

 提取这些特征将会保存在磁盘中(这些提取的特征才是真正的要训练的数据)

特征向量训练分类器SVM:

1、假设一张图片的2000个候选区域,那么提取出来的就是2000*4096这样的特征向量(R-CNN当中默认CNN层输出4096特征向量)

2、R-CNN选用SVM进行二分类。假设检测20个分类,那么会提供20个不同类别的SVM分类器,每个分类器都会对2000个候选区域的特征向量分别判断一次,这样得出[2000,20]的得分矩阵,如下图所示

每个SVM分类器做的事情,判断2000个候选区域是某类别,还是背景

非极大抑制(NMS):

目的:筛选候选区域,目标是一个物体只保留一个最优的框,来抑制那些冗余的候选框

迭代过程:

1、对于所有的2000个候选区域得分进行概率筛选,0.5

2、剩余的候选框

                假设图片真实物体个数为2(N),筛选之后候选框为5(P),计算N中每个物体位置与所有P的交并比loU计算,得到P中每个候选框对应loU最高的N中一个

                如下图,A,C候选框对应左边车辆,B,D,E对应右边车辆

 

 假如现在滑动窗口有:A、B、C、D、E5个候选框

        第一轮:对于右边车辆,假设B是得分最高的,与B的loU>0.5删除。现在与B计算loU,DE结果>0.5,剔除DE,B作为一个预测结果。

        第二轮:对于左边车辆,AC中,A的得分最高,与A计算loU,C的结果>0.5,剔除C,A作为一个结果

最终结果为在这个5个中检测出了两个目标为A和B

SS算法得到的物体位置已经固定了,但是我们筛选出的位置不一定就真的特别准确,需要对A和B进行最后的修正

修正候选区域:

        那么通过非最大一直筛选出来的候选框就不一定非常准确怎么办?R-CNN提供了这样的方法,建立了一个bbox regressor

        回归用于筛选候选区域,使之回归于ground-truth,默认认为这两个框之间是线性关系,因为在最后筛选出来的候选区域和ground-truth很接近了。

修正过程(线性回归)

 

 

IoU交并比:

 IoU(交并比)

        两个区域的重叠程度overlap:候选区域和标定区域的IoU值

 通常Correct:类别正确且IoU>0.5

平均精确率:

训练样本的标记:候选框(如RCNN2000个)标记

        1、每个ground-truth box有着最高的IoU的anchor标记为正样本

        2、剩下的anchor/anchors与任何ground-truth box的IoU大于0.7记为正样本,IoU小于0.3,记为负样本

        定义:多个分类任务的AP的平均值

                mAP=所有类别的AP之和/类别约总个数

                注:PR曲线,而AP就是这个曲线下的面积(ROC与AUC)

方法步骤:

        1、对于其中一个类别C,首先将算法输出的所有C类别的预测框,按预测的分数confidence排序(RCNN中就是SVM的输出分数)

        2、设定不同的k值,选择top k个预测框,计算FP和TP,计算Precision和AP

        3、将得到的N个类别的AP取平均,即得到AP;AP是针对单一类别的,mAP是将所有类别的AP求和,再取平均

首先回顾精确率和召回率:

        左边一整个矩行中的表示ground truth之中为1的(即为正确的)数据

        右边一整个矩行中的数表示ground truh之中为0的数据

        精度precision的计算是用检测正确的数据个数/总的检测个数

 

 RCNN的缺点:

1、训练阶段多:步骤繁琐:微调网络+训练SVM+训练边框回归器

2、训练耗时:占用磁盘空间大:5000张图像产生几百G的特征文件(VOC数据集的检测结果,因为SVM的存在)

3、处理速度慢:使用GPU,VGG16模型处理一张图像需要47s

4、图像形状变化:候选区要经过crop/warp进行固定大小,无法保证图片变形

SPPNet:

SPPNet主要存在两点改进地方,提出了SPP层

        减少卷积计算

 

 映射:

        原始图片经过CNN变成feature map,原始图片通过选择性搜索(SS)得到了候选区域(Region of Interest),现在需要将基于原始图片的候选区域映射到feature map中特征向量。映射过程图参考如下:

 整个映射过程有具体的公式,如下

假设(x',y')(x',y')表示特征图上的坐标点,坐标点(x,y)表示原输入图片上的点,那么他们之间有如下转换关系,这种映射关心与网络结构有关:(x,y)=(S*x',S*y'),即

左上角的点:x'=[x/S]+1

右下角的点:x'=[x/S]-1

其中S就是CNN中所有的strides的乘机,包含了池化、卷积的stride。

Fast R-CNN:

改进地方:提出一个Rol pooling,然后整合整个模型,把CNN、Rolpooling、分类器、bbox回归几个模块整个一起训练

 步骤:

1、首先将整个图片输入到一个基础卷积网络,得到整张图的fearure map

2、将选择性搜索算法的结果region proposal(Rol)映射到feature map中

3、Rol pooling layer提取一个固定长度的特征向量,每个特征会输入到一系列全连接层,得到一个Rol特征向量(此步骤是对每一个候选区域都会进行同样的操作)

        其中一个是传统softmax层进行分类,输出类别有K个类别加上“背景”类

        另一个是bounding box regressor

Rol pooling:

        首先Rol pooling只是一个简单版本的SPP,目的是为了减少计算时间并得出固定长度的向量。

 Rol池使用最大池化将任何有效的Rol区域内的特征转换成具有H*W的固定空间范围的小feature map,其中H和W是超参数它们独立于任何特定的Rol。

R-CNN、SPPNet、Fast R-CNN效果对比:

 

 

版权声明:本文为CSDN博主「春水煎茶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44065652/article/details/121773452

春水煎茶

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

【原理篇】一文读懂Mask RCNN

Mask RCNN 何凯明大神的经典论文之一,是一个实例分割算法,正如文中所说,Mask RCNN是一个简单、灵活、通用的框架,该框架主要作用是实例分割,目标检测&#xff0