论文理解:SSD

作者认为,当前的目标检测系统虽然准确,但是对于嵌入式系统甚至高端硬件来说仍需要大量集中的计算,对于即时应用仍然太慢了。于是在本文中提出了SSD(Single Shot MultiBox Detector)。

SSD架构如下:

如图(a)SSD在训练期间仅需要每个对象的输入图像和对应的ground truth box(真实标签框)。卷积处理时,我们在具有不同尺度(例如(b)和(c)中的8×8和4×4)的若干特征图中的每个位置处评估不同横宽比的小(例如4个)默认框集合。对于每个默认框,我们预测对所有对象类别((c 1,c2,...,cp))的形状偏移和置信度。在训练时,我们首先将这些默认框匹配到ground truth box。例如,两个默认框匹配到猫和狗,这些框为正,其余视为负。模型损失是位置损失(例如Smooth L1)和置信损失(例如Softmax)之间的加权和。

对于ground truth box解释https://www.zhihu.com/question/22464082

SSD基于前馈卷积网络,其产生固定大小的边界框集合和框中对象类别的分数,接着是非最大化抑制步骤以产生最终检测。网络浅层基于高质量图像分类(在任何分类层之前截断网络)的标准网络,作者称其为“基础网络”。接着在后面添加辅助结构,产生具有以下关键特征的检测:

多尺度特征图检测:将卷积特征层添加到截断的基础网络的末尾。这些层尺寸逐渐减小,得到多个尺度检测的预测值。检测的卷积模型对于每个特征层是不同的(图中选取了VGG-16作为例子,并与YOLO进行了对比):

检测卷积预测器

每个添加的特征层(或可选的在基础网络中的现有特征层)可以使用一组卷积滤波器产生固定的检测预测集合。这些在上图上部已经标注出。对于具有p个通道的大小为m×n的特征层,使用3×3×p卷积核卷积操作,产生类别的分数或相对于默认框的坐标偏移。在应用卷积核运算的m×n个位置中的每一处,产生一个输出值。边界框偏移输出值是相对于默认框测量,默认框位置则相对于特征图(参见YOLO 的架构,中间使用全连接层而不是用于该步骤的卷积滤波器)。

默认框和宽高比

将一组默认边界框与顶层网络每个特征图单元关联。默认框对特征图作卷积运算,使得每个框实例相对于其对应单元格的位置是固定的。在每个特征映射单元中,我们预测相对于单元格中的默认框形状的偏移,以及每个框中实例的每类score。具体来说,对于在给定位置的k个框中每个框,需要计算c类score和相对于原始默认框的4个偏移量。这使得在特征图中的每个位置需要总共(c+4)k个滤波器,对于m×n特征图产生(c+4)kmn个输出。这里默认框(default box)类似于Faster R-CNN中使用的anchor boxes,但我们将其应用于不同分辨率的特征图中(在Faster RCNN中 anchor box只用在最后一个卷积层)。在多个特征图中使用不同的默认框形状,可以有效地离散可能的输出框形状空间。

一开始训练时,与multibox相似,将每个ground truth box和与之拥有最好jaccard 重叠率的default box进行匹配,后来不同于multibox,将default box与任何jaccard重叠率高于阈值(比如0.5)的ground box 进行匹配。这简化了学习问题,允许网络为多个重叠的default box预测高的score。

这里的jaccard overlapping一开始没搞懂啥意思,查了一下发现竟然是交并比IoU。。。。。。。

关于损失函数

定义x_{ij}^{p}={1,0}为将第i个default box和类别p第j个ground box匹配的指标,定义损失函数如下:

N为匹配成功的default box。如果N=0,则L设为0。

Localization loss是predicted box(l)和ground truth box(g)之间参数的Smooth L1 loss。与Faster RCNN相似,我们退回到对default bounding box(d)的中心(cx,cy)和宽(w)高(h)的弥补(这句话没看懂)。

Smooth L1 Loss解释https://blog.csdn.net/jningwei/article/details/78853669

confidence loss是对多重class confidence的softmax loss

通过交叉验证权重\alpha设为1.

先前的工作显示使用低层的feature maps可以提升语义上的分割质量,因为较低层能捕捉到输入的更好的细节。类似地,添加从feature map上池化得到的global context 能帮助平滑分割结果。受这二者启发,低层和高层的feature map做检测。

关于default box的scales和aspect ratios的选择给出以下方法(假设用m层feature map做预测):

s_{min}=0.2s_{max}=0.9分别代表最底层和最高层的scale。可以看到,从底层到高层scale逐层递增,呈等差数列。

至于宽高比a_{r}给出了5种可能{1,2,3,1/2,1/3},宽w_{k}^{a}=s_{k}\sqrt{a_{r}},高h_{k}^{a}=s_{k}/\sqrt{a_{r}},当宽高比=1时,额外添加了一个scale,s{}'_{k}=\sqrt{s_{k}s_{k+1}},因此对于每个scale有6个default box。设置default box中心为(\frac{i+0.5}{\left | f_{k} \right |},\frac{j+0.5}{\left | f_{k} \right |})。\left | f_{k} \right |是第k个特征图的大小,i,j\epsilon[0,\left | f_{k} \right |)。实际工作时,default box的设置可以根据专门的数据集有所变化。如此的目的大致是,让default box覆盖各种大小和宽高比的物体。

通过各种大小和宽高比的default box,我们有物体的各种预测,比如在下图中,只有红框为狗的正样本,其余皆为狗的负样本

可想在匹配阶段时,大多数default box是负样本,对此选取最高confidence loss的几个default box,控制负样本与正样本比例为3:1。这样能加速优化,也更稳定。

具体训练结果就不在这里赘述了。。。

看了一些其他人的笔记觉得不错详情参考https://blog.csdn.net/u010167269/article/details/52563573

https://blog.csdn.net/mingshili/article/details/80036808#一one-stage-检测器和two-stage检测器

猜你喜欢

转载自blog.csdn.net/stezio/article/details/81455785