深度学习目标检测算法之SSD算法


  • 💂 个人主页:风间琉璃
  • 🤟 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主
  • 💬 如果文章对你有帮助欢迎关注点赞收藏(一键三连)订阅专栏

前言

提示:这里可以添加本文要记录的大概内容:
SSD目标检测论文地址:https://arxiv.org/abs/1512.02325v5
paper: https://www.cs.unc.edu/~wliu/papers/ssd.pdf
slides: http://www.cs.unc.edu/%7Ewliu/papers/ssd_eccv2016_slide.pdf
github(Official): https://github.com/weiliu89/caffe/tree/ssd
video: http://weibo.com/p/2304447a2326da963254c963c97fb05dd3a973
github: https://github.com/zhreshold/mxnet-ssd
github: https://github.com/zhreshold/mxnet-ssd.cpp
github: https://github.com/rykov8/ssd_keras
github: https://github.com/balancap/SSD-Tensorflow
github: https://github.com/amdegroot/ssd.pytorch
github(Caffe): https://github.com/chuanqi305/MobileNet-SSD

目标检测近年来已经取得了重要的进展,主流的算法主要分为两个类型:(1)two-stage方法,例如R-CNN系算法,其主要思路是先通过启发式方法(如selective search)或者CNN网络(如RPN)产生一系列稀疏的候选框,然后对这些候选框进行分类与回归。two-stage方法的优势在于准确度高;(2)one-stage方法,例如Yolo和SSD,其主要思路是均匀地在图片的不同位置进行密集抽样,抽样时可以采用不同尺度和长宽比,然后利用CNN提取特征后直接进行分类与回归。整个过程只需要一步,所以其优势在于速度快。但是,均匀的密集采样的一个重要缺点是训练比较困难,这主要是因为正样本与负样本(背景)极其不均衡(参见Focal Loss,https://arxiv.org/abs/1708.02002),导致模型准确度稍低。


SSD算法原理

1.SSD简介

在这里插入图片描述
Single Shot MultiBox Detector(SSD)算法是 2016 年由 Wei Liu 等人提出的用以实现目标检测任务的网络, 借鉴了 Faster R-CNN 中的锚框机制(SSD 中称为“先验框”)与 YOLO中边界框回归的思想, 在单阶段网络的基础上使用了先验框进行区域建议生成,并且使用了多层特征图分别检测尺度不同的目标, 是单阶段目标检测算法中的经典网络, 该网络由于可同时兼顾检测速度和检测精度,一经提出就受到了大量关注。

SSD 算法的结构如下图所示,它是一个全卷积网络, 由主干网络辅助特征提取网络以及检测网络三个部分构成。
在这里插入图片描述

2.主干网络

主干网络由修改后的 VGG16 构成, 修改之处有:去掉了 VGG16 网络中的Dropout 层和最后一层全连接层;将原始 VGG16 中剩余的两个全连接层换为卷积层。下图为VGG 主干网络图, conv 代表卷积层、 maxpooling 代表最大池化层。其中 conv5-3 及之前的卷积层均与原始 VGG16 相同, conv6、 conv7 两个卷积层对应原始 VGG16 尾部的两个全连接层, Conv6 采用3x3空洞卷积, Conv7采用1x1卷积。
在这里插入图片描述
图中黄色部分、红色框以及红星等代表对应的修改部分。将 conv4_1 前一层的 maxpooling 中池化模式 padding 改为 same, 使得输出大小为38×38, conv4_3 就是多尺度特征中的第一个 38×38 的特征图, 由于该层比较靠前,所以在其后增加了一个 L2 Normalization 层。

3.特征提取网络

在不同特征尺度上预测不同尺度的目标,因此 SSD 算法设计了一个辅助特征提取网络, 用以提取 4 个不同尺度的特征图。 辅助特征提取网络的构成如下图中剩余的四个卷积模块所示,每个模块由一个3x3卷积层和一个1x1卷积层构成, 前两个模块中使用步长为 2 的3x3卷积, 因此得到的输出特征图尺寸与之前不同;后两个模块的卷积操作使用的步长为 1,但也会使输出特征图尺寸缩小

因此,通过辅助特征提取网络可以获得 4 个尺寸不同的特征图。 SSD 算法将主干网络中 conv4-3 和 conv7 输出的尺度大小分别为38x38 、 19x19的特征图以及辅助特征提取网络生成的 4 个不同尺度的特征图共同作为有效特征图,共提取了6个有效特征图, 其大小分别是**(38,38), (19,19), (10,10), (5,5), (3, 3), (1, 1)**, 用于第三部分的检测网络,以此加强网络对不同尺寸物体的检测能力
在这里插入图片描述

4.检测网络

第三部分为检测网络部分,它在网络框架中表示为六条黑色箭头以及最后的Detection 和 NMS 模块。这一部分的主要作用是对有效特征图进行处理,产生检测结果。首先会在每一个有效特征图的每一个像素点上生成固定数量和不同大小的先验框;其次对每一个有效特征图进行卷积操作,得到先验框的位置偏移量和类别预测值;最后送入尾部两个模块中进行先验框过滤,得到最终的输出结果。

检测网络部分是 SSD 算法的主要创新点,它采用多框检测方法即使用六个不同尺寸特征图,并且在每个特征图的每个像素点上生成多个尺寸和长宽比不同的先验框。生成的先验框数量分别为[4,6,6,6,4,4]( 其中在 conv4_3、 conv10_2 和 conv11_2 特征图上默认设置四个先验框, 在 conv7、 conv8_2 和 conv9_2 特征图上默认设置六个先验框,),长宽比取 a r a_r ar={1,2,3,1/2,1/3},尺寸大小由比例 S k S_k Sk以及输入图像尺寸决定。下式为 S k S_k Sk 的计算公式,它代表先验框尺寸与输入图像尺寸比例 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),k\in [1,m] Sk=smin+m1smaxsmin(k1),k[1,m]其中 S m i n S_{min} Smin代表尺寸比例最小值,取 0.2; S m a x S_{max} Smax代表尺寸比例最大值,取 0.9;k指第k +1个特征图,其取值范围为[1,5], 第一个38x38的特征图单独设定,不包含在内。 第一个特征图取 S k S_k Sk = 0.1,由此便可求出每个特征图上先验框尺寸。

下面列出了先验框生成相关信息。
在这里插入图片描述

整个模型产生的先验框总数为 8732, 计算公式如下:38x38x4+ 19x19x6 + 10x10x6 + 5x5x6 + 3x3x4 + 1x1x4 =8732
在这里插入图片描述
在每个预测特征层上的每个位置会有k个先验框(default box),对于每一个先验框会计算c个类别分数和4个坐标偏移量,那么我们就需要(c+4)xk个卷积核进行处理。所以对于一个 m × n m\times n m×n的输出特征层而言,总共有 ( c + 4 ) × k × m × n (c+4)\times k \times m \times n (c+4)×k×m×n个输出值。

注意这个地方区分下跟Faster RCNN的区别,在Faster RCNN生成边界框回归参数的时候,对于每个anchor会生成 4 × c × n u m a n c h o r s 4\times c \times num_{anchors} 4×c×numanchorsanchors个边界框回归参数,即对每个anchor针对预测的类别来生成4个回归参数,在Faster RCNN中,这里是 4 × c 4\times c 4×c,而在SSD中,针对每个default box 只生成4个边界框回归参数,不关注每个default box 是归于哪个类别的。一个是针对类别生成边界回归参数,一个是针对anchor的个数生成的

5.损失函数

SSD 算法将定位分类任务同时进行, 因此在训练时使用损失函数如下式所示, 包含分类损失与位置损失两部分内容。
L = 1 N [ L c o n f ( x , c ) + α L l o c ( x , l , g ) ] L=\frac{1}{N} [L_{conf}(x,c)+\alpha L_{loc}(x,l,g)] L=N1[Lconf(x,c)+αLloc(x,l,g)]N 代表先验框与真实框匹配的数量, L c o n f L_{conf} Lconf 表示分类损失, L l o c L_{loc} Lloc 表示位置损失, x 代表输入图像预测值, c 代表类别置信度预测值, l 代表预测框位置信息, g代表真实框位置信息, α \alpha α为系数,默认取 1。

分类损失使用 Softmax 函数计算:
在这里插入图片描述
位置损失使用 smoothL1计算:
在这里插入图片描述

小结一下,Faster R-CNN存在的问题有对小目标检测效果很差,并且模型大,检测速度较慢。当然 SSD 也有一些缺点, 例如, 虽然使用了多尺度特征图分别检测大小物体, 但是对小目标物体的检测准确率依然不高

结束语

感谢阅读吾之文章,今已至此次旅程之终站 🛬。

吾望斯文献能供尔以宝贵之信息与知识也 🎉。

学习者之途,若藏于天际之星辰🍥,吾等皆当努力熠熠生辉,持续前行。

然而,如若斯文献有益于尔,何不以三连为礼?点赞、留言、收藏 - 此等皆以证尔对作者之支持与鼓励也 💞。

  • 12
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Super.Bear

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值