SSD

匿名 (未验证) 提交于 2019-12-03 00:22:01

Mobilenet V2在移动设备上比Mobilenet V1更快,但在桌面GPU上稍慢。


Single Shot MultiBox Detector

SSD是一种速度很快,且识别率较高的物体检测模型。其借鉴了YOLO的图像网格划分,并简化了基于Region Proposal方法的faster r-cnn在21分类,同时整合faster r-cnn中anchor boxes实现multi-scale的思想。

缺点:

1.需要人工设置 prior box 的 min_size,max_size 和 aspect_ratio 值。网络中 prior box 的基础大小和形状不能直接通过学习获得,而是需要手工设置。而网络中每一层feature使用的prior box大小和形状恰好都不一样,导致调试过程非常依赖经验。
2.虽然采用了 pyramdial feature hierarchy 的思路,但是对小目标的recall依然一般,并没有达到碾压 Faster RCNN 的级别。作者认为,这是由于SSD使用 conv4_3 低级 feature 去检测小目标,而低级特征卷积层数少,存在特征提取不充分的问题。


网络大体结构

SSD网络包括两个部分,前面用的是VGG16的前五层基础网络,用于图像分类的标准网络,把VGG16后面分类的层全部删掉, 后面又利用astrous算法将fc6和fc7转化成两个conv,加入3个卷积conv,和一个 average pool层。

1. Mult-scale feature map for detection

加入conv特征层,得到不同尺度的特征层,从而实现多尺度目标检测 ,用于不同尺度的目标预测的卷积模型是不同的,这些层的大小逐渐减小,可以进行多尺度预测。用了 CNN 前面的 layers,来提高图像分割的效果,因为越底层的 layers,保留的图像细节越多。实验表明增加对基础网络conv4_3的特征图的检测可以使mAP提升4%。

2. Convolutional predictors for detection

对于每个添加的特征层,使用一组卷积滤波器,可以得到一组固定数目的目标检测的预测 。对于一个尺寸为m*n,p通道的特征层,使用一个 3*3*p 的卷积核作为一个基础元素来预测一个可能检测的信息(类别信息,位置信息),该值可以是某一类别的得分,也可以是相对于default bounding boxes的偏移量,并且在图像的每个位置都将产生一个值。

3.Default boxes and aspect ratios :

在 Faster R-CNN中使用了 anchor boxes 实现不同大小和宽高比的物体提取 ,SSD是在feature map的每个位置预测K个box,一般为4个或者6个。对于每个box,预测C个类别得分,以及相对于default bounding box的4个偏移值,这样需要(C+4)*k个预测器,在一个m*n的feature map上将产生(C+4)*k*m*n个预测值。SSD中的default bounding box类似于FasterRCNN的RPN中anchors,主要区别是SSD在不同的特征层中考虑不同的尺度,RPN在一个特征层考虑不同的尺度。


训练过程



SSD一共有11层,全部都是卷积层,没有全连接层。使用VGG16前面的前 5 层,然后利用astrous算法将fc6和fc7转化成两个conv,再格外增加了 3 个conv,和一个 average pool层。其中的6层,分别是38×38(block4),19×19(block7),10×10(block8),5×5(block9),3×3(block10),1×1(block11)都输出一个Feature map,并以此作为预测一个输入,不同层次的 feature map 分别用于 default box 的偏移以及不同类别得分的预测,feature map每个点生成固定数量的default box,其中block7、block8、block9层为6个default box,block4block10block11层为4个default box,然后这6个层分别输出5776 2166 600 150 36 4个default bounding box,一共8732个default bounding box,然后这些框与打标签的框进行匹配,最后通过nms(非极大值抑制)得到最终的检测结果。整个图片做输入,之后在输出层回归出box的位置和object的类别。

3x3卷积的作用

用train模型的可视化图来说明:例如从fc7(实际是一个卷积层)的feature map引出的loc分支,fc7_mbox_loc是一个卷积层,有6x4=24个3x3卷积核。其中,6是anchor的种类,4是回归预测的4个坐标(的offset),即每个cell都分别给6种anchor box预测4个坐标。得到24个feature map后再flatten(拉长),最后把所有层的特征都拼接起来,求置信度conf的分支也类似,最后mbox_loc和mbox_conf送到整体损失层mbox_loss。


出现的专有名词

default box

实验表明default box的shape数量越多,效果越好。prior box(目标的预选框)是实际的选取。训练中一张完整的图片送进网络获得各个feature map,对于正样本训练来说,需要先将prior box与ground truth box做匹配,匹配成功说明这个prior box所包含的是个目标,但离完整目标的ground truth box还有段距离,训练的目的是保证default box的分类confidence的同时将prior box尽可能回归到ground truth box。 default boxes与faster R-CNN中的Anchor很类似,这里是按照YOLO中的想法,把每个Feature map(不同scale的)分成m×n个cell,每个cell有默认出k个default boxes,最后的predict box与default box有4个offset,并为每个predict box计算c个类的值。最后产生了(c+4)*k*m*n个值。这里与faster R-CNN Anchor最大的不同就是,faster R-CNN是通过改变Anchor的大小来实现scalable的,SSD是改变Feature map大小来实现的。


生成default box的步骤
1.首先设计出最小和最大default box的尺寸 [ S_{min},S_{max}],即越底层的feature map对应的default box尺寸越小(感受野越小,更适合检测小尺寸对象),论文中为[0.2,0.9],表示最浅层特征图的scale值为scale_min=0.2,最深层特征图的scale_max=0.9。检测的最小尺寸为300*0.2=60,60*60的像素还是蛮大的。

2.每个feature map(由低层到高层)对应的default box的尺寸计算公式为,m为feature map数量


3.每个尺寸的default box宽高根据比例值计算,原论文中比例值为{1,2,3,1/2,1/3},默认框的长宽计算公式:

4.对每个anchor和所有的gt计算重叠度,anchor的类别为重叠度最高的gt的类别,偏移位置为相对于重叠度最高的gt的偏移位置;
5.给定输入图像以及每个物体的 ground truth,首先找到每个gt对应的default box中重叠度最大的作为(与该ground true box相关的匹配)正样本。然后,在剩下的default box中找到那些与任意一个ground truth box 的 IOU 大于 0.5的default box作为(与该ground true box相关的匹配)正样本。剩余的default box 作为负例样本;

6.一个anchor对应一个gt,而一个gt可能对应多个anchor。


第一层feature map对应的min_size=S1,max_size=S2;第二层min_size=S2,max_size=S3;其他类推。在原文中,Smin=0.2,Smax=0.9,但是在SSD 300中prior box设置并不能和paper中上述公式对应:


不过依然可以看出,SSD使用低层feature map检测小目标,使用高层feature map检测大目标,这也应该是SSD的突出贡献了。

实验得出使用瘦高与宽扁默认框相对于只使用正方形默认框有2.9%mAP提升。


Feature map

特征图,每一种卷积核提取一张feature map, 数量根据需求而定,一般图像很大的话会需要很多。例如32*32的图像,6个feature map就比较合适。不同的特征提取会提取不同的feature,模型想要达成的目的是解一个最优化,来找到能解释现象的最佳的一组卷积核。设计多种的滤波器(卷积核,滤波器矩阵所有的元素之和等于1,滤波前后图像的亮度保持不变;大于1,滤波后更亮;小于1,滤波后变暗;和为0,图像不会变黑,但也会非常暗;出现负数或大于255,直接截断到0和255之间,对于负数也可取绝对值),通过权值共享来减少网络参数,这时候就可以通过输入图像的大小以及卷积核的大小来确定隐含层的神经元的个数了,公式为:(32-5+1)*(32 -5 +1)=28*28 个隐层神经元,也就是每一个feature map的大小就是28*28 。那么这一层一共有(5*5 +1)*6个参数,其中5*5为卷积核的大小,1为一个bias参数, 6为6种卷积核。

大部分 CNN 网络在越深的层,feature map 的尺寸(size)会越来越小。这样做不仅仅是为了减少计算与内存的需求,还有个好处就是,最后提取的 feature map 就会有某种程度上的平移与尺度不变性。



IOU

intersection-over-union 交并比,表示了bounding box 与 ground truth 的重叠度,如下图所示:


IOU=(A∩B)/(A∪B)


ground truth预处理

训练过程中,首先需要将label信息(ground truth box,ground truth category)进行预处理,将其对应到相应的默认框上。根据默认框和ground truth box的jaccard 重叠来寻找对应的默认框。文章中选取了jaccard重叠超过0.5的默认框为正样本,其它为负样本。

jaccard index,相似系数,用于比较有限样本集之间的相似性与差异性。数值越大,相似度越高。


Receptive fields

感受野,每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小。举个例子,在maxpooling层中,如果它的kenerl size是2x2,输出结果中的每一个元素都是其对应输入的2x2的区域中的最大值,所以这一层的感受野大小就是2。其实感受野的大小是由kernel size和stride size一起决定的,公式是:rfsize = f(out, stride, ksize) = (out - 1) * stride + ksize,其中out是指上一层感受野的大小。

https://blog.csdn.net/u010725283/article/details/78593410

感受野计算:


positive/negative samples

正负样本是相对的概念,不同的正负样本定义对问题解决没有本质影响,但好的正负样本定义可以减轻认知负担、方便人对问题的理解。根据目标定义正样本,优化损失函数时是根据正样本来进行。一般来说目标检测中,目标即为正样本,背景等不是目标的都是负样本。


Activation function

激活函数,因为线性模型的表达能力不够,所以加入非线性因素。常用的有sigmod,tanh,ReLU△。



Atrous convolutions

空洞卷积/扩张卷积,向卷积层引入了一个称为 “扩张率(dilation rate)”的新参数,该参数定义了卷积核处理数据时各值的间距,就是带洞的卷积,卷积核是稀疏的。

如下图所示,上面的是普通卷积,下面的是空洞卷积


在相同的计算条件下,空洞卷积提供了更大的感受野。所以当网络层需要较大的感受野,但计算资源有限而无法提高卷积核数量或大小时,可以考虑空洞卷积。其次带洞卷积减少了核的大小,可以达到节省内存的作用,因此经常被用在实时图像分割中。另外,通常卷积过程中为了使特征图尺寸特征图尺寸保持不变,通过会在边缘打padding,但人为加入的padding值会引入噪声,因此,使用空洞卷积能够在保持感受野不变的条件下,减少padding噪声。


mAP

average precision,平均精确度,average precision,是对多个验证集个体求平均AP值。多个类别物体检测中,每一个类别都可以根据查全率(recall)和查准率(precision)绘制一条曲线,AP就是该曲线下的面积,mAP 是多个类别AP的平均值。mPA的大小一定在 [ 0 , 1 ] 之间,越大越好。

计算公式如下,




Non maximum suppression(NMS)

非极大值抑制,本质是搜索局部极大值,抑制非极大值元素。主要目的是消除多余(交叉重复)的窗口,找到最佳物体检测位置,抑制过程为 迭代-遍历-消除。

(1)将所有框的得分排序,选中最高分及其对应的框;

(2)遍历其余的框,和当前最高分框的重叠面积(IOU)大于一定阈值,就将框删除(这片区域只留最高分一个框);

(3)从未处理的框中继续选一个得分最高的,重复上述过程。


损失函数


SSD损失函数分为两部分:

类别置信度loss,confidence loss(conf)

定义

, 表示 第 i 个default box与第 j 个ground truth box相匹配,类别为p,若不匹配的话,值为0。

目标函数定义为:

,N为匹配default box,If N = 0,loss = 0;

为预测框

和ground truth box

的Smooth L1 loss,

值通过cross validation设置为1。


1.localization loss定义如下:


为预测框,

为ground truth,

为default box,我们对偏移位置进行回归。

2.

为多类别softmax loss,confidence loss定义如下, 通过交叉验证将

设为1 :


SSD网络的损失函数


Hard Negative Mining

难分样本挖掘。在目标检测中,正样本是海上小目标,负样本是背景,训练的时候,相当于一个二分类的过程(有目标和没目标)。绝大多数的default box都是负例样本,导致正负样本不平衡,训练时采用Hard Negative Mining策略(使正负样本比例为1:3)来平衡正负样本比例。具体的做法是在开始时随机创建一堆的bounding box候选框,并且不能与正样本有任何的重叠,把这些未与正样本重叠的新的bounding box作为负样本。


文章来源: SSD
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!