目标检测:SSD算法原理综述

2023-11-11

SSD(Single Shot Detection)是一个流行且强大的目标检测网络,网络结构包含了基础网络(Base Network),辅助卷积层(Auxiliary Convolutions)和预测卷积层(Predicton Convolutions)。

本文包含了以下几个部分:

(1)理解SSD网络算法所需要理解的几个重要概念

(2)SSD网络框架图

(3)SSD网络中几个重要概念的详细解释

(4)SSD网络如何定位目标

(5)SSD网络的算法流程图

(5)小结

 

1.理解SSD网络所需要理解的几个重要概念

Single Shot Detection :早期的目标检测系统包含了两个不同阶段:目标定位和目标检测,这类系统计算量非常耗时,不适用实际应用。Single Shot Detection模型在网络的前向运算中封装了定位和检测,从而显著提高了运算速度。

多尺度特征映射图(Multiscale Feature Maps):小编认为这是SSD算法的核心之一,原始图像经过卷积层转换后的数据称为特征映射图(Feature Map),特征映射图包含了原始图像的信息。SSD网络包含了多个卷积层,用多个卷积层后的特征映射图来定位和检测原始图像的物体。

先验框(Priors):在特征映射图的每个位置预先定义不同大小的矩形框,这些矩形框包含了不同的宽高比,它们用来匹配真实物体的矩形框。

预测矩形框:每个特征映射图的位置包含了不同大小的先验框,然后用预测卷积层对特征映射进行转换,输出每个位置的预测矩形框,预测矩形框包含了框的位置和物体的检测分数。比较预测矩形框和真实物体的矩形框,输出最佳的预测矩形框。

损失函数:我们知道了预测的矩形框和真实物体的矩形框,如何计算两者的损失函数?损失函数包含了位置损失函数和分类损失函数,由于大部分矩形框只包含了背景,背景的位置不需要定位,因此计算两者的位置损失函数用L1函数即可。我们把背景称为负类,包含了物体的矩形框称为正类,不难理解图像中大部分的矩形框只包含了负类,若用全部的负类和正类来计算损失函数,那么训练出来的模型偏向于给出负类的结果。解决办法是在计算分类损失函数时,我们只选择最难检测的几个负类和全部正类来计算。

非极大值抑制(Non-maximum Suppression):若两个矩形框都包含了相同的物体,且两个矩形框的重叠度较高,则选择分数较高的矩形框,删除分数较低的矩形框。

 

2.SSD网络框架定义及其应用

SSD网络包含了基础网络,辅助卷积层和预测卷积层:

  1. 基础网络:提取低尺度的特征映射图(可用常见的MobileNet、ShuffleNet替代)
  2. 辅助卷积层:提取高尺度的特征映射图(可随意设计)
  3. 预测卷积层:输出特征映射图的位置信息和分类信息

下面介绍SSD网络的这三个部分

基础网络

基础网络的结构采用了VCG-16网络架构,VCG-16网络如下图:

 

VCG-16网络包含了卷积层和全连接层(FC Layers),全连接层的任务用来分类,由于基础网络只需要提取特征映射图,因此需要对全连接层用卷积层代替,这一部分的参数和VCG-16网络的卷积层参数用迁移学习的方法获取。

 

基于VCG网络架构的基础网络如下图:

辅助卷积层

辅助卷积层连接基础网络最后的特征映射图,通过卷积神经网络输出4个高尺度的特征映射图:

预测卷积层

预测卷积层预测特征映射图每个点的矩形框信息和所属类信息,如下图:

3.SSD网络中几个重要概念的详细解释

如何表示矩形框

我们用矩形框定位物体的位置信息和所属类,如下图:

常用四个维度表示矩形框信息,前两个维度表示矩形框的中心点的位置,后两个维度表示矩形的宽度和高度。为了统一,我们使用归一化的方法表示矩形框:

上图猫的矩形框为:(0.78,0.80,0.24,0.30)

 

如何衡量两个矩形框的重叠度

SSD算法中有两处需要计算矩形框的重叠度,第一处是计算先验矩形框和真实矩形框的重叠度,目的是根据重叠度确定先验框所属的类,包括背景类;第二处是计算预测矩形框和真实矩形框的重叠度,目的是根据重叠度筛选最优的矩形框。

我们用Jaccard Index或交并比(IoU)衡量矩形框的重叠度。交并比等于两个矩形框交集的面积与矩形框并集的面积之比,如下图:

损失函数算法

预测层预测了映射图每个点的矩形框信息和分类信息,该点的损失值等于矩形框位置的损失与分类的损失之和。

首先我们计算映射图每个点的先验框与真实框的交并比,若交并比大于设置的阈值,则该先验框与真实框所标记的类相同,称为正类;若小于设置的阈值,则认为该先验框标记的类是背景,称为负类。

然后预测层输出了映射图每个点的预测框,预测框的标记与先验框的标记相同

预测框与真实框的损失函数等于预测框位置的损失与分类的损失之和。

 

1. 预测框位置的损失:

由于不需要用矩形框定位背景类,所以只计算预测正类矩形框与真实矩形框的位置损失:

我们用 nn.L1Loss函数计算矩形框位置的损失。

n1.L1Loss函数:

torch.nn.L1Loss(size_average=None, reduce=None, reduction='mean')

公式:

其中N表示样本个数。

如果reduction不为'none'(默认设为'mean'),则

假设共有N个正类的预测矩形框,每个矩形框的位置为:

其中 i = 1,2,...,N

每个预测矩形框对应的正类真实矩形框的位置为:

如下图的预测矩形框和对应的正类真实矩形框:

损失函数为:

2.预测类的损失:

由第一节的损失函数介绍可知,大部分的预测矩形框包含了负类(背景类),容易知道一张图中负类的个数远远多于正类,若我们计算所有类的损失值,那么训练出来的模型会偏向于预测负类的结果。

因此我们选择一定数量的负类个数和全部的正类个数来训练模型,负类个数N_hn,正类个数N_p,负类个数与正类个数满足下式:

我们知道了负类个数,如何从数量庞大的负类中选择所需要的负类个数?本文采用了最难检测到负类的预测框作为训练的负类,称为Hard Negative Mining。现在我们知道了如何选择负类,那么如何预测分类损失函数?关于多分类任务,我们常用交叉熵来评价分类损失函数。

4.SSD网络结构如何定位目标

前面介绍通过先验框和真实框的交并比来分类,若交并比大于阈值则为正类(包含某个特定物体的类),若交并比小于阈值则为负类(背景类)。

预测框与先验框的个数相等,若有多个相同正类的预测框的交并比很大(如下图),如何选择最优的预测框?

上图的五个预测框预测了三只狗和两只猫,三只狗的交并比如下表:

设置阈值为0.5,因为预测dog B的分数最大(0.96),且dog Bdog C的交并比大于阈值,因此一致dog C的预测框。由于dog A与其他预测框的交并比小于阈值,因此保留dog A的预测框。即狗的输出结果为两个。

猫的预测矩形框如下表:

同理,由于cat A的预测分数最高,且cat Bcat A交并比大于阈值,因此抑制cat B预测框。

上述方法称为非极大值抑制(Non-Maximum Suppression)

根据非极大值抑制方法,猫狗的预测框如下图:

5.SSD网络的算法流程

介绍了SSD网络结构以及理解该网络所需要的基础概念,基于这些知识,下面介绍SSD网络的算法流程。

训练阶段:

预测阶段:

相信看到最后的这两张图对整个SSD的原理会有恍然大悟的感觉,总体来说,SSD最核心的就是引入了多尺度的思想,而其"基础卷积层"我们可以使用常见的网络结构去替换,例如:使用MobileNet、ShuffleNet等网络结构对SSD网络进行加速处理等。

PyTorch实现:

https://github.com/sgrvinod/a-PyTorch-Tutorial-to-Object-Detection

 

感谢WX公众号:计算机视觉life,机器学习算法那些事

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

目标检测:SSD算法原理综述 的相关文章

  • 密码学——1.密码学概论

    1 基本术语 1 1 密码使用学 ceyptography vs 密码编码学 crypyology 密码使用学是一种为了达到隐藏消息含义而使用秘文写的一门科学 密码分析学是一门研究在不知道通常解密所需要的秘密信息的情况下对加密的信息进行解
  • nacos 集群部署

    nacos 集群部署 之前 nacos 都是单机部署 使用倒还稳定 没有因为 nacos 出过问题 最近因为各种原因连续迁了几次服务器 中间涉及 nacos 服务器 比较麻烦 所以决定把 nacos 改为集群部署 nacos官方也推荐生产环
  • 【面试题】Javascript的这些运算符,你都都掌握哪些?

    前端面试题库 面试必备 推荐 地址 前端面试题库 国庆头像 国庆爱国 程序员头像 总有一款适合你 theme devui blue highlight a11y light 无论是JavaScript还是其他语言 运算符是基础 表达式和语句
  • python安装easygui

    1 下载地址 https sourceforge net projects easygui files 0 96 2 双击easygui文件夹 打开后复制或剪切easygui py文件放到你原来安装python的文件夹里 python Li
  • DNS解析分类

    DNS 域名系统 解析是将域名转换为对应的IP地址的过程 根据不同的功能和角色 DNS解析可以分为以下几种分类 递归解析 Recursive Resolution 递归解析是指DNS客户端向本地DNS服务器 如ISP提供的DNS服务器 发送
  • 图像配准之特征点匹配的思考

    最近赶时髦 看了一些智能优化算法如蚁群算法 还有机器学习的一些东西 就想着怎么把这些先进的东西用在图像配准中 头脑风暴了一下 觉得在已经检测到两幅图像的特征点的基础上 就如何对它们进行匹配似乎有优化的空间 匹配的过程其实是找对应点的过程 对

随机推荐

  • 操作系统考试重点

    1 什么是进程 什么是线程 进程与线程有何区别 进程 进程是具有独立功能的程序在数据集合上的一次执行过程 线程 线程是进程内的一个执行实体或执行单元 区别 1 进程的地址空间是独立的 而同一进程内的线程共享同一地址空间 一个进程内的线程在另
  • STL源码剖析——deque的实现原理和使用方法详解

    Deque 简介 deque是 double ended queue 的缩写 和vector一样都是STL的容器 deque 是双端数组 而 vector 是单端的 deque 在接口上和 vector 非常相似 在许多操作的地方可以直接替
  • 【IOS】移动端设置input只能输入数字,在IOS系统没有效果

    在移动端设置input的type为number类型的时候需要区分一下安卓还是IOS 如果只设置type为number类型的时候 在安卓生效 但是IOS还是会有可以输入汉字的问题出现 所以就需要一个新的属性 pattern 0 9 来控制输入
  • BigDecimal的使用小结

    文章目录 1 为什么用 BigDecimal 2 构造函数的选择 3 加减乘除的使用 4 保留小数 5 RoundingMode类 6 其他方法 1 为什么用 BigDecimal 因为 double float的计算很不靠谱 莫名其妙的会
  • 《微积分基础》学习(一)

    本系列文章主要记录我在学习coursera上的 Calculus One 在线课程的笔记 该课程是俄亥俄州立大学的经典课程 教授的发音比较标准 授课方式轻松愉悦 是不可错过的 微积分 入门课程 本文直接从第二周切入 第一周是课程介绍和学习方
  • intelli idea中配置Tomcat找不到的解决办法

    这两天新入职一家公司 公司用的是intelli idea 以前用习惯了eclipse 感觉到有点不太习惯 当然 intelli idea也有自己的强大之处 在开始配置Tomact之前 按照网上的说法 发现点击 号之后没有Tomcat 于是乎
  • printf 和scanf

    1 printf 简介 1 1 printf 的格式 printf 函数的原型为 include
  • Xbox One 升级后黑屏修复

    好久没用Xbox了 近期突然想要利用体感游戏进行锻炼 结果打开后提示需要更新 更新包有4G左右 随手选了更新后就让xbox后台更新了 过了一段时间切回hdmi信号发现一片黑屏 手柄的xbox键可以唤出关闭菜单 但是其他操作都无效 经过一番研
  • 20230322 元宇宙

    VR AR MR XR的区别和联系 知乎
  • 解决Kaggele无法下载输出output文件夹下的文件

    import os os chdir kaggle working print os getcwd print os listdir kaggle working from IPython display import FileLink F
  • 支付宝给个人账号转账付款

    一 说明 转账到支付宝账户是为了满足支付宝商户向其他支付宝账户进行单笔转账的需求 针对具备开发能力的商户 提供通过 API 接口完成单笔转账的功能 商家只需输入另一个正确的支付宝账号 即可将单笔资金从本人的支付宝账户转账至另一个支付宝账户
  • GPT带我学-设计模式-代理模式

    什么是代理模式 代理模式 Proxy Pattern 是设计模式中的一种结构型模式 它为其他对象提供一种代理以控制对这个对象的访问 代理模式有三个主要角色 抽象主题 Subject 真实主题 Real Subject 和代理 Proxy 抽
  • Bootstrap使用方法(个人经验,仅限参考)

    下载Bootstrap 将Bootstrap导入到所需要的项目中 将Bootstrap的css和js的路径引入到所需要的页面 选择所需要的插件 粘贴到所需要的位置 菜鸟教程实例 Bootstrap的JavaScript脚本带有监听事件方法
  • kl散度matlab实现,Kullback–Leibler divergence KL散度

    In probability theory and information theory the Kullback Leibler divergence 1 2 3 also information divergence informati
  • Bash中分号“;”、与“&&“、或(

    linux 中 bash 下执行多个命令时 操作符的区别 cmd1 cmd2 cmd1 和 cmd2 都会 被执行 cmd1 cmd2 如果 cmd1 执行 成功 则执行 cmd2 cmd1 cmd2 如果 cmd1 执行 失败 则执行 c
  • 2022-12-30 Ubuntu 运行qt creator提示qt.qpa.plugin: Could not load the Qt platform plugin “xcb“

    一 Ubuntu 运行qt creator提示qt qpa plugin Could not load the Qt platform plugin xcb qt qpa plugin Could not load the Qt platf
  • python弹球游戏彩蛋

    在上一期 我们已经实现了基本弹球的功能 先总结一下上期的代码 import pygame pygame init width 800 height 600 screen pygame display set mode width heigh
  • OpenGL ES2.0粒子系统(附有源码)

    http blog csdn net cxy200927099 article details 38584487 刚学OpenGL 2个多星期 也算是入门了吧 在看了老外写的书 OpenGL ES 2 for Android A Quick
  • 雅特力at421f串口2串口1互发透传

    void USART1 IRQHandler void static u8 k USART ClearFlag USART1 USART FLAG TC 清除USARTx的待处理标志位 if USART GetITStatus USART1
  • 目标检测:SSD算法原理综述

    SSD Single Shot Detection 是一个流行且强大的目标检测网络 网络结构包含了基础网络 Base Network 辅助卷积层 Auxiliary Convolutions 和预测卷积层 Predicton Convolu