天天看点

SSD浅层网络_深度学习目标检测SSD论文解读

SSD浅层网络_深度学习目标检测SSD论文解读

前言

上一篇我们说到YOLO将候选框提取与分类统一为一个回归问题,相对于R-CNN系列的"看两眼",YOLO只需要Look Once。

YOLO简洁且速度快,但是YOLO难以检测小目标,而且定位不准。相比YOLO,SSD采用CNN来直接进行检测,而不是像YOLO那样在全连接层之后做检测。另外SSD提取了不同尺度的特征图来做检测,大尺度特征图可以用来检测小物体,而小尺度特征图用来检测大物体;再由SSD采用了不同尺度和长宽比的先验框Prior boxes,在Faster R-CNN中叫做锚Anchors。这几点重要改进使得SSD在一定程度上克服这些缺点。

论文名称:

SSD: Single Shot MultiBox Detector

论文下载:

https://arxiv.org/pdf/1611.10012.pdf​arxiv.org

论文解读:

SSD浅层网络_深度学习目标检测SSD论文解读

SSD网络结构

SSD和YOLO都是采用一个CNN网络来进行检测,但是却采用了多尺度的特征图,其基本架构如上图所示。下面将SSD核心设计理念总结为以下三点:

1 采用多尺度特征图用于检测
SSD浅层网络_深度学习目标检测SSD论文解读

不同尺度的特征图

所谓多尺度采用大小不同的特征图,CNN网络一般前面的特征图比较大,后面会逐渐采用stride=2的卷积或者pool来降低特征图大小。如上图所示,一个比较大的特征图和一个比较小的特征图,它们都用来做检测。这样做的好处是比较大的特征图来用来检测相对较小的目标,而小的特征图负责检测大目标,8x8的特征图可以划分更多的单元,但是其每个单元的先验框尺度比较小。

2 采用卷积进行检测

与YOLO最后采用全连接层不同,SSD直接采用卷积对不同的特征图来进行提取检测结果。对于形状为m×n×p的特征图,只需要采用3×3×p这样比较小的卷积核得到检测值。

3 设置先验框

在YOLO中,每个单元预测多个边界框,但是其都是相对这个单元本身,然而真实目标的形状是多变的,YOLO需要在训练过程中自适应目标的形状。而SSD借鉴了Faster R-CNN中anchor的理念,每个单元设置尺度或者长宽比不同的先验框,预测的边界框bounding boxes是以这些先验框为基准的,在一定程度上减少训练难度。一般情况下,每个单元会设置多个先验框,其尺度和长宽比存在差异,如下图所示,可以看到每个单元使用了4个不同的先验框,图片中猫和狗分别采用最适合它们形状的先验框来进行训练。

SSD浅层网络_深度学习目标检测SSD论文解读

SSD的先验框

网络结构

SSD采用VGG16作为基础模型,然后在VGG16的基础上新增了卷积层来获得更多的特征图以用于检测。SSD的网络结构如下图所示。上面是SSD模型,下面是Yolo模型,可以明显看到SSD利用了多尺度的特征图做检测。模型的输入图片大小是300×300。

SSD浅层网络_深度学习目标检测SSD论文解读

SSD网络结构

采用VGG16做基础模型,首先VGG16是在ILSVRC CLS-LOC数据集预训练。然后借鉴了DeepLab-LargeFOV,分别将VGG16的全连接层fc6和fc7转换成3×3卷积层 conv6和1×1卷积层conv7,同时将池化层pool5由原来的stride=2的2×2变成stride=1的3×3。为了配合这种变化,采用了一种Atrous Algorithm,其实就是conv6采用扩展卷积或带孔卷积Dilation Conv,其在不增加参数与模型复杂度的条件下指数级扩大卷积的视野,其使用扩张率dilation rate参数,来表示扩张的大小,如下图所示,(a)是普通的3×3卷积,其视野就是3×3,(b)是扩张率为2,此时视野变成7×7,(c)扩张率为4时,视野扩大为15×15,但是视野的特征更稀疏了。Conv6采用3×3大小但dilation rate=6的扩展卷积。

SSD浅层网络_深度学习目标检测SSD论文解读

然后移除dropout层和fc8层,并新增一系列卷积层,在检测数据集上做finetuing。

训练过程

1 先验框匹配

在训练过程中,首先要确定训练图片中的ground truth与哪个先验框来进行匹配,与之匹配的先验框所对应的边界框将负责预测它。在YOLO中,ground truth的中心落在哪个单元格,该单元格中与其IOU最大的边界框负责预测它。但是在SSD中却完全不一样,SSD的先验框与ground truth的匹配原则主要有两点:

  1. 首先,对于图片中每个ground truth,找到与其IOU最大的先验框,该先验框与其匹配,这样,可以保证每个ground truth一定与某个先验框匹配。通常称与ground truth匹配的先验框为正样本,反之,若一个先验框没有与任何ground truth进行匹配,那么该先验框只能与背景匹配,就是负样本。
  2. 其次,对于剩余的未匹配先验框,若某个ground truth的IOU大于某个阈值,那么该先验框也与这个ground truth进行匹配。这意味着某个ground truth可能与多个先验框匹配,这是可以的。但是反过来却不可以,因为一个先验框只能匹配一个ground truth,如果多个ground truth与某个先验框IOU大于阈值,那么先验框只与IOU最大的那个ground truth进行匹配。

下图为一个匹配示意图,其中绿色的GT是ground truth,红色为先验框,FP表示负样本,TP表示正样本。

SSD浅层网络_深度学习目标检测SSD论文解读

先验框匹配示意图

尽管一个ground truth可以与多个先验框匹配,但是ground truth相对先验框还是太少了,所以负样本相对正样本会很多。为了保证正负样本尽量平衡,SSD采用了hard negative mining,就是对负样本进行抽样,抽样时按照置信度误差(预测背景的置信度越小,误差越大)进行降序排列,选取误差的较大的top-k作为训练的负样本,以保证正负样本比例接近1:3。

2 损失函数

损失函数定义为位置误差locatization loss与置信度误差confidence loss的加权和:

SSD浅层网络_深度学习目标检测SSD论文解读

其中

SSD浅层网络_深度学习目标检测SSD论文解读

是先验框的正样本数量。这里

SSD浅层网络_深度学习目标检测SSD论文解读

为一个指示参数,当

SSD浅层网络_深度学习目标检测SSD论文解读

时表示第

SSD浅层网络_深度学习目标检测SSD论文解读

个先验框与第

SSD浅层网络_深度学习目标检测SSD论文解读

个ground truth匹配,并且ground truth的类别为

SSD浅层网络_深度学习目标检测SSD论文解读

SSD浅层网络_深度学习目标检测SSD论文解读

为类别置信度预测值。

SSD浅层网络_深度学习目标检测SSD论文解读

为先验框的所对应边界框的位置预测值,而

SSD浅层网络_深度学习目标检测SSD论文解读

是ground truth的位置参数。对于位置误差,其采用Smooth L1 loss,定义如下:

SSD浅层网络_深度学习目标检测SSD论文解读
SSD浅层网络_深度学习目标检测SSD论文解读

由于

SSD浅层网络_深度学习目标检测SSD论文解读

的存在,所以位置误差仅针对正样本进行计算。值得注意的是,要先对ground truth的

SSD浅层网络_深度学习目标检测SSD论文解读

进行编码得到

SSD浅层网络_深度学习目标检测SSD论文解读

,因为预测值

SSD浅层网络_深度学习目标检测SSD论文解读

也是编码值,若设置variance_encoded_in_target=True,编码时要加上variance:

SSD浅层网络_深度学习目标检测SSD论文解读
SSD浅层网络_深度学习目标检测SSD论文解读

对于置信度误差,其采用softmax loss:

SSD浅层网络_深度学习目标检测SSD论文解读

权重系数

SSD浅层网络_深度学习目标检测SSD论文解读

通过交叉验证设置为1。

3 数据增强

采用数据增强Data Augmentation可以提升SSD的性能,主要采用的技术有水平翻转(horizontal flip),随机裁剪加颜色扭曲(random crop & color distortion),随机采集块域(Randomly sample a patch)(获取小目标训练样本),如下图所示:

SSD浅层网络_深度学习目标检测SSD论文解读
SSD浅层网络_深度学习目标检测SSD论文解读

数据扩增方案

预测过程

预测过程比较简单,对于每个预测框,首先根据类别置信度确定其类别(置信度最大者)与置信度值,并过滤掉属于背景的预测框。然后根据置信度阈值(如0.5)过滤掉阈值较低的预测框。对于留下的预测框进行解码,根据先验框得到其真实的位置参数(解码后一般还需要做clip,防止预测框位置超出图片)。解码之后,一般需要根据置信度进行降序排列,然后仅保留top-k(如400)个预测框。最后就是进行NMS算法,过滤掉那些重叠度较大的预测框。最后剩余的预测框就是检测结果了。

优缺点

SSD在Yolo的基础上主要改进了三点:多尺度特征图,利用卷积进行检测,设置先验框。这使得SSD在准确度上比YOLO更好,而且对于小目标检测效果也相对好一点。

小目标往往更依赖浅层特征,因为浅层特征有更高的分辨率,然而对语义区分较差。SSD检测和分类一起做,会把一些检测到但是分类模糊,分数不高的结果过滤掉。所以对于小目标检测效果虽然比YOLO好,但是还是有缺陷。

参考

小小将:目标检测|SSD原理与实现​zhuanlan.zhihu.com

SSD浅层网络_深度学习目标检测SSD论文解读

为什么SSD(Single Shot MultiBox Detector)对小目标的检测效果不好?​www.zhihu.com

SSD浅层网络_深度学习目标检测SSD论文解读