SSD算法简单介绍

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

SSD算法

论文连接SSD: Single Shot MultiBox Detector

SSD,全称Single Shot MultiBox Detector,是目前主要的检测框架之一,其基于将detection转化为regression的思路,可以一次完成目标定位与分类。该算法基于Faster RCNN中的Anchor,提出了相似的Prior box;该算法修改了传统的VGG16网络:将VGG16的FC6和FC7层转化为卷积层,如图1上的Conv6和Conv7;去掉所有的Dropout层和FC8层;添加了Atrous算法(hole算法),将Pool5从2x2-S2变换到3x3-S1,同时加入基于特征金字塔(Pyramidal Feature Hierarchy)的检测方式,即在不同感受野的feature map上预测目标。

SSD算法工作流程

  1. 输入一幅图片,将其输入到预训练好的分类网络中来获得不同大小的特征映射;
  2. 抽取Conv4_3、Conv7、Conv8_2、Conv9_2、Conv10_2、Conv11_2层的feature map,然后分别在这些feature map层上面的每一个点构造6个不同尺度大小的BB(bounding box),然后分别进行检测和分类,生成多个BB,如图1所示;
  3. 将不同feature map获得的BB结合起来,经过NMS(非极大值抑制)方法来抑制掉一部分重叠或者不正确的BB,生成最终的BB集合(即检测结果)。
    下图为SSD算法的工作流程图:
    Figure 1 SSD算法流程图

Defalut box生成规则

为提高目标的识别准确度,该网络预设了多种尺度的目标检测框(Defalut box),每个目标检测框获得的feature map通过softmax分类+bounding box regression获得真实目标的位置。Defalut box是以feature map上每个点的中点为中心(offset=0.5),生成一系列同心的Defalut box(然后中心点的坐标会乘以step,相当于从feature map位置映射回原图位置),使用m(SSD300中m=6)个不同大小的feature map 来做预测,最底层的 feature map 的 scale 值为 Smin=0.2,最高层的为Smax=0.95,其他层通过下面的公式计算得到:
s k = s m i n + s m a x − s m i n m − 1 ( k − 1 ) s_k=s_{min}+\frac{s_{max}-s_{min}}{m-1}(k-1) sk=smin+m1smaxsmin(k1)

LOSS计算

SSD算法的目标函数分为两部分:计算相应的default box与目标类别的confidence loss以及相应的位置回归(location loss)。总体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)+αL_{loc} (x,l,g)) L(x,c,l,g)=N1(Lconf(x,c)+αLloc(x,l,g))
其中N是match到Ground Truth的default box数量;而α参数用于调整confidence loss和location loss之间的比例,默认α=1;
位置回归则是采用 Smooth L1 loss计算预测框box(l)和真值框box(g)直接的loss,其函数表示为:
L l o c ( x , l , g ) = ∑ ∈ 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 ) L_{loc} (x,l,g)=\sum_{\in{Pos}}^{N}\sum_{m\in{cx,cy,w,h}}x_{ij}^{k}{smooth}_{L1}(l_{i}^{m}-\hat{g}_{j}^{m}) Lloc(x,l,g)=PosNmcx,cy,w,hxijksmoothL1(limg^jm)
g ^ j c x = ( g j c y − d i c y ) / d i h \hat{g} _j^cx=(g_j^cy-d_i^cy)/d_i^h g^jcx=(gjcydicy)/dih
g ^ j w = l o g ⁡ ( ( g j w ) / ( d i w ) ) \hat{g}_j^w=log⁡{((g_j^w)/(d_i^w ))} g^jw=log((gjw)/(diw))
g ^ j h = l o g ⁡ ( ( g j h ) / ( d i h ) ) \hat{g}_j^h=log⁡{((g_j^h)/(d_i^h ))} g^jh=log((gjh)/(dih))
其中i为预测框序号,j为真值框序号,(cx,cy)是default box(d)的中心坐标,w,h分别是default box(d)的宽和高。
计算相应的default box与目标类别的Confidence 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 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}} Lconf(x,c)=iPosNxijplog(c^ip)iNeglogc^i0
其中 c ^ i p = e c i p ∑ p e c i p \hat{c} _{i}^{p}=\frac{e^{c_i^p}} {\sum_{p}e^{c_{i}^{p}}} c^ip=pecipecip c i p c_i^p cip是分类器前级输出单元的输出, i i i表示类别索引,总得类别个数为 p p p c ^ i p \hat{c}_i^p c^ip表示的是当前元素的指数与所有元素指数和的比值。

极大值抑制(NMS)筛选

将所有生成的default boxes全部用NMS(极大值抑制)进行筛选,得到最终的目标区域;
f ( x ) = { S i i o u ( M , b i ) < N t S i ( 1 − i o u ( M , b i ) ) i o u ( M , b i ) < N t f(x)=\left\{ \begin{array}{lcl} S_i & & iou(M,b_i)<N_t \\ S_{i(1-iou(M,b_i))} & & iou(M,b_i)<N_t \end{array} \right. f(x)={SiSi(1iou(M,bi))iou(M,bi)<Ntiou(M,bi)<Nt

其中 N t N_t Nt是NMS的阈值, b i b_i bi是检测的bounding box, s i s_i si是对应 b i b_i bi框的置信度, M M M是所有检测框的并集。


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

相关文章

SSD算法

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

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

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

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

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

【Spring框架】全集详解

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

spring 入门详解超

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

Spring框架入门详解

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

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

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

spring aop详解

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

详解Spring

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

Spring详解简介

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

spring 详细讲解

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

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

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

Spring的事务详解

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

java系列之Spring详解

一、Spring简介 1.1 简介 关于spring的简介&#xff0c;可以查看百度百科&#xff0c;下面内容部分来自百度百科 Spring框架是针对软件开发过程中的复杂性而创建的。其使用javaBean来完成以前只可能由EJB完成的事情。 2002年&#xff0c;Rod Jahnson首次推出了Spring框架雏形…

Spring全面详解

—————版本Spring5.x————— ——编译器IntelliJ IDEA 2020.2.3 —— <-- 该文章有点老旧&#xff0c;停止了更新&#xff0c;请查看Spring5最新文章&#xff0c;目前已经书写完成 --> Spring5全面详解 它会持续更新&#xff0c;你所看到的不是最终版本。 如…

Spring-全面详解(学习总结)

Spring 1.简介 1.1.简介 简介 Spring : 春天 —>给软件行业带来了春天 2002年&#xff0c;Rod Jahnson首次推出了Spring框架雏形interface21框架。 2004年3月24日&#xff0c;Spring框架以interface21框架为基础&#xff0c;经过重新设计&#xff0c;发布了1.0正式版。 …

spring超全面详解

spring概述 Spring 是于2003年兴起的一款轻量级的,非侵入式的IOC和AOP的一站式的java开发框架 为简化企业级应用开发而生. 1.轻量级: 就是指spring核心功能的jar包不大 2.非侵入式: 我们的业务代码不需要继承或实现spring中任何的类或接口 3.IOC: 控制反转 就是把创建…

Spring全面详解(学习总结)

Spring FrameWork一、 前言二、IOC(控制反转)2.1 对于IOC的理解2.2如何使用IOC2.3配置文件的解读2.4IOC容器创建bean的两种方式2.5从IOC容器中取bean2.6bean的属性如果包含特殊字符 三、DI(依赖注入)四、Spring中的bean五、Spring中的继承六、Spring的依赖七、Spring读取外部资…

查看Linux的用户权限(转载)

&#xff08;转&#xff09;Linux查看用户及其权限管理 查看用户 请打开终端&#xff0c;输入命令&#xff1a; $ who am i或者 $ who mom likes输出的第一列表示打开当前伪终端的用户的用户名&#xff08;要查看当前登录用户的用户名&#xff0c;去掉空格直接使用 whoami …

linux查看登录用户

1&#xff0c;w w,显示目前登入系统的用户信息 -f  开启或关闭显示用户从何处登入系统。 -h  不显示各栏位的标题信息列。 -l  使用详细格式列表&#xff0c;此为预设值。 -s  使用简洁格式列表&#xff0c;不显示用户登入时间&#xff0c;终端机阶段作业和程序所耗费…