【目标检测算法】SSD: Single Shot MultiBox Detector

  • 摘要 ——论文的精华

摘要:本文提出了一种使用单个深度神经网络进行图像中目标检测的方法——SSD。SSD将边界框的输出空间离散化为一系列具有不同横纵比和大小的默认框,分布在特征图的每个位置。在预测时,网络为每个默认框中的每个物体类别的存在生成分数,并对默认框进行调整以更好的匹配物体形状。另外,网络将来自具有不同分辨率的多个特征图的预测组合在一起,使其能够自然地处理各种大小的物体。SSD相对于需要物体候选框(proposal)的检测方法而言是简单的,因为它完全消除了候选框生成和后续像素或特征重采样阶段,并将所有计算封装在单个网络中。这使得SSD易于训练并且可以直接集成到需要检测组件的系统中。PASCALVOC,COCO和ILSVRC数据集的实验结果证实,相比于利用额外候选框的检测方法,SSD在准确性具有竞争力并且速度更快,同时为训练和预测提供统一的框架。 对于300×300输入,SSD在Nvidia Titan X上以59 FPS进行VOC2007测试时达到74.3%mAP,对于512×512输入,SSD达到76.9%mAP,优于Faster R-CNN模型。 与其他单阶段(singe stage)方法相比,即使输入图像尺寸较小,SSD也具有更高的精度。 

  • 为什么更快?

We introduce SSD, a single-shot detector for multiple categories that is faster than the previous state-of-the-art for single shot detectors (YOLO), and significantly more accurate, in fact as accurate as slower techniques that perform explicit region proposals and pooling (including Faster R-CNN).

  1. 没有对候选框进行像素或特征的重采样 :在Faster-RCNN中,网络在提取到的特征图conv5_3(以VGG为例)上进行了卷积操作(sliding window)从而得到特征向量(512d for VGG)进行分类和回归,conv5_3每个位置都假定了不同大小的候选框(anchor),卷积操作相当于对每个位置的假定候选框进行特征提取(在特征图conv5_3上再次提取特征),即进行了候选框特征的重采样,而SSD没有重采样的操作。 
  2. SSD没有像R-CNN系列方法候选框生成的阶段。
  • 为什么准确高?  

The core of SSD is predicting category scores and box offsets for a fixed set of default bounding boxes using small convolutional filters applied to feature maps.

To achieve high detection accuracy we produce predictions of different scales from feature maps of different scales, and explicitly separate predictions by aspect ratio.

  1. 在每个位置使用小(3x3)的卷积核(小的卷积核提取特征更精细?)预测物体种类和bounding box的偏移
  2. 对于不同横纵比的候选框使用不同的卷积核(每个特征图位置的不同横纵比的候选框)
  3. 使用卷积在多层特征图上对不同大小的bounding box进行预测(对于低分辨率图片检测准确率明显提升!!!)

 

  •  The Single Shot Detector (SSD)

  1. 训练只需输入图像和物体ground truth
  2. 如图b和c所示,特征图的每个位置上生成候选框(图中为4个),SSD在不同大小的特征图(图中8x8 4x4)上进行预测
  3. 如图c所示,对于每一个候选框,预测生成框的偏移量(cx,cy,w,h)及每个类别的分数\large c_{i}(21类 = 20物体类+背景)
  4. 训练时,首先将所有候选框与ground truth匹配,图中两个蓝色框匹配猫,1个红色框匹配狗,将这些框设为正样本,其他为负样本

 

  • 网络模型 

  1. 在截断(truncated)的基础网络(如VGG16为conv5_3)后添加了卷积特征层。这些层在尺寸上逐层递减,使我们可以预测不同大小的目标
  2. 用一系列卷积核对每个增加的特征层卷积可以得到一系列的预测结果。比如特征图大小是m x n x p(通道数),我们用3 x 3 x p的卷积核对m x n每个位置进行卷积。那么如果每个位置有 k 个候选框,那么卷积核个数为(c + 4)* k * m * n,其中c为类别数,4为候选框的偏移参数(cx,cy,w,h)
  3. 在不同尺寸的特征图上设置不同大小形状(每个位置k个)的候选框,使得SSD能够更有效的离散输出框的解空间(因为各种形状大小的候选框数量更多了,所以更有可能预测到大小形状合适的框)

 

  • 训练

首先训练SSD需要将所有的 ground truth 匹配到候选框上,匹配策略是将与 ground truth 交并比(IOU)最大和 >0.5的设置为正样本,设置负样本与正样本比例 3:1(涉及Hard negative mining),之后就可以开始端到端的训练  

1.损失函数部分 

总的损失函数为类别置信(confidence)损失定位(location)损失的加权 

其中 N 为匹配的候选框的个数,通过交叉验证文中将 \alpha 设为 1。

定位损失为 Smooth L1 loss

  

其中\dpi{120} x_{ij}^{k} = \left \{ 1,0 \right \}表示第i个候选框与类别为k的第j个ground truth是否匹配

其中 这4个参数可以理解为默认框的向其匹配ground truth做回归得出的预测偏移量\left ( \Delta cx,\Delta cy,\Delta w,\Delta h \right ),详细解释可以参考论文R-CNN中的附录C. Bounding-box regression 部分

Smooth L1 loss 为 

置信损失为多类别的 softmax 损失

 

其中用 x_{ij}^{p} = \left \{ 1,0 \right \}  代表第 i 个候选框与类别为 p 的 ground truth 是否匹配

2.选择候选框的大小及长宽比

论文中提到使用低层的特征图能够提升语义分割效果,因为低层能够提取到输入图像更精细的特征。借鉴了这个思想,SSD使用多层的卷积图进行预测,并且为每层特征图设置不同大小和长宽比的候选框(default box or anchor)。

默认框大小(scale)

其中 m 为参与预测的特征图个数,最低层 s_{min}=0.2 最高层  s_{max}=0.9 中间层为 s_{k}

候选框长宽比(aspect ratios)

a_{r}=\left \{ 1,2,3,\frac{1}{2},\frac{1}{3} \right \}

候选框的宽  w_{k}^{a}=s_{k}\sqrt{a_{r}}  以及高  h_{k}^{a}=s_{k}/\sqrt{a_{r}}

当 \large a_{r}=1 时 引入一种大小为 \large s_{k}^{'}=\sqrt{s_{k}s_{k+1}} 的框,所以每个特征图位置设置 5(不同长宽比)+1(sk)=6个候选框。

设置每个候选框的中心 其中 f_{k} 为 第 个特征图的边长(例如8 x 8为8),相当于是归一化的中心坐标。

3.Hard negative mining

在生成一系列的候选框之后,会产生很多个符合 ground truth  的 positive boxes(候选正样本集),但同时,不符合 ground truth boxes 也很多,而且这个 negative boxes(候选负样本集),远多于 positive boxes。这会造成 negative boxes、positive boxes 之间的不均衡,训练时难以收敛,这就涉及到 Hard negative mining。

本文中设置正负样本比例为 1:3,将与每个ground truth有最大IOU和 IOU>0.5 的候选框设置为正样本,其他的候选框作为negative boxes(候选负样本集),在候选负样本集中按所有框的scores(网络预测)排序,取出score较小的 k(3倍正样本数)个候选框作为负样本。为什么这样取呢?因为 negative boxes(候选负样本集)中所有框未与任何ground truth匹配,标签为背景类0,框的score越小,代表框是背景类的概率越小,即预测的误差较大,我们进行 Hard negative mining 就是要将这些误差较大的框选出来作为负样本进行训练。

 3.Data augmention

数据增广,即对每一张image进行如下之一变换获取一个patch进行训练:

  • 直接使用原始的图像(即不进行变换)
  • 采样一个patch,保证其与ground truth之间最小的IoU为:0.1,0.3,0.5,0.7 或 0.9
  • 完全随机的采样一个patch
  • 采样的patch大小为原图的 \left [ 0.1,1 \right ]
  • 采样的patch长宽比为\left [ 0.5,2 \right ]
  • 当 ground truth box中心恰好在采样的patch中时,保留ground truth box与patch 重叠部分
  • 每个patch被resize到固定大小,并且以0.5的概率进行随机水平翻转

  • 总结

SSD生成默认框(anchor)的方法跟Faster-RCNN类似,相比于YOLO使用全连接层进行预测,本文亮点是用一系列卷积核对每个增加的特征层卷积可以得到一系列的预测结果,使用感受野小的feature map检测小目标,使用感受野大的feature map检测更大目标从而预测大小不同的目标。更清楚了解整个过程建议大家看一看代码,这里给出tensorflow版本的SSD

SSD-Tensorflow 

第一次写博客,文中有解释不清楚或错误之处欢迎大家及时指出,同时也欢迎目标检测/分割方向的朋友一起多多讨论!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值