深度学习之目标检测SSD

SSD(Single Shot MultiBox Detector)将边界框的输出空间离散为不同层特征图上的一组不同尺寸和长宽比的默认框。SSD discretizes the output space of bounding boxes into a set of default boxes over different aspect ratios and scales per feature map location. 在预测时对每个默认框中的每个存在对象类别打分,并对框进行调整以更好的匹配对象的形状;组合不同分辨率的多个特征图的预测结果,适用于处理多种尺寸的对象。SSD相对于需要region proposals的方法简单,因为它完全消除了proposals生成和后续的像素/特征重采样的阶段,并将所有计算封装在一个网络中,精度良好、速度更快且为训练和推理提供了统一的框架。

目前目标检测的主要算法有:

(1)two-stage方法,如R-CNN系列算法,主要思路是先通过启发式方法(selective search)或者CNN网络(RPN)产生一系列稀疏的region proposals,然后对这些候选框进行分类与回归,最后将结果综合起来(NMS),这种方法的优点是准确率高。

(2)one-stage方法,如YOLO和SSD,主要思想是均匀地在图片/特征图不同位置进行密集采样,采样时可以采用不同尺度和长宽比,然后用CNN提取的特征直接预测对象的类别和位置信息,整个过程只需要一步,速度很快,但由于均匀密集采样的训练比较困难,正负样本数极不均衡(参见Focal Loss,https://arxiv.org/abs/1708.02002),模型的准确率较低。

算法比较:

一、The Single Shot Detector(SSD)

Single Shot表示SSD算法属于one-stage方法,MultiBox为多框预测。SSD算法在准确性和速度上比YOLO好很多,直接在CNN进行检测,而YOLO在全连接层之后检测。

SSD的核心是在各个特征图上使用小卷积核,预测固定的一系列默认框的类别分数和位置偏移。为了实现高检测精度,根据不同尺寸的特征图生成不同尺度的预测:在(较靠前的)大特征图上检测小物体,在(较靠后的)小特征图上检测大物体,并通过宽高比明确分离预测。这样的设计使得SSD即使输入低分辨率图像也能简单地实现端到端的训练并达到较高的精度,进一步提高速度vs精度trade-off。

Default box:特征图的每个cell都有一系列固定大小的虚线box,如下图的4个(类似Faster R-CNN中的Anchor box)。

Prior box:实际选择的default box,每个特征图不是所有默认框都要,如有的特征图取4个,有的取6个。

二、模型

SSD的base net是VGG16,将其最后两个全连接层改成卷积层,并在后面增加4个卷积层,采用stride=2的卷积或者Avg pooling逐渐减小特征图的尺寸。对网络中5个(base net+4)不同的特征图分别用两个不同的3*3的卷积核进行卷积,一个输出分类的置信度,每个默认框生成21个类别置信度;一个输出回归的位置信息,每个默认框生成4个坐标值。此外这5个特征图还经过PriorBox层生成不同尺寸和长宽比的先验框,每个特征图的默认框数量是给定的,总数为8732个。将前面3个计算结果分别合并传给loss层,对bbox中存在的目标类别进行评分,使用非极大值抑制得到最终结果。SSD可以在一定程度上克服YOLO算法难以检测小/群目标、定位不准的缺点。

SSD和YOLOv1

 

1、多尺度特征图检测:在基础网络末尾添加几个卷积层,预测不同尺度和宽高比对默认框的偏移及其相关置信度。

2、使用卷积进行检测:对于具有p个通道的m*n的特征图,使用3*3*p的卷积核得到检测值。

3、默认框及其宽高比:SSD借鉴了Faster R-CNN的anchor思想,每个特征图cell设置不同尺寸、长宽比的先验框,预测的边界框以这些先验框为基准,在一定程度上减少训练难度。对于在给定位置的k个框中的每个框,计算c类分数和相对于原始默认框的4个偏移量,则特征图每个位置需要(c+4)*k个filters,共产生(c+4)*kmn个输出。在多个特征图中使用不同的默认框形状,可以有效地离散可能的输出框形状空间。

 

三、训练

训练SSD和训练使用region proposal的典型分类器的关键区别在于,真实标签信息需要被指定到一系列固定检测器的输出集合。一旦确定了该指定,则端到端地应用损失函数和反向传播,训练还包括选择默认框、尺寸集合、hard negative mining以及数据增强策略。

1、匹配策略:训练时要确定哪些默认框与GT相关并相应训练网络,开始时对于每个GT 框,从不同位置、宽高比和尺寸的默认框中选择,将具有最佳jaccard overlap的默认框与GT框匹配。然后将重叠度大于阈值(0.5)的默认框与任意GT框进行匹配,添加这些匹配简化了学习问题,使得有多个重叠默认框时网络预测获得高置信度,而不是要求选择重叠度最大的那个。

2、损失函数为位置误差loc与置信度误差conf的加权和,令N为匹配的默认框数,N=0时没有损失。x_{ij}^{p} \in \left \{ 1,0 \right \}为指示函数,表示第i个默认框与第j个GT框匹配,类别为p。由匹配策略可知\sum_{i}x_{ij}^{p} \geqslant 1。位置损失为预测框l与GT框g之间的Smooth L1 loss:

       L(x,c,l,g)=\frac{1}{N}(L_{conf}(x,c)+\alpha L_{loc}(x,l,g))

       L_{loc}(x,l,g)=\sum _{i \in Pos}^{N}\sum_{m \in \left \{ cx,cy,w,h \right \}}x_{ij}^{k}\mathrm{smooth}_{L1}(l_{i}^{m}-\hat{g}_{j}^{m})

       \mathrm{smooth}_{L1}(x)=\left\{\begin{matrix} 0.5x^{2} & \mathrm{if }\; \left | x \right |<1\\ \left | x \right |-0.5 & \mathrm{otherwise} \end{matrix}\right.

       \hat{g}_{j}^{cx}=(g_{j}^{cx}-d_{i}^{cx})/d_{i}^{w}

       \hat{g}_{j}^{cy}=(g_{j}^{cy}-d_{i}^{cy})/d_{i}^{h}

       \hat{g}_{j}^{w}=\log (g_{j}^{w}/d_{i}^{w})​​​​​​​

       \hat{g}_{j}^{h}=\log (g_{j}^{h}/d_{i}^{h})​​​​​​​​​​​​​​

由可知位置损失仅对正样本进行计算。注意要先对GT的g编码得到 \hat{g},因为预测值l也是编码值,若设置variance_encoded_in_target = True,编码时要加上variance,置信损失为多类别置信c的softmax loss,由交叉验证将权重ɑ设为1:

       \hat{g}_{j}^{cx}=(g_{j}^{cx}-d_{i}^{cx})/d_{i}^{w}/\mathrm{variance}[0]

       \hat{g}_{j}^{cy}=(g_{j}^{cy}-d_{i}^{cy})/d_{i}^{h}/\mathrm{variance}[1]​​​​​​​

       \hat{g}_{j}^{w}=\log (g_{j}^{w}/d_{i}^{w})/\mathrm{variance}[2]​​​​​​​

       \hat{g}_{j}^{h}=\log (g_{j}^{h}/d_{i}^{h})/\mathrm{variance}[3]​​​​​​​​​​​​​​

       L_{conf}(x,c)=-\sum _{i \in Pos}^{N}x_{ij}^{p}\log (\hat{c}_{i}^{p})-\sum_{i\in Neg}\log (\hat{c}_{i}^{0})

       \hat{c}_{i}^{p}=\frac{\exp(c_{i}^{p})}{\sum _{p}\exp(c_{i}^{p})}

3、选择默认框的尺寸和长宽比

一般CNN的层次越深,特征图的尺寸就越小,这样不仅可以减少计算与内存的需求,还提供一定程度上的平移和尺寸不变性。为了处理不同尺寸的物体,Overfeat、SPP-net等将图像转换成不同的尺寸,使用独立的CNN处理后再将结果进行综合。实际上使用同一个网络不同层次的特征图也可以达到相同的效果,同时在所有物体尺寸中共享参数。ParseNet表明添加从特征图池化的global context有助于平滑分割结果。受这些方法的启发,论文中同时使用lower & upper feature maps进行检测,假设使用m个特征图做预测,每个特征图的默认框比例计算如下:

       s_{k}=s_{min}+\frac{s_{max}-s_{min}}{m-1}(k-1),\; \; k \in [1, m]

论文中 s_{min}=0.2s_{max}=0.9 表示最底层和最高层的scale,默认框的长宽比为 a_{r}\in \left \{ 1,2,3,1/2,1/3 \right \},则默认框的长和宽分别为:w_{k}^{a}=s_{k}\sqrt{a_{r}}h_{k}^{a}=s_{k}/\sqrt{a_{r}},并额外增加一个长宽比为1,尺寸为的默认框。因此特征图的每个cell共有6个默认框(但实现时conv4_3,conv10_2和conv11_2仅使用4个默认框,不使用长宽比为3, 1/3的默认框)。默认框的中心为cell的中心,即 (\frac{i+0.5}{\left |f_{k} \right |},\frac{j+0.5}{\left |f_{k} \right |}),其中 \left | f_{k} \right | 为第k个特征图的大小。SSD共有38*38*4+19*19*6+10*10*6+5*5*6+3*3*4+1*1*4=8732个prior框,表明SSD本质上是密集采样。

4、Hard negative mining

在匹配步骤后发现大多数默认框都是负样本,使得正负样本数量极不均衡。因此对负样本的置信损失进行排序,选择最高的一些默认框(worst misclassified FPs),使正负样本的比值最多为1:3,以替代使用所有负样本的方法,这样可以更快的优化以及更稳定的训练。

5、数据增强

为了使模型对各种大小和形状的输入对象更加健壮,每个训练图像通过以下选项之一随机采样:

  • 使用整个原始输入图像;
  • 采样一个片段patch,与物体最小的jaccard重叠为0.1,0.3,0.5,0.7或0.9;
  • 随机采样一个片段。

每个采样片段的大小为原始图像大小的[0.1,1],长宽比在1/2和2之间。如果GT框中心在采样片段内,则保留GT重叠的部分。在上述采样步骤后,将每个采样片段resize为固定的大小,并以0.5的随机概率进行水平翻转。

 

四、实验结果

Base network:VGG16在ILSVRC CLS-LOC数据集上预训练,将其全连接层fc6、fc7转换为3*3的卷积层conv6和1*1的卷积层conv7,同时将pool5由2*2-s2更改为3*3-s1(减小特征图尺寸),为了配合这种变化,conv6采用atrous带孔/dilation 膨胀卷积,在不增加参数与模型复杂度的条件下指数级扩大卷积的视野,扩张率(dilation rate)表示扩张的大小,如下图所示,(a)为普通的3*3卷积,感受野为3*3;(b)扩张率=2、扩张1格时,感受野为7*7;(c)扩张3格时,感受野为15*15,特征更加稀疏。conv6采用的是3*3、dilation rate=6的膨胀卷积。

移除所有dropout层和fc8层,使用SGD对这个模型进行fine-tuning,初始学习率为 10^{-3},动量项0.9,权值衰减0.0005,batch size为32,40k个epoch后将学习率设为 10^{-4} 和 10^{-5} 并分别训练10k个epoch。

SSD300使用conv4_3(默认框scale=0.1),conv7,conv8_2,conv9_2,conv10_2,conv11_2作为检测所用的特征图,它们的大小分别为(38, 38), (19, 19), (10, 10), (5, 5), (3, 3), (1, 1),使用xavier方法初始化所有新添加的卷积层参数。conv4_3,conv10_2和conv11_2只使用4种默认框的尺寸,不使用长宽比为3, 1/3的默认框,其他层使用6种默认框。由于conv4_3层比较靠前且尺寸较大38*38,因此使用ParseNet的L2归一化技术将特征图每个位置的feature norm scale到20,并在反向传播中学习这个scale。L2 norm可以确保本层与后面的检测层差异不是很大,仅对每个像素在channel维度归一化,而BN层是在三个维度[batch_size, width, height]上进行归一化。归一化后设置一个可训练的缩放变量gamma,TensorFlow的实现方式如下:

# l2norm (not batch norm, spatial normalization)
def l2norm(x, scale, trainable=True, scope=”L2Normalization”):
    n_channels = x.get_shape().as_list()[-1]
    l2_norm = tf.nn.l2_normalize(x, [3], epsilon=1e-12)
    with tf.variable_scope(scope):
        gamma = tf.get_variable(“gamma”, shape=[n_channels, ], dtype=tf.float32,
                                initializer=tf.constant_initializer(scale),
                                trainable=trainable)
        return l2_norm*gamma

 

性能评估

SSD与Faster R-CNN具有相似的准确度,可以高质量地检测各种对象类别(large white area),召回率较高且定位误差较少,并与YOLO一样具有较快的检测速度。但SSD对相似对象类别(尤其是动物)有更多的混淆,部分原因在于多个类别分享了位置。SSD300和SSD500除了输入尺寸外其他相同,较大的输入得到更高的mAP。SSD对边界框尺寸非常敏感,对较小的物体性能较差,因为小物体在最后层可能没有任何信息保留下来,对大物体表现很好,且对于不同的对象宽高比非常健壮。

不同trick组合对SSD的性能影响:数据增强对mAP的提升很大,使用不同长宽比的先验框可以得到更好的结果。采用多尺度的特征图用于检测也很重要。

 

参考资料

https://arxiv.org/pdf/1512.02325.pdf

https://www.cnblogs.com/xuanyuyt/p/7447111.html

https://cloud.tencent.com/developer/article/1052779

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值