22_单阶段目标检测-SSD算法理论

news2024/9/20 5:45:53

1.1 简介

SSD(Single Shot MultiBox Detector)是一种在深度学习领域广泛使用的对象检测算法,由Wei Liu等人在2015年提出。它是“单阶段”(one-stage)检测器的一个典型代表,与之相对的是像R-CNN系列这样的“两阶段”(two-stage)检测器。SSD的设计旨在同时解决对象分类和定位问题,而且由于其高效性和准确性,在实际应用中非常受欢迎。以下是SSD算法的几个核心方面:

1. 算法概述

SSD的核心思想是在一个单一的神经网络中同时进行特征提取、对象分类和边界框回归,从而实现快速而准确的对象检测。这与需要先生成候选区域(region proposals)再进行分类和精修的两阶段方法不同,SSD通过在网络的不同层上应用多个不同尺度和长宽比的默认框(default boxes或anchor boxes)来直接预测每个位置上的可能对象。

2. 网络结构

SSD通常基于一个预训练的卷积神经网络(如VGG)构建,并在其顶部添加额外的卷积层来预测不同尺度和纵横比的物体。这些额外的层允许网络在不同的特征图(feature maps)上检测不同大小的对象,较小的特征图适合检测大物体,而较大的特征图则有助于捕捉小物体。每个特征图的位置都预先定义了一组默认框,每个框对应一个固定的大小和比例,网络对这些框进行分类(判断是否有物体且属于哪个类别)以及回归(调整框的位置使其更精确地匹配物体)。

3. 损失函数(Loss Calculation)

SSD使用一个联合损失函数,该函数结合了分类损失和定位损失。分类损失通常采用交叉熵损失,用于评估每个默认框预测的类别概率与真实标签的差异;定位损失则通常是 Smooth L1损失(也称为L1平滑损失),用于衡量预测框与真实框之间的坐标偏差。SSD的损失函数还需考虑正负样本的平衡,通过设置正负样本的比例来优化训练过程,确保模型不会因为背景样本远多于前景样本而偏向于预测背景。

4. 默认框(Default Boxes)

默认框是预先设定的一组不同尺寸和比例的框,它们覆盖在特征图的每个位置上。选择合适的默认框尺寸和比例对于检测不同大小和形状的对象至关重要。SSD通过在多个特征层级上使用不同尺度的默认框来实现对多种尺寸对象的有效检测,这有助于提高检测精度,尤其是对于小物体。

5. 特性与优势

  • 速度与效率:作为单阶段检测器,SSD无需复杂的候选区域生成过程,因此检测速度快,适合实时应用。
  • 多尺度检测:通过在不同尺度的特征图上使用默认框,SSD能有效检测从小到大的各种尺寸的物体。
  • 简洁性:相比两阶段方法,SSD的架构更为简单,易于理解和实现。
  • 灵活性:SSD可以容易地集成到现有的卷积网络中,利用已有的图像识别模型进行迁移学习。

6. 局限性

尽管SSD在速度和准确性上取得了很好的平衡,但它仍然存在一些局限性,例如对于极端小物体的检测能力有限,以及在某些情况下可能会产生较多的假阳性检测。

综上所述,SSD算法是深度学习目标检测领域的一个重要进展,它通过其高效的单阶段设计和创新的默认框策略,在实际应用中展示了强大的性能。

该模型出自论文《SSD:Single Shot MultiBox Detector》

1.2 网络结构

through Conv5_3 layer是说那一部分的模型截止到VGG16中的“conv5中的第三个卷积层部分”,

而Conv4_3指的是VGG16中的Conv4_3作为第一个预测的特征图

附VGG16网络结构:

注意,这里将max pooling 5的2x2,步长为2改为了3x3,步长为1且加了padding=1,导致SSD第一阶段的输出还是38x38不变。然后经过3x3,1x1卷积得到第二个预测特征图。

此后,步距为2的时候,padding=1,步距为1的时候padding=0。

举个论文中的例子:

右边有两个特征矩阵,靠左的那个抽象程度低在原图上的感受野比较小,细粒度特征丢失少,能够检测到比较小的物体,靠右的那个抽象程度比较高,细粒度特征丢失大,适合检测比较大的物体。

1.3 default box

在SSD(Single Shot MultiBox Detector)中,“default box”也常被称为“prior box”或“anchor box”。它是SSD目标检测模型中的一个核心概念,用于在特征图的不同尺度和不同长宽比上预先定义一组候选框,这些候选框覆盖了可能存在的目标的各种大小和形状。下面是关于SSD中default box的几个关键点:

  1. 作用:Default box的作用是提供一组固定的参考框,这些框作为目标可能出现位置和大小的先验知识。通过与这些框匹配,模型能够快速定位和分类图像中的目标对象,而无需像两阶段检测器那样单独生成区域提议。

  2. 生成规则

    • 位置:以特征图上每个点为中心生成一系列框。中心点坐标通常是该点的归一化坐标,且默认偏移量为0.5,意味着框的中心位于网格点之间。
    • 尺寸和长宽比:SSD在不同层级的特征图上使用不同的default box尺寸,以便覆盖从小到大的各种目标。最小边长和最大边长通常是预先设定的,如smin=0.2smax=0.9。同时,会考虑多种长宽比(aspect ratios),例如{1, 2, 3, 1/2, 1/3},确保能捕捉不同形状的对象。对于每个aspect ratio,默认还会包括一个额外的框,其尺度是根据特征图的尺度决定的。
    • 数量:每个特征图上的每个像素点通常会生成4个或6个default box,具体数量取决于网络设计,总共有8732个default box分布在不同尺度的特征图上。
  3. 训练与预测:在训练时,每个default box都会预测出一个类别分数(表示该框内存在对应类别的概率)和4个偏移量(用于调整框的位置和大小,使其更精确地匹配真实目标)。通过与真实标注框(ground truth boxes)的交并比(IoU)匹配,每个default box被分配给一个或多个训练样本,并计算相应的分类损失和定位损失。

  4. 非极大值抑制(NMS):在预测阶段,SSD会为每个default box生成预测结果,并通过非极大值抑制去除重叠度高的预测框,最终输出最有可能代表真实目标的检测框集合。

Scale指的是预测框的面积参数,比如scale=21,那么这个scale得到的预测框面积就是21²。

conv4_3、10_2、11_2都是生成四个预测框,其他的特征图都生成6个预测框。

解释一下下图:以第一个特征图,预测框面积有21和sqrt(21x45)两个,然后对于21有1:1,2:1,1:2三个比例的预测框,对于sqrt(21x45)只有1:1的比例一个预测框。(为什么第二个是21x45开根号看上面的黄线部分)。

对于第二个特征图,对于45有1:1,2:1,1:2,3:1,1:3五个尺度的预测框,对于sqrt(45x99)只有1:1一个预测框。

1.4 预测器Predictor

对于长宽mxn通道数为p的特征图直接用3x3xp的卷积核生成概率分数以及我们相对default box的坐标偏移量。

对于特征图上每一个位置,生成K个候选框,对于每个候选框分别去计算C个类别分数以及4个坐标偏移量,那么我们就需要(c+4)*K个卷积核,对于mxn的特征图,我们就会生成(c+4)*K*m*n个输出值。(这里的C是包括背景类别的)

1.5 正负样本的选取

正样本:

(1)对于每一个GT,取匹配每一个与它IOU值最大的default box.

(2)对于任意的一个default box只要与GT的IOU>0.5就划为正样本。

负样本:

(1)定义好正样本,剩下的都是负样本。

(2)但负样本不是全都用来计算,因为8732个default box只有几十个是正样本,会导致样本不平衡的问题。

(3)对于所有的负样本,计算confidence loss,值越大意味着网络将这个负样本预测为目标的概率就越大,那么损失就越大,所以我们进行排序选取靠前的负样本进行训练。

(4)控制正负样本的比率在1:3,1正3负。

负样本的选择策略被叫做“hard negative mining”

1.6 模型损失

类别损失

定位损失

定位损失只针对正样本,因为负样本没有对应的GT。

dicx是第i个default box它的中心点的X坐标,diw是第i个default box它的宽度。

(GT的中心坐标和宽高是不能直接参与训练的,要先把它们转化为相对于default box 的偏置量,使用偏置量参加训练来计算loss)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【精简教程】VSCode 连接 Remix

初始化 Node.js 项目 yarn init v1.22.19安装 Remix yarn add remix-project/remixd -g⚠️ 此时如果直接敲 remix,显示找不到这个命令。 使用 Node.js 来直接执行 remixd.js 文件 node node_modules\remix-project\remixd\src\bin\remixd.js😄 连接上了…

软件供应链安全:如何防范潜在的攻击?

来源:https://thehackernews.com/2024/06/practical-guidance-for-securing-your.html 软件生产组织面临越来越大的监管和法律压力,要求其保护供应链并确保软件的完整性,这不足为奇。在过去几年里,软件供应链已经成为攻击者越来越…

【漏洞复现】docassemble——interview——任意文件读取

声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 docassemble 是一款强大的开源工具,它让自动化生成和…

泛微e-cology getFileViewUrl接口存在SSRF漏洞复现 [附POC]

文章目录 泛微e-cology getFileViewUrl接口存在SSRF漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现0x06 修复建议泛微e-cology getFileViewUrl接口存在SSRF漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章…

运维圈都在“卷”的可观测性,还有这些要点运维人必须知道

在信息技术的快速发展下,IT运维领域在2018年迎来了一个全新的概念——“可观测性”(Observability),并迅速成为云原生技术领域的热点话题,被Gartner列为“2023年十大战略技术趋势”之一。Gartner预测,到202…

ipv4和ipv6的兼容性问题

ipv4和ipv6的兼容 现今大多知名网站都是同时支持ipv6和ipv4,这种可以分为两种情况讨论: 一个IPv4的网络和一个IPv6的网络通信;一个IPv6的网络和一一个IPv6的网络通信,但是中间需要经过一一个IPv4的网络。 先以第一种为例: 若一…

好玩的卡牌游戏推荐:堆叠大陆 Stacklands(Win/Mac)中文版

《堆叠大陆》是一款非常有趣和富有创造力的游戏,玩家可以在游戏中通过堆叠不同种类的方块来创建自己的世界。 在游戏中,玩家可以探索广阔的地图,发现各种不同的方块和资源。这些方块可以被堆叠在一起,形成各种建筑、结构和其他创…

单链表--续(C语言详细版)

2.6 在指定位置之前插入数据 // 在指定位置之前插入数据 void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x); 分为两种情况:1. 插入的数据在链表中间;2. 插入的数据在链表的前面。 // 在指定位置之前插入数据 void SLTInsert(SLTNode** …

Python实战演练——羊了个羊抓包通关教程及无限套娃通关次数!

1. 需求 最近热门的羊了个羊,听说通关率不到0.1% 第一关超级简单,第二关可就难倒了太多的小伙伴,往往是你以为快没了,结果还有好多层,有朋友分析过,地狱有十八层,而它有十九层。 博主也曾熬夜…

可视化传输机房设计方案

建筑可视化机房可视化(3D)机房可视化(2D)多机柜可视化单机柜可视化(3D)单机柜可视化(2D)设备与插槽可视化端口连线及链路可视化

栈和队列题目详解

前言: 在前面我们学习了栈和队列,栈的特性是后进先出,队列的特性是先进先出,当我们了解了这些之后,我们就可以用到栈和队列的特性来简单的做一些题目了。 1. 有效的括号 有效的括号:. - 力扣&#xff08…

ESP32驱动摄像头:1.驱动OV2640模块(待验证)

一、装ArduCam库和ESPAsyncWebServer库 二、参考代码 #include <Wire.h> #include <ArduCAM.h> #include <SPI.h> #include <WiFi.h> #include <ESPAsyncWebServer.h>#define CAM_CS 32 // modify according to your own wiring #define OV2640…

昇思25天训练营Day11 - 基于 MindSpore 实现 BERT 对话情绪识别

模型简介 BERT全称是来自变换器的双向编码器表征量&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;&#xff0c;它是Google于2018年末开发并发布的一种新型语言模型。与BERT模型相似的预训练语言模型例如问答、命名实体识别、自然语言推理、…

电焰灶:烹饪性能的深度剖析

在如今众多的厨房炉灶选择中&#xff0c;华火电焰灶以其独特的技术和性能吸引了不少消费者的目光。那么&#xff0c;华火电焰灶的综合烹饪性能究竟如何呢&#xff1f;让我们一起来深入探究。 首先&#xff0c;从火力方面来看&#xff0c;华火电焰灶展现出了强大的优势。其火焰强…

5G/4G加密边缘计算电力网关,开启智慧电力新篇章

计讯物联TG452&#xff0c;一款面向电力行业应用的工业级物联网网关&#xff0c;持电力协议及规约标准&#xff0c;支持采集、存储、算力、通信组网 、协议转换、控制等多功能。    电力应用   计讯物联电力网关TG452支持电力IEC101、IEC104、IEC61850、DL/T645等协议标准…

uniapp 微信小程序,最简单的流式输出:Transfer-Encoding: chunked

在GPT项目中&#xff0c;流式输出是实现流畅对话体验的关键技术之一。今天&#xff0c;我们将探讨如何在uniapp开发的微信小程序中优雅地实现这一功能。虽然WebSocket是一种常见的解决方案&#xff0c;但在某些场景下&#xff0c;我们可能寻求更轻量级且易于集成的替代方案。本…

unity使用 MQTT复现plant simulate仿真

unity使用 MQTT复现plant simulate仿真 一、plant simulate端配置 1、plant simulate MQTT组件配置&#xff0c;该组件在类库的信息流类目下&#xff0c;端口不变&#xff0c;填写ip即可&#xff1b; 2、设备配置界面&#xff0c;在控件入口和出口处各挂一个脚本&#xff0c;…

新手教学系列——MongoDB聚合查询的进阶用法

引言 MongoDB的聚合查询是其最强大的功能之一。无论是汇总、平均值、计数等标准操作,还是处理复杂的数据集合,MongoDB的聚合框架都能提供高效且灵活的解决方案。本文将通过几个实例,详细讲解如何在实际项目中使用MongoDB进行聚合查询。 标准应用:汇总、平均值、计数等 在…

认识string(一)详解

目录 标准库中的string类了解如何看文档Construct string (构造string)string()空字符串构造函数&#xff08;默认构造函数&#xff09;string (const string& str) 拷贝构造函数string (const string& str, size_t pos, size_t len npos)string (const char* s)复制构…

FiddlerScript Rules修改-更改发包中的cookie

直接在fiddler script editor中增加如下处理代码即可 推荐文档oSession -- 参数说明 测试笔记 看云