SSD: Single Shot MultiBox Detector论文笔记

SSD(Single Shot MultiBox Detector)是一种高效的目标检测算法,旨在消除传统检测系统的边界框提案和像素重采样步骤。它通过小卷积核预测类别和边界框位置,并使用多尺度特征图进行检测。训练过程中,采用了匹配策略、损失函数和困难负样本挖掘。此外,数据增强和空洞卷积进一步提高了速度和性能。SSD虽然在小目标检测上表现一般,但因其速度快、结构简单,适合作为基础模型。
摘要由CSDN通过智能技术生成

SSD: Single Shot MultiBox Detector

论文链接: https://arxiv.org/abs/1512.02325

一、Problem Statement

作者认为目前的检测系统都是以下方法的变体:假设bounding box,对每个框重新取样像素或特征,再应用高质量分类器。这些方法对于嵌入式系统来说计算量过大,即使对于高端硬件,对于实时或接近实时的应用来说也太慢。本文提出了第一个基于深层网络的对象检测器,它不会对bounding box假设的像素或特征进行重新取样,但和上面的做法一样精确。

二、Direction

消除bounding box proposal和随后的像素或特征重采样阶段。

  1. 使用一个小的卷积核去预测目标类别和bounding box 位置补偿;
  2. 使用单独的预测器(filters)对不同宽高比的图像进行检测;
  3. 使用这些filters与来自于网络后期的多个feature maps结合,用于多尺度检测;

三、Method

1. 网络结构:

Backbone: VGG-16

可以看到检测是基于多尺度feature maps上的, 其目的是为了能够准确的检测到不同尺度的物体,因为在低层的feature map,感受野比较小,高层的感受野比较大,在不同的feature map进行卷积,可以达到多尺度的目的。作者把一组默认bounding boxes (与Faster R-CNN 提出的anchors一样) 与 feature map cell 关联起来。在每一个feature map 上,我们预测相对于feaure map cell中默认bounding box形状的偏移和预测每个bounding box中实例的每个类别的置信度。也就是说,对于给定位置的K个bounding boxes中的每一个,计算c 个类别的置信度和 4 个相对于原始默认框形状的补偿。所以每个feature map 每一个位置产生 (c+4)k。如果feature map 的大小是 m * n, 则这个feature map 产生 (c+4)kmn 个输出。具体如下图:

2. Training:

(1) Matching strategy
在训练的时候,我们需要决定default boxes 对应于哪一个 ground truth。 我们把与ground truth IoU > 0.5 的 defaut boxes进行匹配。

(2) Training objective

整体的Loss:
L ( x , c , l , g ) = 1 N ( L c o n f ( x , c ) + α L l o c ( x , l , g ) ) L(x,c,l,g)=\frac{1}{N}(L_{conf}(x,c)+\alpha L_{loc}(x,l,g)) L(x,c,l,g)=N1(Lconf(x,c)+αLloc(x,l,g))
N N N是匹配上default boxes的数量。如果 N = 0 N=0 N=0,loss就为0。 l , g l, g l,g 分别代表预测的bounding box 和ground truth。 localization loss 是 Smooth L1 loss (和Faster R-CNN类似)。
L l o c ( x , l , g ) = ∑ i ∈ P o s N ∑ m ∈ { c x , c y , w , h } x i j k s m o o t h L 1 ( l i m − g ^ j m ) g ^ j c x = ( g j c x − d i c x ) / d i w g ^ j c y = ( g j c y − d i c y ) / d i h g ^ j w = l o g ( g j w / d i w ) g ^ j h = ( g j h − d i h ) L_{loc}(x,l,g)= \sum_{i \in Pos}^N\sum_{m \in \{cx,cy,w,h\}} x_{ij}^k smooth_{L1}(l_i^m-\hat{g}_j^m) \\ \hat{g}_j^{cx}=(g_j^{cx}-d_i^{cx})/d_i^w \quad \hat{g}_j^{cy}=(g_j^{cy}-d_i^{cy})/d_i^h \\ \hat{g}_j^{w}=log(g_j^{w}/d_i^{w})\quad \hat{g}_j^{h}=(g_j^{h}-d_i^{h}) Lloc(x,l,g)=iPosNm{cx,cy,w,h}xijksmoothL1(limg^jm)g^jcx=(gjcxdicx)/diwg^jcy=(gjcydicy)/dihg^jw=log(gjw/diw)g^jh=(gjhdih)
confidence loss是softmax loss
L c o n f ( x , c ) = − ∑ i ∈ P o s N x i j p l o g ( c ^ i p ) − ∑ i ∈ N e g l o g ( c ^ i 0 ) w h e r e c ^ i p = e x p ( c i p ) ∑ p e x p ( c i p ) 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) \quad where \quad \hat{c}_i^p=\frac{exp(c_i^p)}{\sum_pexp(c_i^p)} Lconf(x,c)=iPosNxijplog(c^ip)iNeglog(c^i0)wherec^ip=pexp(cip)exp(cip)
(3) Choosing scales and aspect ratios for default boxes
假设使用m个不同大小的feature maps进行预测,default boxes 的尺度计算如下:
s k = s m i n + s m a x − s m i n m − 1 ( k − 1 ) , k ∈ [ 1 , m ] s_k=s_{min}+\frac{s_{max}-s_{min}}{m-1}(k-1), \quad k \in [1, m] sk=smin+m1smaxsmin(k1),k[1,m]
s m i n = 0.2 , s m a x = 0.9 s_{min}=0.2, s_{max}=0.9 smin=0.2,smax=0.9代表最低的网络层scale 为0.2 和最高的网络层 scale 为0.9。同时,对default box使用不同的比例 a r ∈ { 1 , 2 , 3 , 1 2 , 1 3 } a_r \in \{1,2,3,\frac{1}{2}, \frac{1}{3}\} ar{1,2,3,21,31}。所以每一个default box的长和宽可以通过下式计算:
w k a = s k a r h k a = s k / a r w_k^a=s_k\sqrt{a_r} \quad h_k^a=s_k/\sqrt{a_r} wka=skar hka=sk/ar
每个feature map上的location 有6个 default boxes。每个default box的中心为: ( i + 0.5 ∣ f k ∣ , j + 0.5 ∣ f k ∣ ) (\frac{i+0.5}{|f_k|}, \frac{j+0.5}{|f_k|}) (fki+0.5,fkj+0.5)

(4) Hard negative mining
大多数default boxes是negative的,这就会导致imbalance 的问题。因此,作者对每个default box的置信度进行排序,选择最高的那一些进行训练。

(5) Data augmentation
能够对不同的输入大小和形状更加的鲁棒,做了如下的随机采样:
1. 使用整个输入的图像
2. 采样一个patch,使得与目标的最小IoU为:0.1,0.3,0.5,0.7,或者0.9
3. 随机采用这些patch
翻转等等数据增强的方式也采用了。

(6) Atrous
采用了空洞下采样,提升了20%的速度。Atrous algorithm空洞卷积可以在其他论文了解。

四、Conclusion

SSD 对相似目标类别分类比较差,可能是因为对多个类别共享了locations信息,且SSD对bounding box的大小很敏感,也就是说对小目标识别不太好。这是不惊讶的,因为在非常高的网络层里可能不存在小目标的信息。提升输入图片的大小能有助于检测小目标。但是简单的SSD结构,比当时的YOLO快,精度比Faster R-CNN低,根据实际的项目需求选择把。但是这是一个很好的baseline。

Reference

  1. https://blog.csdn.net/denghecsdn/article/details/77429978
  2. https://blog.csdn.net/thisiszdy/article/details/89576389
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值