目标检测 | 清晰易懂的SSD算法原理综述

ssd网络结构_目标检测算法SSD结构详解 ❝上期我们一起学习了Faster RCNN的损失函数以及如何进行模型训练的相关知识,如下:Faster RCNN的损失函数以及模型训练流程❞本文主要学习:One-Stage / Two-StageSSD模型结构我们知道之前学的RCNN系列需要选取候选框和分类回归两步操作,称为Two-Stage类算法。今天我们学习一种新的目标检测算法SSD(Single Shot MultiBox Det... 阅读详情

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网络包含了基础网络,辅助卷积层和预测卷积层:

  • 基础网络:提取低尺度的特征映射图

  • 辅助卷积层:提取高尺度的特征映射图

  • 预测卷积层:输出特征映射图的位置信息和分类信息

下面介绍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。

现在我们知道了如何选择负类,那么如何预测分类损失函数?关于多分类任务,我们常用交叉熵来评价分类损失函数。

若预测的类个数为K(包含了背景类),交叉熵公式如下:

其中为真实类属于第 i 类概率,若属于第 i  类则

;若不满足则。为预测类属于第i类的概率,每个先验框的预测类是一个1行K列的矩阵。

若交叉熵损失函数为CE Loss,预测类的损失为,有:

 

 

其中N_P和N_hn分别为正类、负类个数。

 

总损失函数为预测类损失和预测位置损失之和,记为L,有:

α常设置为1,或者也可作为待学习的参,SSD论文中设置α等于1。

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

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

 

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

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

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

猫的预测矩形框如下表:

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

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

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

5.SSD网络的算法流程

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

训练阶段:

预测阶段

6.小结

本文介绍了SSD算法框架及原理,由于算法细节较多以及篇幅的关系,小编选择了几个非常重要且设计很巧妙的细节进行介绍,更详细内容的链接https://github.com/sgrvinod/a-PyTorch-Tutorial-to-Object-Detection,对于英文不好的同学,可参考该文帮助理解,若有不懂欢迎交流。

推荐阅读

520 页机器学习笔记!图文并茂可能更适合你,文末附下载方法

李航老师《统计学习方法》(第2版)课件分享,文末附下载

Github | 吴恩达新书《Machine Learning Yearning》完整中文版开源

经典好书 | 141页的《Deep Learning with PyTorch》开源书籍

400页《TensorFlow 2.0 深度学习算法实战》中文版教材免费下载

欢迎扫码关注:

深度学习目标检测:RCNN,Fast,Faster,YOLO,SSD比较 这篇博文很简单,我就画了一个图,将各自的要点进行比较说明。相信这样看过去就一目了然了,但是需要说明的还是: YOLO可能不应该放在这里,但是为了和SSD进行比较还是放了。另外,YOLO出了第二版本了,所以放在这边也没有问题。iker Peng2017年1月10日 阅读详情

相关推荐

目标检测模型SSD详解与实现

本文介绍了基于 Keras 的 SSD 实时目标检测技术的原理与实现。SSD 通过单次前向传播即可完成目标检测,在现代 GPU 上可实现实时检测,且支持端到端训练。详细阐述了 SSD 的损失函数设计,包括类别预测的交叉熵损失(或改进的焦点损失)和偏移量预测的平滑 L1 损失,以解决类别不平衡问题。SSD 模型架构采用 ResNet 等预训练网络作为骨干网络进行特征提取,并通过多尺度特征图预测不同尺寸的锚框类别和偏移量。此外,还提供了使用 Keras 实现 SSD 模型的完整代码。

盼小辉丶的博客 2667

SSD算法简单介绍

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层;添加

qq_42732137的博客 9219

关系代数表达式优化步骤

关系代数表达式优化步骤 本篇主要讲解怎么画查询语法树并对其优化,因为我在学关系代数的语法树的时候,在网上找不到比较详细的教法或者技巧,最后通过答案反推原理,所以想写一篇技巧来描述一下这类题的解题方法。 先上书内讲解 1、构造查询树 第一步:把用高级语言定义的查询转换为关系代数表达式 ★ 以 SELECT子向对应投影操作,以FROM字向对应笛卡尔积以 WHERE子句对应选择操作,生成原始查询树 ★ SQL语句转化为原始查询树 第二步:把关系代数表达式转换为查询树。 注: 查询树是一种表示关系代数表达式的树形结

m0_51718449的博客 7016

single-shot detection(SSD)目标检测算法详解——(一看就懂系列!!!)

SSD是One-stage系列的优秀算法之一 one-stage的意思是挑选候选框和预测候选框两步是同时完成的,R-CNN家族都是two-stage。 SSD有什么创新点? (1)基于Faster-RCNN的Anchor,提出了prior anchor(先验框)。 (2)从不同比例的特征图中预测物体(多尺度预测),并明确长宽比分离预测。 SSD的backbone是VGG,这一点和Faster R-CNN是相同的,但是将后面的全连接层(FC)换成卷积层,且直接用卷积层进行预测,多尺度预测+不同宽高比可以较好的

weixin_45074568的博客 3088

缺陷检测-金属表面缺陷检测

1介绍 缺陷检测是工业视觉技术中最重要的组成部分。业务广泛,场景丰富,技术难点高、工作量大。针对不同的场景,选择不同的相机和

huneng1991的专栏 5250

OBS直播美颜全攻略:从插件下载到参数调校一站式指南

本文提供OBS直播美颜插件从下载安装到参数调校的一站式指南。详细介绍了如何安全获取并安装OBS美颜插件,重点讲解了在OBS中添加美颜滤镜的核心步骤,并分享了磨皮、肤色调整、细节增强等关键参数的实战调校技巧,帮助主播打造自然、专业的直播形象。

weixin_29197835的博客 329

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

SSD(Single Shot Detection)是一个流行且强大的目标检测网络,网络结构包含了基础网络(Base Network),辅助卷积层(Auxiliary Convolutions)和预测卷积层(Predicton Convolutions)。 本文包含了以下几个部分: (1)理解SSD网络算法所需要理解的几个重要概念 (2)SSD网络框架图 (3)SSD网络中几个重要概念的详...

那年聪聪 1万+

R语言笔记十:独立性检验函数

1.独立性检验函数        独立性检验是根据频数信息判断两类因子彼此相关或相互独立的假设检验。所谓独立性就是指变量之间是独立的,没有关系。 独立性检验算法:卡方检验、Fisher检验、Cochran-Mantel-Haenszel检验 2.假设检验 假设检验(Hypothesis Testing)是数理统计学中根据一定假设条件由样本推断总体的一种方法。 原假设——没有发生 备择假设——发生了 具体做法:根据问题的需要对所研究的总体作

weixin_44384631的博客 4111

Single Shot Detection 的前世今生

本文提及OverFeat、YOLO系列以及SSD网络,以个人的想法来说明几篇论文中的或精彩或疑惑的内容,另从演变的角度来看Single Shot Detection的技术一步步的发展。 以此也来总结近二十天的暑期集训给诸位共享。

尼伯龙根 3291

使用ClickHouse JDBC官方驱动,踩坑无数

这个问题我在网上查原因说是由于Zookeeper压力过大,表变成只读状态,导致ClickHouse插入数据失败。写入数据频率过高。Zookeeper中的集群节点挂掉。而我们项目出现这个问题的原因是第一个:写入数据频率过高。但是在网上搜资料的过程中,我又发现了另外一个问题:我们项目用了JDBC驱动,但ClickHouse官方并不推荐。。证实了官网确实不建议使用驱动:而应该改成驱动,并且推荐使用0.3.2以上的版本:于是,后面几天开始了ClickHouse的JDBC驱动升级之旅。

2万+

在iPad上使用Python进行编程

如果你拥有一台iPad,并且想在上面编写和运行Python代码,你会发现iPad提供了一些适用的工具和应用程序来满足你的需求。安装一个Python解释器应用程序,编写和运行Python代码,使用第三方库和模块,以及存储和共享代码,这些步骤将帮助你在iPad上进行Python编程。要在iPad上运行Python代码,首先需要安装一个Python解释器。这些应用程序提供了一个交互式的开发环境,允许你编写、编辑和运行Python代码。一旦你安装了Python解释器应用程序,你可以开始编写Python代码了。

2301_79366435的博客 4628

python ssd目标检测_目标检测 | 清晰易懂的SSD算法原理综述

点击上方“计算机视觉life”,选择“星标”快速获得最新干货SSD(Single Shot Detection)是一个流行且强大的目标检测网络,网络结构包含了基础网络(Base Network),辅助卷积层(Auxiliary Convolutions)和预测卷积层(Predicton Convolutions)。本文包含了以下几个部分:(1)理解SSD网络算法所需要理解的几个重要概念(...

weixin_39585035的博客 519

(四)激光线扫描-光平面标定

激光发射器投射出一条线,形成的一个扇形区域平面就是光平面,也叫光刀面,与物体相交就形成了一道线激光。如果物体形状不是规则的,自然相交的线就会是一条蜿蜒曲折的线条。AxByCzD0AxByCzD0从而可以获得图像线激光上像素点的深度。💡 注意:平面方程是在同一个坐标系下定义的(如相机坐标系),所以一旦激光平面标定完成之后,激光器和相机的相对位置就必须固定不动了。

FlyWine的博客 6139

目标检测算法之SSD代码解析(万字长文超详细)

前言 前面的推文已经介绍过SSD算法,我觉得原理说的还算清楚了,但是一个算法不深入到代码去理解是完全不够的。因此本篇文章是在上篇SSD算法原理解析的基础上做的代码解析,解析SSD算法原理的推文的地址如下:https://mp.weixin.qq.com/s/lXqobT45S1wz-evc7KO5DA。今天要解析的SSD源码来自于github一个非常火的Pytorch实现,已经有3K+星,地址为:...

I good vegetable a! 7440

深入理解 HTTP 协议中的 Content-Type

是 HTTP 协议中的一个头部字段(Header),用于指示请求或响应中实体主体(body)的媒体类型(Media Type),也称为MIME 类型(Multipurpose Internet Mail Extensions)。

h a 6 6 6 c k 为 你解决复杂难题! 997

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

SSD算法原理与代码(三)

SSD算法原理与代码

zichuanning520的博客 4074

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

目标检测学习笔记(三)SSD算法

目标检测

Joke 1726

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

python ssd目标检测_SSD目标检测

SSD,全称Single Shot MultiBox Detector,是Wei Liu在ECCV 2016上提出的一种目标检测算法,截至目前是主要的检测框架之一,相比Faster RCNN有明显的速度优势,相比YOLO又有明显的mAP优势(不过已经被CVPR 2017的YOLO9000超越)。图1 速度对比SSD具有如下主要特点:从YOLO中继承了将detection转化为regression的...

weixin_39683144的博客 349

SSD算法及相关算法改进资源集:实时目标检测的利器

SSD算法及相关算法改进资源集:实时目标检测的利器 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在计算机视觉领域,目标检测是一项关键任务,而SSD算法及相关算法改进资源集,是帮助研究人员和开发人员深入了解并掌握SSD(Single Shot MultiBox Detector)算法的宝贵资料集合。SSD算法以其高效、实时、精准的特点,在目标检测任务中占据重要地位,本...

gitblog_06711的博客 853

SSD目标检测算法Backbone构建(基于keras)

SSD目标检测算法简介: 论文地址:https://arxiv.org/abs/1512.02325 全称:Singel Shot MultiBox Detector(那么为什么不叫SSMD呢,可能因为不太好听吧) SSD属于one-stage目标检测算法,就是目标的分类和检测任务是同时完成的(从始至终都是用一个网络)。 SSD其实是在Yolo上进行了改进:如下图所示,简单来说SSD最明显的特征就...

weixin_38495031的博客 1296

SSD目标检测:tensorflow 版本调试以及出现错误的解决方法

这里分享一下我在进行复现目标检测算法 SSD-Tensorflow 版本的调试经验。 首先贴上论文链接:SSD: Single Shot MultiBoxDetector Tensorflow 版本的Code Link:SSD-TF版 1 调试过程 1.1 明确代码结构 这里使用的 SSD-Tensorflow 版本有明晰的结构,在github的ReadMe部分也可以清晰的看懂但是有一些细节需要提...

丑小鸭 3600

目标检测——SSD

我们知道Yolo的核心思想是将物体检测问题转化了单一的回归问题(之前的是分类和回归问题),而SSD算法是一种直接预测目标类别和bounding box的多目标检测算法。在正式介绍SSD之前,我们先来看一下论文,了解了这篇论文之后,SSD的思路就会清晰很多。 Paper:Scalable Object Detection using Deep Neural Networks 论文:基于深度网...

PRIS-SCMonkey的博客 3278

开源力荐:基于OpenCV的SSD目标检测——C++实战利器

开源力荐:基于OpenCV的SSD目标检测——C++实战利器 【下载地址】OpenCVSSD目标检测C 本项目旨在提供一个快速上手的目标检测解决方案,利用OpenCV强大的DNN(深度神经网络)模块,集成SSD(Single Shot MultiBox Detector)算法,让开发者能够便捷地在C++环境中实现图像中的...

gitblog_09807的博客 1025

探索高效目标检测新境界:基于TensorFlow的SSD简易实践

探索高效目标检测新境界:基于TensorFlow的SSD简易实践 在快速发展的计算机视觉领域,目标检测无疑是至关重要的一个环节。今天,我们要向您推荐一个以简洁明了为设计宗旨的目标检测开源项目——SSD_for_Tensorflow。此项目针对Single Shot MultiBox Detector(SSD)这一前沿算法,提供了精简版的TensorFlow实现,旨在帮助开发者,特别是初学者,快速理...

gitblog_00283的博客 776
上一篇: 《Nature》发文:好导师的16个标准
下一篇: 用Python和Pandas进行数据清理:检测丢失值
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值