SSD 顾名思义就是“使用单个深层神经网络检测图像中的多对象”。
该论文主要贡献在于提高了单次检测器的速度和精度 :
SSD在训练期间仅需要每个对象的输入图像和真实标签框。 卷积处理时,在具有不同尺度的若干特征图中的每个位置处评估不同横宽比的小集合默认框。 对于每个默认框,预测对所有对象类别的形状偏移和置信度。在训练时,首先将这些默认框匹配到真实标签框。 例如,两个默认框匹配到猫和狗,这些框为正,其余视为负。
模型损失是位置损失(例如L1 )和置信损失(例如Softmax)之间的加权和。
官方给出的模型结构如上图所示,SSD 的结构模型基于VGG16改造而成,依旧沿用VGG的前五层卷积层,将原VGG16模型的全连接FC6和FC7层换成两个卷积层,并添加了4个不同kernel的卷积层。从不同的卷积层利用分层特征获取不同大小的对象特征。更为详细的模型结构图如下:
本文频繁提出的default box 和prior box ,而default box是一种概念,prior box则是实际的选取。
训练中一张完整的图片送进网络获得各个卷积层的feature map,对于样本训练来说,需要先将prior box与ground truth匹配,匹配成功说明这个prior box所包含的是个目标,但离完整目标的ground truth还有段距离,训练的目的是保证default box的分类置信度,同时将prior box尽可能回归到ground truth box。
ScratchDet 旨在从零训练检测模型,不需要预训练模型,同时,抛弃以DSOD为首的一些从头训练的模型过度依赖某种网络模型,从而更多的关注模型的灵活性。因此正如文章所说,如果随机初始化利用训练检测器,需要做两个改进:
1)在保证训练收敛的同时,不受任何类型网络的架构限制
2)提供与预先训练的网络一样好的性能(甚至更好)。
SSD基于截断的VGG-16和ResNet-101的Backbone!
为了克服基于ResNet的Backbone在保持强大分类能力的同时进行目标检测的缺点,设计了一个新的架构:
名为RootResNet。
它是对原来SSD检测器中截断的ResNet的改进。去掉了第一个conv层的下采样操作,用一个由3 * 3个卷积滤波器组成的堆栈替换了7个卷积核 (如图D)。Root-ResNet具有丰富的输入,能够从图像中挖掘出更多的局部信息,从而提取出强大的小目标检测特征。
此外,将SSD 四个提取不同尺度的特征图的卷积块,替换为Root-ResNet末端的四个残差块,每个残块由两个分支组成,一个分支是一个含有stride为2的1 * 1卷积层,另一个分支由一个含有stride为2的3 * 3卷积层和一个含有stride为1的3 * 3卷积层组成。每个卷积层的输出通道数设置为128。