深度学习 -- SSD 算法流程详解

article/2025/9/15 13:22:40

      SSD同样是经典论文,后续很多论文以此为基础,所以搞懂流程比较重要,中间如果 有写的不对、有问题或者有看不懂的地方,还望指正。如果有了新的理解,我会持续更新。

      作为经典论文,SSD算法也同样产生了很多后续工作比如 DSSD、RefineDet等等,而且由于有速度优势,工程中使用SSD和YOLO的可能性会更大。

      一、网络结构:

      上图是SSD和YOLO的网络结构,通过对比可以发现,SSD的优点就是它生成的 default box 是多尺度的,这是因为SSD生成default box 的 feature map 不仅仅是CNN输出的最后一层,还有利用比较浅层的feature map 生成的default box。所以SSD对于小目标的检测一定会优于YOLO v1(小目标经过高层卷积后特征几乎都消失了)。同时,又因为SSD生成的多尺度default box一定有更高概率找到更加贴近于 Ground Truth 的候选框,所以模型的稳定性是肯定比YOLO强的(YOLO的bounding box很少,只有98个,如果距离GT比较远,那么修正 bounding box 的线性回归就不成立,训练时模型可能会跑飞)。但是SSD的候选框数量是三种经典网络中最多的,有8732个,所以训练时应该会比较慢。

      二、算法流程:

      首先来看一下SSD的基本步骤(比YOLO稍微复杂点,但是也很直接了):

  • 输入一幅图片,让图片经过卷积神经网络(CNN)提取特征,并生成 feature map
  • 抽取其中六层的feature map,然后再 feature map 的每个点上生成 default box(各层的个数不同,但每个点都有)
  • 将生成的所有 default box 都集合起来,全部丢到 NMS(极大值抑制)中,输出筛选后的 default box,并输出

      三、算法细节:

      3.1 default box怎么生成的:

      这是原文中的图,图(b)和 图(c)中的虚线框就是生成的 default box,总共的怎么算呢? 38x38x4、19x19x6、10x10x6、5x5x6、3x3x4、1x1x4,也就是 5773、2166、600、150、36、4,加起来一共有 8732 个box,然后我们将这些box送入NMS模块中,获得最终的检测结果。

      3.2 default 的生成规则:

      由于不同层的 feature map 对应到原图上的感受野不同,所以在不同层山生成的default box其实大小是不一样的(比例一样)。 

      生成 default box 时,在 feature map 上每个点上生成一系列同心的Defalut box(然后中心点的坐标会乘以step,相当于从feature map位置映射回原图位置)使用m(这里m = 6,因为就选了6层)个不同大小的feature map 来做预测,最底层的 feature map 的 scale 值为 Smin=0.2,最高层的为Smax=0.9,其他层通过下面的公式计算得到:

      使用不同的ratio值,[1, 2, 3, 1/2, 1/3],通过下面的公式计算 default box 的宽度w和高度h

      而对于ratio=1的情况,指定的scale如下所示,即总共有 6 中不同的 default box。

     default box 的中心点坐标为:  \left ( ( i+0.5)/\left | f_{k} \right |, ( j+0.5)/\left | f_{k} \right |\right ) , fk时第k层的feature map 的大小。

      3.3 Loss 函数:      

      后续的很多目标检测论文都是用这样的损失函数,SSD算法的损失函数分为两部分:计算相应的default box与目标类别的confidence loss以及相应的位置回归。

      其中 N 是match到Ground Truth的default box数量;而alpha参数用于调整confidence loss和location loss之间的比例,默认alpha=1。

      3.3.1 位置回归则是采用 Smooth L1 loss,目标函数为:
 

      3.3.2 confidence loss是典型的softmax loss:

     下图非常好的解释了SSD的Loss函数是怎么来的(用下别人的图,有时间自己画一个,方便理解):

      3.4 训练样本比例:

      文中提到,由于有8000多个default box 那么matching之后会有大量的负样本,为了数据集更加干净,正负样本比例取到 1:3。

     

      以上

     参考:https://www.cnblogs.com/MY0213/p/9858383.html

      https://blog.csdn.net/wfei101/article/details/78176322

      https://blog.csdn.net/jy001227801/article/details/80388192


http://chatgpt.dhexx.cn/article/wYJRrFhR.shtml

相关文章

SSD原理解读-从入门到精通

前言 当初写这篇博客的初衷只是记录自己学习SSD的一些心得体会,纯属学习笔记,后来由于工作上的需要,需要对小伙伴进行目标检测方面的培训,后来就基于这篇博客进行了扩展,逐渐演变成了现在的样子,本文力求从…

SSD算法理论

SSD算法 SSD(Single Shot MultiBox Detector)是one-stage目标检测方法,one-stage算法就是目标检测和分类是同时完成的,其主要思路是利用CNN提取特征后,均匀地在图片的不同位置进行密集抽样,抽样时可以采用不同尺度和长宽比&#…

SSD算法详解

SSD github : https://github.com/weiliu89/caffe/tree/ssd SSD paper : https://arxiv.org/abs/1512.02325 SSD 动态PPT: https://docs.google.com/presentation/d/1rtfeV_VmdGdZD5ObVVpPDPIODSDxKnFSU0bsN_rgZXc/pub?startfalse&loopfalse&delayms3000…

目标检测—SSD系列算法原理介绍

一、SSD系列算法原理介绍 1.1 SSD算法介绍: ➢Single Shot MultiBox Detector (one-stage方法) ●Wei Liu在ECCV 201 6提出 ●直接回归目标类别和位置 ●不同尺度的特征图上进行预测 ●口端到端的训练 …

目标检测->SSD算法

目标检测算法总体分为:基于区域的算法和基于回归的算法 1)基于区域的算法: RCNN, Fast RCNN, Faster RCNN, Mask RCNN 等。整个检测过程分为两个阶段。在第一个阶段,检测器需要找到一些假设的区域 (ROI);在第二个阶段…

SSD算法解析

目标检测算法主要分为两类: Two-stage方法:如R-CNN系列算法,主要思路就是通过Selective Search或者CNN网络产生一系列的稀疏矩阵的候选区域,然后对这些候选区域进行分类和回归,two-stage的方法优势在于准确率度高&…

SSD算法简单介绍

SSD算法 论文连接SSD: Single Shot MultiBox Detector SSD,全称Single Shot MultiBox Detector,是目前主要的检测框架之一,其基于将detection转化为regression的思路,可以一次完成目标定位与分类。该算法基于Faster RCNN中的Anc…

SSD算法

目录 SSD算法SSD网络结构backboneextra部分loc和clsPriorBox层先验框的生成方法loc的预测结果 模型训练正负样本标记损失函数困难样本挖掘 模型预测总结 SSD算法 学习目标 知道SSD的多尺度特征图的网络知道SSD中先验框的生成方式知道SSD的损失函数的设计 目标检测算法主要分…

SSD算法原理介绍,包含算法结构、Loss计算、默认框计算几个方面

一、SSD算法的介绍 1、SSD算法: 是One-stage目标检测算法中的一种,不需要region proposal阶段,可以直接产生物体的类别概率和位置坐标值,经过单次检测即可直接得到最终的检测结果,具有检测速度快的特点。 2、SSD算法结…

目标检测SSD算法(新手入门)

SSD分析 SSD背景SSD FrameworkCNN-based detectorSSD的backbone:VGG16SSD ModelL2Norm先验框多尺度对SSD的影响定位、分类小结问题 SSD算法是比较经典的目标检测算法,讲解SSD的博客有很多,比如目标检测之SSD就讲的非常好。 本篇博客的不同之…

【Spring框架】全集详解

文章目录 ClassPathXmlApplicationContext工作原理01、IOC:控制反转02、什么是bean03、DI注入以及c、p命名空间p命名空间、c命名空间测试各种类型的注入 04、Autowired:自动装配05、注解:AnnotationComponent注解的作用RepositoryServiceController 06、…

spring 入门详解超

一.什么是spring 1.简介:Spring是一个开源的设计层面框架,解决了类与类之间的彻底解耦,它将面向接口的编程思想贯穿整个系统应用。 2.spring核心: IOC(Inverse of Control 控制反转):将bean的…

Spring框架入门详解

Spring 为什么引入Spring框架 为了提高开发效率和实现模块之间的高聚合低耦合,所以引入了Spring框架 高聚合低耦合 高内聚 内聚是指模块内的联系,各个元素之间紧密联系共同完成任务,模块内的联系越紧密越好,这样可以提高他们…

Spring详解(小白教程,大佬勿入,勿喷。)

1.Spring概述 Spring是什么? 在resource目录下创建子包需要用/ 如:com/baidu/userMapper.xml Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架, 以 IoC(Inverse Of Control:反转控制)和 AOP&…

spring aop详解

1.前言 spring aop是一个面向切面的编程,在自己第一遍学习的时候,感觉aop没有什么作用,但是真实接触下来,感觉spring aop还是很有用途的,感觉自己之前的想法太年轻了。 2.概念 Spring 提供了两种AOP 的实现&#xf…

详解Spring

Spring SSH框架中Struts2:是基于Web层,Hibernate:是基于持久化的,Spring:业务层,管理bean,它是一个容器,List,map, Set这里的内容,是适合已经学过了Spring的人供复习参考的..... Spr…

Spring详解简介

1、Spring的简介 Spring的英文翻译为春天,可以说是给Java程序员带来了春天,因为它极大的简化了开发。我得出一个公式:Spring 春天 Java程序员的春天 简化开发。最后的简化开发正是Spring框架带来的最大好处。 Spring是一个开放源代码的设计…

spring 详细讲解

有人说,“Java程序员都是Spring程序员”,老三不太赞成这个观点,但是这也可以看出Spring在Java世界里举足轻重的作用。 基础 1.Spring是什么?特性?有哪些模块? Spring Logo 一句话概括:Spring…

JAVA框架Spring 全面详解(学习总结)

Spring 1.Spring 全面详解 1.1简介 ◆ Spring:春天 给软件行业带来了春天 ◆ 2002,首次推出了Spring框架的雏形:interface21框架 ◆ Spring框架即是以interface21框架为基础经过重新设计,并不断丰富其内涵,于2004…

Spring的事务详解

事务简介 事务在逻辑上是一组操作,要么执行,要不都不执行。主要是针对数据库而言的,比如说 MySQL。 为了保证事务是正确可靠的,在数据库进行写入或者更新操作时,就必须得表现出 ACID 的 4 个重要特性: 原…