深度学习-物体检测SSD
一:SSD结构
以VGG-16为基础,使用VGG的前五个卷积,后面增加从CONV6开始的5个卷积结构,输入图片要求300*300
1. 分别将VGG16的全连接层FC6和FC7转换成3x3的卷积层Conv6和1x1的卷积层Conv7
2.去掉所有的Dropout层和FC8层
3.同时将池化层pool5中的stride=2的2x2变成了stride=1的3x3
4.添加了Atous算法,目的获取更加密集的得分映射
5.然后在VGG16的基础上新增了卷积层来获得更好的特征图以用于检测
它针对输入的图片获取不同尺度的特征映射,但是在预测阶段仅仅使用了最后一层的特征映射。 同时在不同的特征映射上面进行预测,它在增加运算量的同时可能会提高检测的精度,因为它具有更多的可能性。
二:流程
如上图,输入以辆汽车图片,经历了多个卷积层和池化层,可以看到,不同的卷积层会输出不同大小的feature map(特征图),而且不同的feature map中有不同的特征,不同的特征有不同的作用,都会输入到NMS中。总的来说,浅层卷积层对边缘更加感兴趣,可以获得一些位置信息,二深层网络对有浅层特征构成的复杂特征更感兴趣,可以获得一些语义信息,对于检测任务而言,目标有复杂有简单的,对于简单的我们利用浅层网络的特征就可以检测出来,对于复杂的利用深层网络的特征检测出来。因此,如果同时在不同的feature map上面进行检测,理论上会有更好的检测结果。
SSD中引入了Defalut Box(候选框),实际上与Faster R-CNN的anchor box(候选框,不同的结构力叫法不一样)机制类似,就是预设一些目标预选框,不同的是在不同尺度feature map所有特征点上使用PriorBox层
生成一系列feature map时,传统框架会在feature map上进行region proposal提取出可能有物体的部分然后分类,这一步非常费时,所以SSD就放弃了,而是选择将直接生成一系列defaul box(候选框),然后以prior box为初始bbox,将bbox回归到正确的GT位置上去,预测出的定位信息实际上是回归后的bboxes和回归前的prior box的相对坐标,整个过程通过网络的一次前向传播就可以完成。
三:Detector和classifier
Detector和classifier的三个部分
1.PriorBox层:生成default boxes,默认候选框
2.Conv3x3:生成localization,4个位置偏移
3.Conv3x3:confidence,21个类别置信度(要区分出背景)
四:PriorBox层-default boxes
训练中还有一个东西:Prior box,是指实际中选择的要投入训练过程的Default box(每一个feature map cell 不是k个Default box都取)。
也就是说Default box是一种概念,Prior box则是实际的选取。训练中一张完整的图片送进网络获得各个feature map,对于正样本训练来说,需要先将prior box与ground truth box做匹配,匹配成功说明这个prior box所包含的是个目标,但离完整目标的ground truth box还有段距离,训练的目的是保证default box的分类confidence的同时将prior box尽可能回归到ground truth box。
举个列子:假设一个训练样本中有2个ground truth box,所有的feature map中获取的prior box一共有8732个。那可能分别有10、20个prior box能分别与这2个ground truth box匹配上。
default boxex类似于RPN当中的滑动窗口生成的候选框,SSD中也是对特征图中的每一个像素生成若干个框,以feature map上每个点的中点为中心(offset=0.5),生成一些列同心的Defalut box(然后中心点的坐标会乘以step,相当于从feature map位置映射回原图位置)
特点分析:
priorbox:相当于faster rcnn里的anchors,预设一些box,网络根据box,通过分类和回归给出被检测到物体的类别和位置。每个window都会被分类,并回归到一个更准的位置和尺寸上
各个feature map层经过priorBox层生成prior box
根据输入的不同aspect ratio 和 scale 以及 num_prior来返回特定的default box,default box 的数目是feature map的height x width x num_prior。
五:localization与confidence
这两者的意义如下,主要作用用来过滤,训练
六:训练与测试流程
1.train流程
输入->输出->结果与ground truth标记样本回归损失计算->反向传播, 更新权值
2.样本标记
先将prior box与ground truth box做匹配进行标记正负样本,每次并不训练8732张计算好的default boxes, 先进行置信度筛选,并且训练指定的正样本和负样本, 如下规则
正样本:
1.与GT重合最高的boxes, 其输出对应label设为对应物体.
2.物体GT与anchor iou满足大于0.5
负样本:其它的样本标记为负样本
七:损失
网络输出预测的predict box与ground truth回归变换之间的损失计算, 置信度是采用 Softmax Loss(Faster R-CNN是log loss),位置回归则是采用 Smooth L1 loss (与Faster R-CNN一样)