SSD详解

1 SSD介绍

Single Shot MultiBox Detector(SSD, 单步多框 目标检测)

2 SSD结构

SSD 基础网络结构使用VGG

全部结构如下:

重用Faster R-CNN的Anchors机制,在feature map上提取各种不同尺度大小的default box,也就是类似Anchor的一系列大小固定的框

1 先使用VGG中的Conv4_3特征图来类似RPN的操作进行分类和回归来生成候选框,对于Con4_3的数据提取的时候,会先对feature map做一个L2 norm的操

作,因为层次比较靠前,防止出现数据值过大的情况

2 在使用FC7层(被替换成卷积层)提取的特征图来生成候选框

3 再使用被卷积两次的特征图来生成候选框,以此类推,直到卷积为特征图为1x1大小为止

上图结构中基础网络结构使用VGG,并且将FC6Layer和FC7 Layer转换为卷积层,并将原来的Max Pooling5的大小从2x2-s2变 化为3x3-s1,这样pooling5操作后 feature map还是保持较大的尺寸, 重要 可以保证每个区域提取出重要特征
为了保障感受野以及利用到原来的FC6和FC7的模型参数,使用atrous algorithm的方式来增大感受野,也就是 膨胀卷积/空洞卷积, 类似下面的图,图中下面部分黑色块,就是提取这些特征,其他的设置为0
主要是通过conv2d的函数中 dilation的参数来控制, dilation=2时,在这种情况下,使用3x3的卷积核实际上会覆盖5x5的输入区域
膨胀卷积核尺寸=膨胀系数*(原始卷积核尺寸-1)+1
Conv6(fc6)中卷积核kernel为3,pad为6, dilation为6,所以相当于真实的卷积核大小为13,pad为6是为了保障输出feature map大小尺度不变,仍为19x19。
比较大的特征图负责小样本检测,比较小的特征图负责大样本检测
结合R FCN网络的优点, 将所有的全连接网络全部更改为全卷积网络结构。
使用卷积来提取候选框特征(offset box+score)
总共得到候选框如下图

3 先验框的提取

在提取先验框的时候,主要通过 尺度(大小) 长宽比 两个方面来进行设置,其中在先验框尺度上遵守一个线性递增规则: 随着特征图大小降低,先验框 尺度线性增加
下图中的意思为如果在输入图像尺寸为300x300的情况下, conv4-3层的缩放因子为0.1,因此默认锚框的尺寸为 300 * 0.1 = 30 像素。同理, conv11-2层的缩放因子为0.9,所以其默认锚框的尺寸为 300 * 0.9 = 270 像素。这样的设计允许模型在多个尺度上检测对象,有助于提高模型对不同大小对象的检测能力
在提取先验框的时候,主要通过 尺度(大小) 长宽比 两个方面来进行设置,在长宽比上,论文中建议比率值选择范围为: [1, 2, 3, 1/2, 1/3]。对于Conv4-3、Conv10-2以及Conv11-2这三层,由于仅使用4个先验框,不使用1:3和3:1的这个比例值
除了使用上述5个长宽比外,还引入一个特殊尺度并且长宽比为1的先验框。 引入这个框的主要目的是为了体现最终的候选框中出现两个长宽比为1但是 大小不同的正方形先验框。
就是说,右边的特殊尺度是左边两个数用左边公式所得,最后一层加一个虚拟值来完成最后一个的特殊尺度的数
下图为得到的候选框的像素大小

4 训练/预测阶段

1 训练正负样本获取

在训练阶段,选取正样本为iou大于0.5的先验框,小于等于0.5的为负样本,控制在正样本与负样本的比例为1:3,又因为,负样本肯定远大于正样本数量,所以采用 Hard Negative Mining 难负样本挖掘算法 对数据进行处理,具体介绍在图下
训练数据类别给定标准:
1 正样本:若先验框和Ground Truth框匹配, 那么认为当前先验框为正样本;
2 负样本:若先验框和所有Ground Truth框都不匹配,那么认为当前先验框为负样本。
NOTE: 采用hard negative mining(难负样本挖掘算法)选择loss大的样本作为负样本,正负样本比例1:3;
SSD的先验框与Ground Truth的匹配原则主要有几点:
1. 对于图片中每个Ground Truth,找到与其IoU最大的先验框,该先验框与其匹配,
2. 对于剩余的未匹配先验框,若其和某个Ground Truth的 IoU 大于某个阈值(一般是0.5),那么该先验框也与这个Ground Truth进行匹配。这意味着某个Ground Truth可能与多个先验框匹配,这是可以的。
3. 如果某个先验框和多个Ground Truth的IoU值大于阈值或者是最大IoU的先验框,那么这个先验框仅和IoU最大的那个Ground Truth匹配。

2 Hard Negative Mining

在生成先验框后,会产生很多符合Ground Truth Box的先验框,但是不符合的边框会更多,也就是negative boxes的数目远多于positive boxes的数目,也就会导致数据之间极度不均衡的情况出现,训练的时候比较难收敛。故在SSD中,采用R-CNN中介绍的 难负样本挖掘算法 对数据进行处理。将每个物体位置上对应的default boxes是negative的boxes按照前向loss的大小进行排序,获取loss比较大的N个negative boxes参与模型训练,最终保证正负样本比例在1:3左右。
就是要那种判断负样本是背景的loss比较大的,这样选取的先验框负样本,相对不容易判断是背景和物体,这样可以更好的训练模型的分类能力。

3 数据增强

Data augmentation(数据增强)
水平翻转(Horizontal Flip)
2 随机剪裁加颜色扭曲(Random Crop & Color Distortion)
3 随机采集块域(Randomly sample a path)

4 损失计算

SSD(Single Shot MultiBox Detector)的损失函数是多任务损失函数,它由两部分组成:定位损失(loc)和置信度损失(conf)。定位损失用于衡量预测边界框和真实边界框之间的差异,通常使用Smooth L1损失来计算;置信度损失用于衡量预测的类别和真实类别之间的差异,通常使用交叉熵损失来计算。

5 预测阶段

  1. 前向传播:输入图像通过SSD网络,网络会生成一系列不同尺度的特征图。

  2. 生成预测框:每个特征图上的每个单元格会根据一组默认的锚框(anchor boxes)生成预测框(也叫做候选框)。每个预测框都有对应的类别置信度和位置偏移量。

  3. 过滤背景类:对于每个预测框,首先根据类别置信度确定其类别(置信度最大者),并过滤掉属于背景的预测框。

  4. 置信度阈值过滤:然后根据置信度阈值(如0.5)过滤掉置信度较低的预测框。

  5. 解码预测框:对于留下的预测框,根据默认框(anchor box)和预测的偏移量对它们进行解码,得到预测框的实际坐标。

  6. 坐标裁剪(Clipping):解码后的坐标可能超出图像边界,需要裁剪它们以确保预测框完全位于图像内。

  7. 降序排列:根据置信度对解码后的预测框进行降序排列。

  8. 选择Top-k:选取排在前k个的预测框进行后续处理,k的值取决于实际应用的需求。

  9. 非极大值抑制(NMS):使用NMS算法移除那些具有高度重叠并且置信度较低的预测框。这一步骤是为了确保每个物体只被检测一次。

  10. 最终检测框:NMS过后剩余的预测框就是最终的检测结果。

在实际应用中,IoU阈值、置信度阈值、Top-k的值和NMS阈值都是可调的超参数,可以根据不同的应用场景进行优化。

在SSD(Single Shot MultiBox Detector)模型中,"clip"这一步骤指的是将预测框的坐标限制在图像边界内。由于模型的预测可能会生成超出原始图像边界的框坐标,"clip"操作确保所有的预测框坐标都不会超过图像的宽度和高度。

具体来说,如果预测框的某个坐标(比如左上角的x坐标)小于0,那么这个坐标会被设置为0;同样地,如果预测框的某个坐标(比如右下角的x坐标)大于图像的宽度,那么这个坐标会被设置为图像的宽度。这个过程适用于框的所有四个坐标(左上角的x和y,右下角的x和y)。

"clip"操作是预测后处理的一部分,它在预测框解码后进行,确保了检测结果在逻辑上是合理的,因为检测框不可能存在于图像的外部。这也有助于后续的非极大值抑制(NMS)步骤,因为它依赖于框的准确坐标来计算重叠度

5 简单总结

1. 使用anchor box作为候选框,特定的anchor box的计算规则;
2. 在不同层次的feature map上提取anchor box,用来预测不同尺度大小的图像;
3. 在同一个feature map上,使用不同高宽比的anchor box;
4. 使用膨胀卷积增大感受野;
5. 正负样本的划分方式;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/356406.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(七)for循环控制

文章目录 用法while的用法for的用法两者之间的联系可以相互等价用for改写while示例for和while的死循环怎么写for循环见怪不怪表达式1省略第一.三个表达式省略(for 改 while)全省略即死循环(上面已介绍) 用法 类比学习while语句 …

蓝牙简学(四)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 HID协议一、摘要二、设备实现1. 大概要写的数据解释2. 代码例子3. 代码例子(c) HID协议 一、摘要 HID(Human Interface Device…

day11_oop

今日内容 零、 复习昨日 一、作业 二、封装 三、继承 四、重写 五、this和super 六、访问修饰符 零、 复习昨日 数组创建的两种方式 new int[3];new int[]{1,2,3,4}; 手写一个遍历输出数组元素的伪代码 构造方法什么作用? 创建对象,将对象的属性初始化 有参无参构造什么区别?…

高价画师的低价服务,会被AI绘画完全取代吗?

花3万块钱买一张画,值吗? 买家花三万块钱买一张网红画师眠狼的画,提前给出了参考图和要求,但最终拿到的作品却货不对板,脸和身体严重割裂,修改一次还要加一千,在互联网上闹得沸沸扬扬。 眠狼是业内著名的画手,又叠加上了网红的buff,参加过多次游戏二创活动,确实有一…

python集合是否可变总结

集合是一个无序的可变的序列。集合中的元素必须是可hash的,即不可变的数据类型。 空集合 aset() 注意a{}创建的是一个空字典。 set —— 可变集合。集合中的元素可以动态的增加或删除。 frozenset —— 不可变集合。集合中的元素不可改变。 注:对于…

C语言第十二弹--扫雷

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 扫雷 1、扫雷游戏分析和设计 1.1、扫雷游戏的功能说明 1.2 游戏的分析和设计 1.2.1、数据结构的分析 1.2.2、文件结构设计 2、扫雷游戏的结构分析 2.1、用…

权威认可 | 全息网御多领域入选《CCSIP 2023中国网络安全行业全景册(第六版)》

2024年1月24日, FreeBuf咨询正式发布《CCSIP(China Cyber Security Industry Panorama)2023中国网络安全行业全景册(第六版)》。FreeBuf咨询全景图/全景册系列,以PDR网络安全模型为基础,并参考I…

springboot mongodb简单教程

(1)依赖 compile(org.springframework.boot:spring-boot-starter-data-mongodb) (2)application.properties配置文件 spring.data.mongodb.host127.0.0.1 spring.data.mongodb.port27017 spring.data.mongodb.databasetest &a…

开源大规模分布式MQTT消息服务器EMQX部署教程

1.EMQX是什么? EMQX 是一款开源的大规模分布式 MQTT 消息服务器,功能丰富,专为物联网和实时通信应用而设计。EMQX 5.0 单集群支持 MQTT 并发连接数高达 1 亿条,单服务器的传输与处理吞吐量可达每秒百万级 MQTT 消息,并…

openGaussdb5.0单点企业版部署_Centos7_x86

本文档环境:CentOS7.9 x86_64 4G1C40G python2.7.5 交互式初始化环境方式 介绍 openGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行。openGauss内核深度融合华为在数据库领域多年的经验,结合企业级场景需求,持续…

回归预测 | Matlab实现CPO-LSSVM【24年新算法】冠豪猪优化最小二乘支持向量机多变量回归预测

回归预测 | Matlab实现CPO-LSSVM【24年新算法】冠豪猪优化最小二乘支持向量机多变量回归预测 目录 回归预测 | Matlab实现CPO-LSSVM【24年新算法】冠豪猪优化最小二乘支持向量机多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CPO-LSSVM【24年…

写静态页面——魅族导航_前端页面练习

0、效果&#xff1a; 1、html代码&#xff1a;&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…

springboot+vue3支付宝接口案例-第二节-准备后端数据接口

springbootvue3支付宝接口案例-第二节-准备后端数据接口&#xff01;今天经过2个小时的折腾。准备好了我们这次测试支付宝线上支付接口的后端业务数据接口。下面为大家分享一下&#xff0c;期间发生遇到了一些弯路。 首先&#xff0c;我们本次后端接口使用的持久层框架是JPA。这…

Java基础数据结构之哈希表

概念 顺序结构以及平衡树 中&#xff0c;元素关键码与其存储位置之间没有对应的关系&#xff0c;因此在 查找一个元素时&#xff0c;必须要经过关键 码的多次比较 。 顺序查找时间复杂度为 O(N) &#xff0c;平衡树中为树的高度&#xff0c;即 O( log2N ) &#xff0c;搜索的效…

【极数系列】Flink环境搭建Linux版本 (03)

文章目录 引言01 Linux部署JDK11版本1.下载Linux版本的JDK112.创建目录3.上传并解压4.配置环境变量5.刷新环境变量6.检查jdk安装是否成功 02 Linux部署Flink1.18.0版本1.下载Flink1.18.0版本包2.上传压缩包到服务器3.修改flink-config.yaml配置4.启动服务5.浏览器访问6.停止服务…

1002. HarmonyOS 开发问题:鸿蒙 OS 技术特性是什么?

1002. HarmonyOS 开发问题&#xff1a;鸿蒙 OS 技术特性是什么? 硬件互助&#xff0c;资源共享 分布式软总线 分布式软总线是多种终端设备的统一基座&#xff0c;为设备之间的互联互通提供了统一的分布式通信能力&#xff0c;能够快速发现并连接设备&#xff0c;高效地分发…

Redis 笔记四

概要&#xff1a; 1.高并发场景秒杀抢购超卖bug实战重现 2.阿里巴巴内部高并发秒杀下单方案首次揭秘 3.基于ReddisMQ实现秒杀下单架构 4.10万订单每秒热点数据架构优化实践 5.秒杀下单MQ如何保证不丢失消息 6.解决MQ下单消息重复消费幂等机制详解 7.线上MQ百万秒杀订单发生积压…

系统架构设计师教程(十九)大数据架构设计理论与实践

大数据架构设计理论与实践 19.1 传统数据处理系统存在的问题19.2 大数据处理系统架构分析19.2.1 大数据处理系统面临挑战19.2.2 大数据处理系统架构特征19.3 Lambda架构19.3.1 Lambda架构对大数据处理系统的理解19.3.2 Lambda架构应用场景19.3.3 Lambda架构介绍19.3.4 Lambda架…

ctfshow web71

开启环境&#xff1a; c?><?php $anew DirectoryIterator("glob:///*"); foreach($a as $f) {echo($f->__toString(). );} exit(0); ?> cinclude("/flagc.txt");exit();

解决方案—幻兽帕鲁Palworld私服部署 一杯茶的功夫搭建部署一个属于自己的游戏私服

《幻兽帕鲁》是Pocketpair开发的一款开放世界生存制作游戏 &#xff0c;游戏于2024年1月18日发行抢先体验版本&#xff0c;游戏中&#xff0c;玩家可以在广阔的世界中收集神奇的生物“帕鲁”&#xff0c;派他们进行战斗、建造、做农活&#xff0c;工业生产&#xff0c;游戏目前…