Python----目标检测(《SSD: Single Shot MultiBox Detector》论文和SSD的原理与网络结构)
一、SSD:单次多框检测器
1.1、基本信息
-
标题:SSD: Single Shot MultiBox Detector
-
作者:Wei Liu (UNC Chapel Hill), Dragomir Anguelov (Zoox Inc.), Dumitru Erhan, Christian Szegedy (Google Inc.), Scott Reed (University of Michigan), Cheng-Yang Fu, Alexander C. Berg (UNC Chapel Hill)
-
发表时间:2016年(基于参考文献中最新引用为2016年)
-
代码开源:weiliu89/caffe at ssd
原文地址:
[1512.02325] SSD: Single Shot MultiBox Detector
SSD: Single Shot MultiBox Detector | SpringerLink
1.2、主要内容
SSD(Single Shot MultiBox Detector)是一种单阶段目标检测模型,其核心创新包括:
多尺度特征图预测:
在不同层级的卷积特征图上生成不同尺度和长宽比的默认边界框(default boxes),覆盖多种物体尺寸。
通过卷积操作直接预测类别得分和边界框偏移量,无需候选区域生成(如Faster R-CNN中的RPN)。
高效的单次检测框架:
消除了传统方法中的像素重采样和特征池化步骤,所有计算集成在单一网络中,显著提升速度。
使用小卷积核(3×3)进行预测,保留空间信息的同时减少参数量。
数据增强与训练策略:
采用随机裁剪、缩放和颜色扰动增强数据,提升模型对小物体的检测能力。
通过“难例挖掘”(hard negative mining)平衡正负样本比例,优化训练过程。
性能优势:
输入分辨率300×300时,在VOC2007测试集上达到74.3% mAP,速度59 FPS(Titan X GPU),优于Faster R-CNN(73.2% mAP,7 FPS)和YOLO(63.4% mAP,45 FPS)。更
高分辨率(512×512)下,mAP提升至76.9%,速度仍接近实时(22 FPS)。
1.3、影响和作用
推动实时检测发展:
SSD是首个在保持高精度(>70% mAP)的同时实现实时检测(59 FPS)的模型,为嵌入式系统和实时应用(如自动驾驶、视频监控)提供了高效解决方案。
技术启发性:
多尺度特征图与默认框设计被后续模型(如RetinaNet、EfficientDet)广泛借鉴,成为单阶段检测器的经典范式。
证明了单阶段方法在速度和精度上可超越两阶段方法(如Faster R-CNN),推动目标检测领域向轻量化发展。
实际应用价值:
模型结构简单,易于与其他系统(如视频跟踪、多任务学习)集成,促进了工业界的快速落地。
在COCO等复杂场景数据集上表现优异,为密集和小物体检测提供了新思路。
学术贡献:
论文通过系统实验(如消融分析)验证了多尺度预测、数据增强等关键设计的有效性,为目标检测研究提供了重要参考。
开源代码极大推动了社区复现与改进,累计引用量超万次(截至2023年),成为目标检测领域的里程碑工作之一。
二、SSD
2.1、SSD介绍
注意:SSD是2016年的网络,它要比2015年的YOLOV1晚出来一年。
SSD速度与性能:
输入尺寸300x300的网络:使用NVIDIA Titan X帧率为59FPS,在 VOC2007测试集上74.3%mAP。
输入尺寸512x512的网络:在VOC2007测试集上76.9%mAP,超越当时最 强的FasterRCNN的73.2%mAP。
two-stage:找框+回归与分类。
one-stage:全部放在一个网络中实现。
Faster RCNN的问题:模型大速度慢、对小目标检测效果差(经过多次卷 积后,feature map的维度太高,3*3的感受野很大了,所以Anchor Box 很大导致很难预测小目标)(FPN优化了对小目标检测效果差的问题)。
原理:
SSD结合了多尺度特征图来检测不同大小的目标。其基本原理与实现流程 包括:
使用卷积神经网络(CNN)提取图像特征。
在不同层级的特征图上应用预测器来检测和定位目标。
使用默认框(default boxes)来处理不同尺度和比例的目标。
结合多层特征图的预测结果来提高检测性能和精度。
2.2、SSD网络结构
1. 将图片缩放到300x300,类似于OpenCV的resize,channels为3。
2. 通过到Pool5层:可以参考附录1的VGGNet16的网络特征图变化,输 入是300x300,经过5个conv组之后分别为:150->75->38->19,所以 显示的Conv4_3是38x38x512(这是一个预测特征层,称为预测特征层 1),在经过Conv4_3是19x19x512,正常的VGGNet-16接下来经过 Pool5(池化核2,步长2),但是SSD对Pool5做了修改(池化核3,步 长1,padding=1),所以在经过Pool5后,输出为19x19x512。
3. 经过Conv: 3x3x1024,得到19x19x1024的卷积结果,原始VGGNet16 的第一个全连接层(FC6)。
4. 经过Conv: 1x1x1024,得到19x19x1024的卷积结果(这是一个预测特 征层,称为预测特征层2),原始VGGNet16的第一个全连接层(FC7)。
5. 经过Conv: 1x1x256降维,在经过Conv: 3x3x512(s=2, padding=1)得到10x10x512(这是一个预测特征层,称为预测特征层 3)。
6. 经过Conv: 1x1x128降维,在经过Conv: 3x3x256(s=2, padding=1)得到5x5x256(这是一个预测特征层,称为预测特征层 4)。
7. 经过Conv: 1x1x128降维,在经过Conv: 3x3x256(s=1, padding=0)得到3x3x256(这是一个预测特征层,称为预测特征层 5)。
8. 经过Conv: 1x1x128降维,在经过Conv: 3x3x256(s=1, padding=0)得到1x1x256(这是一个预测特征层,称为预测特征层 6)。
卷积公式:feature-kernel+2*P/stride+1,向下取整。
在预测特征层上会预测不同大小的目标,在前面的预测特征层上会预测较 小的目标,在后面的预测特征层上会预测较大的目标。
2.3、在预测特征层进行预测
SSD中的具有一个叫默认框(default boxes)的东西,有时也称为先验框 (prior boxes),是预定义的一组边界框,用于在训练过程中预测目标的 位置和大小。
默认框的设计和使用是SSD算法的重要部分,其主要目的是高效地处理不 同尺度和不同宽高比的目标,有点像默认的Anchor Box。
默认框是在不同尺度和宽高比下,预先定义的一组边界框。每个默认框与 特定的特征图位置(像素)相关联,并且在训练过程中,网络会预测这些 默认框与实际目标边界框的偏移量和类别。
2.3.1、默认框的生成
1. 特征图尺度: SSD在不同的特征图上生成默认框。通常,网络的早期层具有高分 辨率的特征图,用于检测小目标;后期层具有低分辨率的特征图, 用于检测大目标。
2. 框的数量和比例: 在每个特征图位置,SSD生成多个默认框,每个框具有不同的比例 和宽高比(如1:1、2:1、1:2、3:1、1:3等)。这使得默认框能够覆 盖不同形状和大小的目标。
3. 框的中心和大小: 每个默认框的中心与特征图的一个位置对齐,框的大小根据特征图 层的比例进行设置。具体公式如下: 假设特征图大小为m*m ,每个特征图位置会生成多个默认 框。 默认框的宽度和高度根据不同的比例和尺度进行设置。
2.3.2、PyTorch默认框的生成方案
一共有6层预测特征层,分别为conv4_3、fc7、conv8_2、conv9_2、 conv10_2、conv11_2。
conv4_3 ==> 38 x 38
fc7 ==> 19 x 19
conv8_2 ==> 10 x 10
conv9_2 ==> 5 x 5
conv10_2 ==> 3 x 3
conv11_2 ==> 1 x 1
其中,DefaultBoxGenerator类:
aspect_ratios参数
纵横比,输入的是 [[2], [2, 3], [2, 3], [2, 3], [2], [2]],对应 每一层的预测特征层的默认框的纵横比,这里的[2]指的是:比例为2,实 际上会附加上1:1的,结合上1:2,2:1的,也就是3个纵横比1:1、1:2, 2:1。
输入 | 纵横比 |
---|---|
[2] | 1:1 1:2 2:1 |
[2, 3] | 1:1 1:2 2:1 1:3 3:1 |
[2, 3] | 1:1 1:2 2:1 1:3 3:1 |
[2, 3] | 1:1 1:2 2:1 1:3 3:1 |
[2] | 1:1 1:2 2:1 |
[2] | 1:1 1:2 2:1 |
min_ratio/max_ratio参数
这里即是论文中所说的Smin=0.2,Smax=0.9的初始值,经过下面的运算 即可得到min_sizes,max_sizes,只是在PyTorch中Smin=0.15,当scales 不传参的时候,使用它。
得到self.scale=[0.15, 0.3, 0.45, 0.6, 0.75, 0.9, 1.0]
scales参数
默认框数量
这6个特征层产生的特征图的大小分别为38*38、19*19、10*10、5*5、 3*3、1*1。每个n*n大小的特征图中有n*n个中心点,每个中心点产生k个 默认框,六层中每层的每个中心点产生的k分别为4、6、6、6、4、4(在 图中很大的物体和很小的物体要少于大小适中的物体的数量)。
所以6层中的每层取一个特征图共产生 38*38*4+19*19*6+10*10*6+5*5*6+3*3*4+1*1*4=8732个默认框。
steps参数
steps参数是输入图像300x300与预测特征层的降采样的比例,即第一个参 数8,是2x2x2的结果,也就是经过3次降采样之后的比例,300/8=37.5, 即38。
这个参数的目的是为了绘制二维网格(类似于在机器学习中写代码时绘制 决策边界时的meshgrid)。最终乘以300即可得到在原图上的Anchor。
2.3.3、默认框举例
2.3.4、默认框的使用
1. 匹配机制:
在训练过程中,将默认框与真实边界框进行匹配。如果默认框与真 实边界框的重叠(通常使用交并比,IoU)超过某个阈值,则认为 该默认框匹配该真实目标。 未匹配的默认框通常被认为是背景类。
2. 预测偏移量:
SSD不直接预测边界框的坐标,而是预测默认框相对于真实边界框 的偏移量(即坐标调整量)。网络学习这些偏移量以调整默认框, 使其更接近真实目标。
3. 多框融合:
通过非极大值抑制(NMS)技术,过滤掉重叠度较高的冗余预测 框,仅保留最高置信度的预测结果。
2.3.5、默认框优点
1. 高效:
使用默认框,可以在一个前馈网络中同时预测多个尺度和宽高比的 目标,减少了计算复杂度,提高了检测速度。
2. 多尺度检测:
通过在不同尺度的特征图上生成默认框,SSD能够有效处理不同大 小的目标,适应多尺度检测的需求。
2.4、Predictor实现
对于每一个特征层,都会再经过一个3x3x (每个点的默认框个数 x (Classes+4)) 的卷积
为什么是:每个点的默认框个数 x (Classes+4)?
每个点的默认框个数 x (Classes+4) = 每个点的默认框个数 x Classes + 每 个点的默认框个数 x 4
Classes:目标检测类别数量+背景(例如Pascal VOC是21)。
每个点的默认框个数 x Classes:每个框的类别的概率,如果是4个框,每 个框都有21类的对应的概率,那就有4x21=84个。
每个点的默认框个数 x 4:每个框的x,y,w,h偏移量。
2.5、正负样本
正样本
1.与GT BOX的IoU最大的default Box。
2. 与GT BOX的IoU大于0.5的default Box。
负样本
将正样本选完的剩下的default Box进行confidence计算,选择一些最大的 confidence的default Box作为负样本,大概是正样本个数的3倍。如果剩 下的全是负样本,会导致正负样本失衡,网络表现变差。
2.6、损失函数的定义
SSD的损失函数是对分类和位置回归的多任务损失函数的组合。
它由两部分组成:分类损失(confidence loss)和定位损失(localization loss)。这两部分损失在训练过程中相加,用于模型同时学习分类和定位。
2.6.1、分类损失(Confidence Loss)
2.6.2、定位损失(Localization Loss)
2.7、 SSD的特点
与Faster RCNN相比的特点:
速度更快:SSD是一种端到端的算法,直接预测目标的类别和边界 框,避免了像Faster RCNN那样的两阶段检测过程,因此速度更 快。
简单直接:SSD通过在单个神经网络中处理检测和分类任务,简化 了整体流程。
多尺度特征融合:SSD通过使用多层特征图来检测不同大小的目 标,从而更好地处理多尺度的目标检测问题。
优点:
高效:速度快,适合实时应用。
简单:单一模型处理多个尺度和类别的检测。
高度集成:整合了目标定位和类别预测的任务。
缺点:
定位精度稍逊:相比于两阶段方法如Faster RCNN,在定位精 度上可能稍逊一筹。
默认框设计依赖:性能受默认框设计的影响,对不同数据集可 能需要调整。
SSD通过简化的单阶段检测方法和多层特征图的使用,实现了高效的目标 检测,尽管在一些精度方面可能略逊于两阶段方法,但在速度和简便性上 有明显优势。
相关文章:

Python----目标检测(《SSD: Single Shot MultiBox Detector》论文和SSD的原理与网络结构)
一、SSD:单次多框检测器 1.1、基本信息 标题:SSD: Single Shot MultiBox Detector 作者:Wei Liu (UNC Chapel Hill), Dragomir Anguelov (Zoox Inc.), Dumitru Erhan, Christian Szegedy (Google Inc.), Scott Reed (University of Michiga…...

springboot集成websocket给前端推送消息
一般通常情况下,我们都是前端主动朝后端发送请求,那么有没有可能,后端主动给前端推送消息呢?这时候就可以借助websocket来实现。下面给出一个简单的实现样例。 首先创建一个websocketDemo工程,该工程的整体结构如下&a…...
DrissionPage SessionPage模式:轻量级HTTP请求的利器
引言 在Python自动化领域,DrissionPage以其创新的三模式设计脱颖而出。作为专为HTTP请求优化的SessionPage模式,凭借其轻量级架构和高效性能,成为API调用、数据采集等场景的首选方案。本文将深入解析SessionPage的技术特性、核心优势及典型应…...

0527漏洞原理:XSS笔记
理论知识 01 前端基础知识 1.1 HTML基础 定义:HTML(超文本标记语言)用于描述网页结构。标准结构: 内嵌脚本: <script>JavaScript代码</script>1.4 JavaScript弹窗函数 函数描述alert("文本&quo…...

智能制造之精读——RPA制造行业常见场景【附全文阅读】
RPA 在制造行业应用广泛,为企业带来显著价值,是极具潜力的智能化解决方案。它能节省成本,降低人力与管理成本;提升运营效率,减少人机交互损耗;提高质量,保障流程准确性;还能增强合规…...
spark shuffle的分区支持动态调整,而hive不支持
根据Spark官方文档,Spark Shuffle分区支持动态调整的核心原因在于其架构设计和执行模型的先进性: 1. 自适应查询执行(AQE)机制 Spark 3.0引入的AQE特性允许在运行时动态优化执行计划,包括Shuffle分区调整:…...
网络安全十大漏洞
1️⃣ 失效的访问控制(Broken Access Control) 核心问题:用户能访问本应被禁止的资源或操作 攻击案例: 修改URL参数:https://shop.com/order?user_id100 → 改为 user_id101 查看他人订单 直接访问管理员页面&#…...
关于uv 工具的使用总结(uv,conda,pip什么关系)
最近要开发MCP 项目,uv工具使用是官方推荐的方式,逐要了解这个uv工具。整体理解如下: 一.uv工具的基本情况 UV 是一个由 Rust 编写的现代化 Python 包管理工具,旨在通过极速性能和一体化功能替代传统工具(如 pip、vi…...

深入剖析 Docker 容器化原理与实战应用,开启技术新征程!
文章目录 前言一、为什么 是Docker ?二、Docker 容器化原理分析2.1 镜像(Image)2.2 容器(Container)2.3 仓库(Registry) 三、Docker 容器化实践3.1 Docker安装3.2 创建一个 Docker 镜像3.3 运行…...
Xamarin劝退之踩坑笔记
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...

计算机网络(4)——网络层
1.概述 1.1 网络层服务 (1) 网络层为不同主机(Host)之间提供了一种逻辑通信机制 (2)每个主机和路由器都运行网络层协议 发送方:将来自传输层的消息封装到数据报(datagram)中接收方:向传输层交付数据段(segment) 1.2 网络层核心功能 路由选择(routing…...
java 多线程中的volatile关键字作用
文章目录 前置作用一:多线程下,保证可见性作用二:多线程下,禁止指令重排序 前置 保证可见性和保证没有指令重排导致的问题 但是不保证原子性 volatile 常常见到和 static 一起使用,因为 volatile 用在多线程中共享变…...

ESP32基础知识1:项目工程建立和烧录
ESP32基础知识1:项目工程建立和烧录 一、本文内容与前置知识点1. 本文内容2. 前置知识点 二、新建工程1. 工程配置2. 依照模板建立项目 三、硬件烧录1. 硬件准备2. 烧录器和ESP32连接3. 电脑端设置4. 烧录成功演示 四、参考文献 一、本文内容与前置知识点 1. 本文内…...

allWebPlugin中间件VLC专用版之录像功能介绍
背景 VLC控件原有接口是不支持录像的,且libVLC提供的接口库,不能获取录像文件完整名称(VLC-3.0.11 录制直播时有的无法保存视频的解决方法 - 1CM - 博客园);因此,非常的不友好。为了能够彻底解决这个问题&a…...

Vim 支持多种编程语言编辑器
软件简介 Vim是Vi编辑器的增强版,它提供了更多的功能和快捷键。Vim是一款自由软件,它是由Bram Moolenaar在1991年创建的。Vim支持多种编程语言,包括C、C、Java、Python、Perl等等。它是一款轻量级的编辑器,可以快速打开和编辑大型…...

解决 IDEA 在运行时中文乱码问题
直接说解决办法 编译 IDEA 所在目录的启动的 .vmoptions 文件,添加以下JVM 参数即可 -Dfile.encodingUTF-8如下图所示,Help > Edit Custom VM Options,随后在编辑框中添加-Dfile.encodingUTF-8 的 JVM 参数...

Diffusion Planner:扩散模型重塑自动驾驶路径规划(ICLR‘25)
1. 概述 2025年2月14日,清华大学AIR智能产业研究院联合毫末智行、中科院自动化所和香港中文大学团队,在ICLR 2025会议上发布了Diffusion Planner——一种创新性的基于Diffusion Transformer的自动驾驶规划模型架构。该系统联合建模周车运动预测与自车行…...

华为OD机试真题——阿里巴巴找黄金宝箱 IV(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
2025 A卷 200分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《阿里巴巴找黄金宝箱 IV》:…...

数据结构:时间复杂度(Time Complexity)和空间复杂度(Space Complexity)
目录 什么是时间复杂度? 如何表示时间复杂度? 为什么需要时间复杂度? 用几个例子理解 怎么分析代码的时间复杂度? 什么是空间复杂度? 举例理解 什么是时间复杂度? 时间复杂度是用来衡量一个算法“…...
CentOS7.9环境离线部署docker和docker-compose的两种方式
目 录 一、yum安装,使用rpm安装包和相关依赖 1.1 准备rpm安装包 1.2 将docker-23.0.4.tar.gz上传至/opt目录下 二、二进制文件方式安装 三、安装docker-compose 一、yum安装,使用rpm安装包和相关依赖 1.1 准备rpm安装包 1)在一台与…...
北京大学肖臻老师《区块链技术与应用》公开课:06-BTC-网络
文章目录 比特币工作在应用层,它的底层是一个P2P overlay Network...

SSL/TLS 协议详解:安全通信的基石
一、概述 SSL(Secure Sockets Layer) 及其继任者 TLS(Transport Layer Security) 是位于 传输层(TCP)与应用层之间 的加密协议,用于在网络通信中实现 机密性、身份认证和数据完整性。 核心目标…...

设计模式——外观设计模式(结构型)
摘要 本文介绍了外观设计模式,它是一种结构型设计模式,通过引入一个外观类来封装复杂子系统的调用细节,对外提供简单统一的接口。文中通过生活类比、关键角色介绍、使用场景分析以及结构说明等方面对这一模式进行了全面阐述,还涉…...

Linux `vi/vim` 编辑器深度解析与高阶应用指南
Linux `vi/vim` 编辑器深度解析与高阶应用指南 一、核心功能解析1. 模式系统2. 与主流编辑器对比二、核心操作体系1. 高效导航命令2. 文本操作矩阵三、高阶配置体系1. .vimrc 配置示例2. 插件管理系统四、企业级开发实践1. 代码编辑技巧2. 宏录制与批量处理五、可视化与多窗口1…...

ES中must与filter的区别
在 Elasticsearch 的布尔查询(bool query)中,must 和 filter 是两个核心子句,它们的核心区别在于 是否影响相关性评分,这直接决定了它们在查询性能、使用场景和结果排序上的差异。以下是详细对比: 一、核心…...

qt之开发大恒usb3.0相机三
上一篇大恒相机的开发 是基于Qt Creator msvc工具链编译的,大恒相机msvc使用的的lib库是c版的。如果想要使用mingw工具链开发大恒相机,那么找连接对相应的lib库。mingw对应的库是c的。 配置如下: 图像获取核心代码如下 void __stdcall Wid…...

Transformer架构详解:从Attention到ChatGPT
Transformer架构详解:从Attention到ChatGPT 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 Transformer架构详解:从Attention到ChatGPT摘要引言一、Attention机制:Transformer的…...

数据中台(大数据平台)之数据安全管理
数据安全管理是结合大数据技术和行业特性,数据中台产品应具备数据分类分级、敏感数据智能识别的功能,并结合敏感数据管理、数据脱敏、数据加密等安全管控方式,保障数据安全可用。 1.安全分级分类:数据分级分类是一种将不同数据按…...

github双重验证密码忘记或者获取不了了怎么办
背景 近期由于换了新手机,之前配置好的Authenticator这个App无法使用,导致获取不到二次验证的Authenticator code,登陆不上GitHub,不知道有没有人和我遇到同样的问题? 当我们配置2FA双重验证后,每次登陆gi…...

告别复杂操作!电脑极简风格计时使用
无论是工作、学习还是日常生活,这款小巧实用的计时工具都能成为你掌控时间的好帮手。特别适合需要频繁切换正计时、倒计时和查看当前时间的场景。界面简洁,操作便捷,助你高效管理每一刻。 这是一款免安装的工具,下载后可直接打开…...