目标检测-SSD理解

目标检测-SSD理解

1. 前言

​ 目标检测随着深度学习的应用取得了很重要的进展,目前主要的算法主要分为两类,(1) two-stage方法,如R-CNN算法,主要思路是先通过启发式方法(selective search)或者CNN网络产生一系列的候选框,然后对候选框利用回归和分类,该方法的优势是准确率高;(2)one-stage方法,如yolo和SSD,主要思路是均匀的在图片的不同位置进行密集抽样,抽样时可以采用不同的尺度和长宽比,然后利用CNN提取特征后直接进行回归和分类,整个过程只需要一步,其优势是速度快,缺点是训练困难,主要是因为正样本和负样本极不均衡,导致模型准确度稍低,不同算法的性能如下图.
目标检测-SSD理解_第1张图片
​ 下图为不同算法的基本框图
目标检测-SSD理解_第2张图片

2. 网络结构

​ SSD网络结构如下图所示,利用多尺度特征图进行目标检测,并依次进行边界框回归和分类判断。不同层次的特征图表示不同的语义信息,低层次的特征图代表低层次的语义信息(更多细节,如图像的边),可检测到小目标物体,高层次的特征图代表更高层的语义信息,可检测到大目标物体。因此利用SSD可以检测出小目标物体,实现代码可参考之前一篇关于SSD模型pytorch实现分析的博客。

​ SSD网络使用了6个不同大小的特征图,利用VGG16网络结构的Conv5_3 层(第一特征层),同时将FC6和FC7变成两个卷积层,FC7(conv7)层的输出作为第二个特征层,后面接多个卷积层得到第三到第六个特征层(Conv8_2、Conv9_2、Conv10_2、Conv11_2),每个网络都是利用 1 ∗ 1 1*1 11 3 ∗ 3 3*3 33卷积。与YOLO相比,YOLO网络只使用了一层特征来进行目标检测。
目标检测-SSD理解_第3张图片

​ 下图为输入图像,在每层中的特征大小,以及6个特征图进行检测和分类的default boxes数量统计。
目标检测-SSD理解_第4张图片

​ 下表为SSD300每个stage特征图输出图像大小、Detector和classifier输出特征大小

​ 表1

stage name Output size Detector classifier def.boxes num
1 Conv4_3 38 ∗ 38 ∗ 512 38*38*512 3838512 38 ∗ 38 ∗ 16 38*38*16 383816 38 ∗ 38 ∗ 84 38*38*84 383884 4
2 FC7 19 ∗ 19 ∗ 1024 19*19*1024 19191024 19 ∗ 19 ∗ 24 19*19*24 191924 19 ∗ 19 ∗ 126 19*19*126 1919126 6
3 Conv8_2 10 ∗ 10 ∗ 512 10*10*512 1010512 10 ∗ 10 ∗ 24 10*10*24 101024 10 ∗ 10 ∗ 126 10*10*126 1010126 6
4 Conv9_2 5 ∗ 5 ∗ 256 5*5*256 55256 5 ∗ 5 ∗ 24 5*5*24 5524 5 ∗ 5 ∗ 126 5*5*126 55126 6
5 Conv10_2 3 ∗ 3 ∗ 256 3*3*256 33256 3 ∗ 3 ∗ 16 3*3*16 3316 3 ∗ 3 ∗ 84 3*3*84 3384 4
6 Conv1_2 1 ∗ 1 ∗ 256 1*1*256 11256 1 ∗ 1 ∗ 16 1*1*16 1116 1 ∗ 1 ∗ 84 1*1*84 1184 4

​ 如下图为stage 4中得到特征图后的处理,其中localization表示进行边界框回归,其中24表示 6 ∗ 4 6*4 64,每个特征点有6个box,每个box使用4个值表示box位置,confidence表示分类判断, 126 = 6 ∗ 21 126=6*21 126=621,每个box输出21个输出表示voc07的21个分类.
目标检测-SSD理解_第5张图片

box位置回归和分类处理如下,以stage 4中的特征为实例说明.
目标检测-SSD理解_第6张图片

3. default boxes生成

​ 类似于Faster-RCNN中的Anchor,本文中起名为default boxes,def. boxes的选择直接决定了检测的性能。SSD中根据每个stage的Feature Map的大小,按照固定的Scale和Radio生成Default Boxes。SSD的default boxes的边长宽度为 w k a = s k a r w _ { k } ^ { a } = s _ { k } \sqrt { a _ { r } } wka=skar 和高度为 h k a = s k / a r h _ { k } ^ { a } = s _ { k } / \sqrt { a _ { r } } hka=sk/ar ,其中 a r a _ { r } ar为高宽比, a r ∈ { 1 , 2 , 3 , 1 2 , 1 3 } a _ { r } \in\left\{ 1,2,3 , \frac { 1 } { 2 } , \frac { 1 } { 3 } \right\} ar{1,2,3,21,31},对高宽比为1时为正方形box,还有一个正方形box,边长为 s k ′ = s k S k + 1 s _ { k } ^ { \prime } = \sqrt { s _ { k } S _ { k + 1 } } sk=skSk+1 ,每个box的中心坐标为 ( i + 0.5 ∣ f k ∣ , j + 0.5 ∣ f k ∣ ) \left( \frac { i + 0.5 } { \left| f _ { k } \right| } , \frac { j + 0.5 } { \left| f _ { k } \right| } \right) (fki+0.5,fkj+0.5),其中 ∣ f k ∣ |f_k| fk表示当前特层的正方形的宽度,上面提到的 s k s_k sk按照下面的公式计算得到,然后乘以对应的输入图像宽度。
s k = s min ⁡ + s max ⁡ − s min ⁡ 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_{min}=0.2 smin=0.2, s m a x = 0.9 s_{max}=0.9 smax=0.9,下图中的中间框为default boxes,使用的缩放比例为2,1/2;如表1,不同的stage使用的default box数量不同,其中为4的未使用3和1/3的长宽比。实际使用过程中根据实际进行调节boxes的大小。
目标检测-SSD理解_第7张图片
目标检测-SSD理解_第8张图片
目标检测-SSD理解_第9张图片

4. 训练策略

4.1. 正负样本

​ 给定输入图像以及每个物体的Ground Truth,首先找到每个Ground True box对应的default box中IOU最大的最为正样本.然后,在剩下的default box中寻找与Ground Truth 的IOU大于0.5的default box作为正样本.一个Ground Truth可能对应多个正样本default box.其他的default box作为负样本.下图中给定的输入图像和Ground Truth,分别在两个不同尺度(feature map大大小为 8 ∗ 8 , 4 ∗ 4 8*8,4*4 88,44)下的匹配情况,有两个default box与猫匹配( 8 ∗ 8 8*8 88),一个default box与狗匹配( 4 ∗ 4 4*4 44).
目标检测-SSD理解_第10张图片

​ 通过上述放大得到的正样本数量相对负样本数量会少很多,为了保证样本尽量平衡,SSD采用了hard nagative mining,即对负样本进行抽样,抽样时按照置信度误差(预测背景的置信度越小,误差越大)进行奖序排列,选取误差较大的top-k作为训练的负样本,保证正负样本比例接近1:3.

4.2. 目标函数

​ 目标函数为训练过程中的优化标准,目标函数也称损失函数,主要包括位置误差(localization loss,loc) 与置信度误差(confidence loss,conf,分类损失)的加权和,定义 x i j p = { 1 , 0 } x_{ij}^p=\{1,0\} xijp={1,0}为第i个默认框和对应的第j个Ground Truth box,相应的类别为p.目标函数定义为:
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 } \left( L _ { c o n f } ( x , c ) + \alpha L _ { l o c } ( x , l , g ) \right) L(x,c,l,g)=N1(Lconf(x,c)+αLloc(x,l,g))
其中,N为匹配的默认框.如果N0,loss为0. L c o n f L_{conf} Lconf为预测框 l l l和Ground Truth g g g的Smooth L1 loss, α \alpha α值通过cross validation设置为1.
L 1 ( x ) = { 0.5 x 2  if  ∣ x ∣ < 1 ∣ x ∣ − 0.5  otherwise  _ { L _ { 1 } } ( x ) = \left\{ \begin{array} { l l } { 0.5 x ^ { 2 } } & { \text { if } | x | < 1 } \\ { | x | - 0.5 } & { \text { otherwise } } \end{array} \right. L1(x)={0.5x2x0.5 if x<1 otherwise 
L l o c L_{loc} Lloc定义如下:
L l o c ( x , l , g ) = ∑ i ∈ P o s m ∈ { c x , c y , w , h } N x i j k smooth ⁡ L 1 ( l i m − g ^ j m ) L _ { l o c } ( x , l , g ) = \sum _ { i \in P o s m \in \{ c x , c y , w , h \} } ^ { N } x _ { i j } ^ { k } \operatorname { smooth } _ { \mathrm { L } 1 } \left( l _ { i } ^ { m } - \hat { g } _ { j } ^ { m } \right) Lloc(x,l,g)=iPosm{cx,cy,w,h}NxijksmoothL1(limg^jm)

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 \hat { g } _ { j } ^ { c x } = \left( g _ { j } ^ { c x } - d _ { i } ^ { c x } \right) / d _ { i } ^ { w } \quad \hat { g } _ { j } ^ { c y } = \left( g _ { j } ^ { c y } - d _ { i } ^ { c y } \right) / d _ { i } ^ { h } g^jcx=(gjcxdicx)/diwg^jcy=(gjcydicy)/dih

g ^ j w = log ⁡ ( g j w d i w ) g ^ j h = log ⁡ ( g j h d i h ) \hat { g } _ { j } ^ { w } = \log \left( \frac { g _ { j } ^ { w } } { d _ { i } ^ { w } } \right) \quad \hat { g } _ { j } ^ { h } = \log \left( \frac { g _ { j } ^ { h } } { d _ { i } ^ { h } } \right) g^jw=log(diwgjw)g^jh=log(dihgjh)

其中, l l l为预测框, g g g为Ground Truth. ( c x , c y ) (cx,cy) (cx,cy)为补偿后的默认框 d d d的中心, ( w , h ) (w,h) (w,h)为默认框的宽和高.

L c o n f L_{conf} Lconf定义为多类别softmax loss,公式如下:
L c o n f ( x , c ) = − ∑ i ∈ P o s N x i j p log ⁡ ( c ^ i p ) − ∑ i ∈ N e g log ⁡ ( c ^ i 0 )  where  c ^ i p = exp ⁡ ( c i p ) ∑ p exp ⁡ ( c i p ) L _ { c o n f } ( x , c ) = - \sum _ { i \in P o s } ^ { N } x _ { i j } ^ { p } \log \left( \hat { c } _ { i } ^ { p } \right) - \sum _ { i \in N e g } \log \left( \hat { c } _ { i } ^ { 0 } \right) \quad \text { where } \quad \hat { c } _ { i } ^ { p } = \frac { \exp \left( c _ { i } ^ { p } \right) } { \sum _ { p } \exp \left( c _ { i } ^ { p } \right) } Lconf(x,c)=iPosNxijplog(c^ip)iNeglog(c^i0) where c^ip=pexp(cip)exp(cip)

4.3. 数据增强

​ 采用数据扩增(data Augmentation)可提升SSD性能,主要采用的技术有水平翻转(horizontal flip),随机裁剪加颜色扭曲(random crop & color distortion),随机采样块域(Randomly sample a patch)(获取小目标训练样本),如下图所示:
目标检测-SSD理解_第11张图片

目标检测-SSD理解_第12张图片

5.性能评估

​ SSD在VOC2007,VOC2012和COCO数据集上的性能如下表所示.SSD512性能好一些,加*的表示使用了数据增强技术,创建了小样本,来提升SSD在小目标上的检测效果,性能会提升.
目标检测-SSD理解_第13张图片

​ SSD与其它检测算法对比结果(VOC2007)如下,SSD与Faster-RCNN有同样的准确度,并且与YOLO具有同样快的检测速度.
目标检测-SSD理解_第14张图片

​ 文中对使用的各种Trick做了分析,下表为各种track组合对SSD性能的影响,从表中可以得出如下结论:

​ 1).数据增强技术对提升mAP作用很大;

​ 2)使用不同长宽比的先验框可以得到更好的结果;
目标检测-SSD理解_第15张图片

采用多尺度的特征图用于检测至关重要,如下表:
目标检测-SSD理解_第16张图片

6. 总结

​ 本文就SSD实现过程中的几个关键问题进行了总结,主要包括网络模型,default boxes生成,训练策略等;SSD在YOLO的基础上主要进行了三点改进:多尺度特征图,利用卷积进行检测,设置先验框.多尺度检测中利用前几层的卷积进行检测,对小目标检测效果要好一些.

7. 参考

1.https://blog.csdn.net/xiaohu2022/article/details/79833786

2.https://jizhi.im/blog/post/gpu-p6

3.https://zhuanlan.zhihu.com/p/25100992

4.https://zhuanlan.zhihu.com/p/24954433

5.deepsystem.ai

6.https://www.jianshu.com/p/0903b160d554

7.https://blog.csdn.net/neu_chenguangq/article/details/79057655

8.SSD slide

你可能感兴趣的:(深度学习,目标检测/目标识别)