前面几篇文章我们讲解了YOLO系类的论文,今天抽空写下SSD算法。对YOLO有兴趣的小伙伴们可以一步到我前面的几篇博文:

  • YOLOv1目标检测算法——通俗易懂的解析
  • YOLOv2目标检测算法——通俗易懂的解析
  • YOLOv3目标检测算法——通俗易懂的解析
  • YOLOv4目标检测算法——通俗易懂的解析
  • YOLOv5目标检测算法——通俗易懂的解析

  SSD论文地址:https://arxiv.org/abs/1512.02325v5

  SSD网络是在2016年ECCV上发表的论文,超越了当时地表最强的目标检测算法Faster RCNN性能,现在看来时间有点久远了,但是SSD还是很经典的算法,SSD是一个单阶段的目标检测算法,里面的有些思路还是值得我们学习的,很多公司在面试的时候也会问到SSD算法,所以还是有必要的学习一下的。
  当时流行的Faster RCNN是一个双阶段的目标检测网络,存在着不少问题:

  • 小目标检测效果很差(因为Faster RCNN只在一个特征层上进行检测,不适合检测小目标。所以能不能直接在低层次特征上进行预测?看SSD)
  • 模型很大,检测速度慢(主要是因为分两步走)

  先来看下SSD的整体框图,输入图像必须是300×300300\times300300×300,然后输入到VGG16网络(后半部分网络重新设计了)through表示贯穿到VGG16Conv5_3,前半部分网络只用到了Con5_3_layer,什么意思呢,我们看下面的VGG网络,就是对应到第五层网络的第三个卷积层 ,Conv4_3SSD输出的第一个卷积层,论文中还将Maxpooling5(Conv5_3后面的池化核)的池化核大小从原本的2×22\times22×2,步距为2调整为3×33\times33×3大小,步距为1,所以经过此操作之后,Conv5_3的输出特征层的大小时不会发生变化的。在此之后会添加其他的卷积层,得到其他的预测特征层,图中的FC6就是对应VGG16中的第一个全连接,FC7对应VGG16中的第二个全连接层,接下来通过一些列的卷积层得到输出特征3,4,5,6,总共有6层特征输出,前面的低层特征输出用于检测尺寸比较小的目标,后面的高层输出特征负责检测尺寸较大的目标。在前面讲YOLOv3的时候我们对此已经解释过了,思想都是一样的。
  注意:图中总共有6个输出特征层(Extra Feature Layers)


  SSD中使用default box来匹配目标。那么什么是default box呢,实际上就是anchor box,原理一样,这里的default box将他们放在不同的特征层上面。default box的比例和尺度怎么设定呢?以下是原论文给的公式:

  很多大神实现的SSD算法用的公式并不是上面的公式,简单了解下即可。我们直接给出每个scale所对应的aspect的比例。
scale=[(21,45),(45,99),(99,153),(153,207),(207,261),(261,315)]aspect=[(1,2,0.5),(1,2,0.5,3,1./3),(1,2,0.5,3,1./3),(1,2,0.5,3,1./3),(1,2,0.5),(1,2,0.5)]scale=[(21,45),(45,99),(99,153),(153,207),(207,261),(261,315)]\\ aspect=[(1,2,0.5),(1,2,0.5,3,1./3),(1,2,0.5,3,1./3),(1,2,0.5,3,1./3),(1,2,0.5),(1,2,0.5)] scale=[(21,45),(45,99),(99,153),(153,207),(207,261),(261,315)]aspect=[(1,2,0.5),(1,2,0.5,3,1./3),(1,2,0.5,3,1./3),(1,2,0.5,3,1./3),(1,2,0.5),(1,2,0.5)]
  scale表示目标尺度,aspect表示每个尺度所对应的一系列比例,初看这些参数可能一脸懵逼,为什么每个scale会有两个值?我们先来看下原文怎么解释的:对于比例为1的情况,在每个特征层上会额外的添加一个default boxdefault boxscale是(sksk+1)\sqrt(s_{k}s_{k+1})(​sk​sk+1​),其中,sks_{k}sk​对应的就是scale中的第一个元素,sk+1s_{k+1}sk+1​就是scale中的第二个元素,也是下一个预测特征层的sks_{k}sk​。


  关于比例信息,我们看下面的一段文字,对于conv4_3conv10_2conv11_2我们都会使用四个default box,对于其他的预测特征层会使用六个default box。观察上面的网络模型图,可以发现,也就是第一个,和倒数第一个,倒数第二个预测特征层是使用4个default box,其他的都是6个。
  根据刚才对原文的解释,我们来看下这几组数据到底怎么看。先来看下第一个预测特征层scale=(21,45)的情况,scale为21的时候,会有aspect=(1:1,2:1,1:2)三个比例,对于(21×45)\sqrt(21\times45)(​21×45)的scale只有一个aspect=(1:1)的比例,其他的以此类推。根据上面的default的生成方式我们可以计算总共有default box的数量:
38×38×4+19×19×6+10×10×6+5×5×6+3×3×4+1×1×4=873238\times38\times4 +19\times19\times6 +10\times10\times6 +5\times5\times6 +3\times3\times4 +1\times1\times4=8732 38×38×4+19×19×6+10×10×6+5×5×6+3×3×4+1×1×4=8732


  看了上面的default box的设计,是不是感觉跟anchor的设计有异曲同工之处,其实他俩就是一个东西,只不过SSD的尺寸大小是人为设计的,而YOLOanchor是聚类学习得到的。接下来我们再来看下预测器的设计与实现,怎么在6个输出特征层上进行预测?依旧先看下原文的解释:
  对于m×n×pm\times n\times pm×n×p的预测特征层,直接使用卷积核大小为3×3×p3\times3\times p3×3×p,channel为p的卷积核实现,通过这个卷积层来生成概率分数和相对default box的坐标偏移量,即边界框回归参数。

  我们刚才讲在每个特征层上使用3×33\times33×3的卷积核进行预测,那么我们到底需要使用多少个卷积核呢?看下面论文中的解释,我们知道在每个预测特层上的每个位置会有kdefault box,对每个default box会计算c个类别分数和4个坐标偏移量,那么我们就需要(c+4)×k(c+4)\times k(c+4)×k个卷积核进行处理,所以对于一个m×nm\times nm×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×c4\times c4×c个边界框回归参数,即对每个anchor分别去生成针对每个目标类别的边界框回归参数,在Faster RCNN中,这里是4×c4\times c4×c,在SSD中,针对每个default box 只生成4个边界框回归参数,不关注每个default是归于哪个类别。


  下面我们再来介绍下训练阶段正负样本的选取,看到这个是不是发现SSD算法和YOLO系列的有点相似。我么依旧先看下原论文怎么解释的,论文中给了两个匹配准则:

  • 对于每个ground truth去匹配跟他IoUIoUIoU最大的的default box
  • 对于任意一个default box,它只要与任意一个ground truth的IoUIoUIoU的大于0.5,也认为他是正样本。

  匹配准则都大同小异,跟YOLOFaster RCNN 都很类似,理解一个,其他的基本上都能理解。


  下面我们再来看下负样本的选取,正样本选取完之后,剩下的样本都可以归为负样本,但是剩下的负样本并不是都用来计算,上面我们计算过总共生成了8732个default box,但是训练的时候default box匹配到的ground truth有很少,即正样本很少,导致正负样本极不平衡。对于负样本的选取SSD是这样做的,首先对于刚刚计算剩下的所有的负样本计算他的最大confidence lossconfidence loss越大表示网络将负样本预测为目标的概率越大,所以就根据计算的confidence loss来选取排在前面的负样本,根据正样本的个数选取正负样本的比例为1:3。

  上面讲了正负样本的计算,下面我们来看下怎么计算模型的损失,先来看下损失函数:
L(x,c,l,g)=1N(Lconf(x,c)+αLloc(c,l,g))L(x,c,l,g)=\frac{1}{N}(L_{conf}(x,c)+\alpha L_{loc}(c,l,g)) L(x,c,l,g)=N1​(Lconf​(x,c)+αLloc​(c,l,g))
  上式右边的的第一项表示类别损失,第二项表示定位损失,N表示正样本的个数,α\alphaα是平衡系数,直接取1即可。类别损失有分为两部分:
Lconf (x,c)=−∑i∈PosNxijplog⁡(c^ip)−∑i∈Neglog⁡(c^i0)where c^ip=exp⁡(cip)∑pexp⁡(cip)L_{\text {conf }}(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)=−i∈Pos∑N​xijp​log(c^ip​)−i∈Neg∑​log(c^i0​) where c^ip​=∑p​exp(cip​)exp(cip​)​
  上式右边第一项表示正样本损失,第二项表示负样本损失。这个损失函数就是一个softmax loss。下面解释下公式中的符号含义:

  • c^ip\hat{c}_i^pc^ip​表示预测的第iii个default box(类别是P)对应的GT box的类别概率
  • xijp=0,1x_{i j}^p={0,1}xijp​=0,1为第iii个default box匹配到的第jjj个GT box(类别是P),可以直接看成1即可。
    接下来我们再来看下定位损失怎么计算(跟Faster RCNN的计算方式基本一模一样),先看公式,第二项为定位损失,我们重写一下:
    L(x,c,l,g)=1N(Lconf⁡(x,c)+αLloc(x,l,g))L(x, c, l, g)=\frac{1}{N}\left(L_{\operatorname{conf}}(x, c)+\alpha L_{l o c}(x, l, g)\right) L(x,c,l,g)=N1​(Lconf​(x,c)+αLloc​(x,l,g))
    Lloc(x,l,g)=∑i∈PosN∑m∈{cx,cy,w,h}xijksmooth⁡L1(lim−g^jm)g^jcx=(gjcx−dicx)/diwg^jcy=(gjcy−dicy)/dihg^jw=log⁡(gjwdiw)g^jh=log⁡(gjhdih)\begin{gathered} L_{l o c}(x, l, g)=\sum_{i \in P o s}^N \sum_{m \in\{c x, c y, w, h\}} x_{i j}^k \operatorname{smooth}_{\mathrm{L} 1}\left(l_i^m-\hat{g}_j^m\right) \\ \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 \\ \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) \end{gathered} Lloc​(x,l,g)=i∈Pos∑N​m∈{cx,cy,w,h}∑​xijk​smoothL1​(lim​−g^​jm​)g^​jcx​=(gjcx​−dicx​)/diw​g^​jcy​=(gjcy​−dicy​)/dih​g^​jw​=log(diw​gjw​​)g^​jh​=log(dih​gjh​​)​
    smooth⁡L1(x)={0.5x2if ∣x∣<1∣x∣−0.5otherwise \operatorname{smooth}_{L_1}(x)= \begin{cases}0.5 x^2 & \text { if }|x|<1 \\ |x|-0.5 & \text { otherwise }\end{cases} smoothL1​​(x)={0.5x2∣x∣−0.5​ if ∣x∣<1 otherwise ​
  • liml_{i}^{m}lim​为预测对应第iii个正样本的回归参数
  • g^jm\hat{g}_j^mg^​jm​为正样本iii匹配的第jjj个GT box的回归参数

  至此,SSD算法的理论部分基本上已经介绍完了,欢迎各位大佬批评指正。

SSD目标检测算法——通俗易懂解析相关推荐

  1. YOLOv3目标检测算法——通俗易懂的解析

    目录 YOLOv3目标检测算法 前沿 一.YOLOv3 二.损失函数 YOLOv3目标检测算法 前沿 前两篇文章我们讲了下关于YOLOv1和YOLOv2的原理,有不懂的小伙伴可以回到前面再看看: YO ...

  2. 基于Grad-CAM与KL损失的SSD目标检测算法

    基于Grad-CAM与KL损失的SSD目标检测算法 人工智能技术与咨询 来源:<电子学报>,作者侯庆山等 摘 要: 鉴于Single Shot Multibox Detector (SSD ...

  3. 基于神经网络的目标检测论文之目标检测方法:改进的SSD目标检测算法

    4.2 改进的SSD 上一章我们了解到,物体识别检测算法是在传统CNN算法基础上加上目标区域建议策略和边框回归算法得到的.前辈们的工作主要体现在目标区域建议的改进策略上,从最开始的穷举建议框,到划分图 ...

  4. 层与特征融合_【计算机系统应用】(第122期)感受野特征增强的 SSD 目标检测算法...

    点击上方"蓝字",关注我们吧! 目标检测是计算机视觉领域的一项重要任务, 是 生活中如实例分割[1] , 面部分析[2] , 汽车自动驾驶[3].视 频分析[4] 等各种视觉应用的 ...

  5. [RCNN]-[YOLO]-[SSD]目标检测算法

    原文链接:http ://chuansong.me/n/353443351445 转载自深度学习大讲堂公众号    开始本文内容之前,我们先来看一下上边左侧的这张图,从图中你看到了什么物体?他们在什么 ...

  6. SSD目标检测算法原理(上)

    目录 一.目标检测概述 1.1 项目演示介绍 1.2 图片识别背景 1.3 目标检测定义 二.目标检测算法原理 2.1 任务描述 2.2 目标检测算法必备基础 2.3目标检测算法模型输出 目标检测 - ...

  7. 一文弄懂SSD目标检测算法

    SSD是YOLO之后又一个引人注目的目标检测结构,它沿用了YOLO中直接回归 bbox和分类概率的方法,同时又参考了Faster R-CNN,大量使用anchor来提升识别准确度.通过把这两种结构相结 ...

  8. Pytorch搭建SSD目标检测平台

    学习前言 什么是SSD目标检测算法 源码下载 SSD实现思路 一.预测部分 1.主干网络介绍 2.从特征获取预测结果 3.预测结果的解码 4.在原图上进行绘制 二.训练部分 1.真实框的处理 2.利用 ...

  9. 目标检测算法YOLO-V1算法详解

    ❝ 前面我们一起学了SSD算法的相关知识,如下: SSD目标检测算法必须知道的几个关键点 目标检测算法SSD结构详解 ❞ 今天我们学习另一系列目标检测算法YOLO(You Only Look Once ...

  10. 【快速入门】YOLOv5目标检测算法

    文章目录 一.YOLOv5简介 二.网络结构 1.Input 2.Backbone 3.Neck 4.Head 三.改进方法 1.自适应锚框计算 2.自适应灰度填充 四.性能表现 五.YOLOv5入门 ...

最新文章

  1. Python中的赋值、引用和深浅拷贝
  2. Json.Net系列教程 3.Json.Net序列化和反序列化设置
  3. 【渝粤教育】国家开放大学2018年秋季 1126t社会医学 参考试题
  4. flash 异常修复:QQ 的 flash 图标显示异常?QQ 秀、表情加载异常?一招解决
  5. 今天,公司架构师跟我分享多年的私货 | 进阶之路必读书籍(附下载链接)
  6. Simulink步长
  7. 如何用python处理图片_推荐:10个Python图像处理工具
  8. redis中multi和pipeline区别以及效率(推荐使用pipeline)
  9. 《树莓派实战秘籍》——1.20 技巧20使用Swap添加额外的内存
  10. 美国河流出现神奇冰盘 顺着水流不断旋转
  11. 【单片机/嵌入式】最完整学习路线
  12. Excel常用技巧1
  13. C++ 通讯录管理系统
  14. 物联卡Iccid号码编码规则
  15. 最美不过少年时,红尘走马,步步相随
  16. STM32从固件库到HAL库
  17. 自学Java语言网络编程局域网内与电脑无线传输视频,图片文件,调用系统媒体播放视频图片文件
  18. 上市公司融资需要哪些条件
  19. 从JavaScript到TypeScript,Pt。 IIB:使用类,接口和混合器进行设计
  20. 论文浏览(27) Long-Term Feature Banks for Detailed Video Understanding

热门文章

  1. 国际云安全证书CCSK让他们在职场中脱颖而出
  2. 那些我们卖掉的二手iPhone到底去哪了?
  3. 关于举办2008年注册电气工程师执业资格考试供配电专业(基础)
  4. 云计算中网络基础知识
  5. 台式计算机对比评测报告,正常台式电脑测试报告.doc
  6. 冰点还原精灵授权问题解答
  7. 获取input添加图片的路径以及fakepath的解决方法
  8. 科学道德与学风-2021雨课堂答案-第5章
  9. 黑石五子棋软件测试自学,黑石(五子棋超强软件)的使用技巧
  10. firefox 2.0版如何自己制作绿色版?