《昇思25天学习打卡营第14天|SSD目标检测》

SSD(Single Shot MultiBox Detector)是一种用于目标检测的深度学习算法。它的设计旨在同时检测多个对象,并确定它们在图像中的位置和类别。与其他目标检测算法相比,SSD具有速度快和精度高的特点,在实时检测应用中非常受欢迎。

SSD(Single Shot MultiBox Detector)目标检测算法通过一个前向传递过程完成对象检测和边界框预测。它的设计使其能够在保持高精度的同时实现实时检测。实现过程:

1. 基础网络(Base Network)

基础网络通常采用预训练的卷积神经网络(如VGG16或ResNet),用来提取图像的高层次特征。在SSD中,这个基础网络的最后一个全连接层被去掉,取而代之的是一系列卷积层。

SD采用VGG16作为基础模型,然后在VGG16的基础上新增了卷积层来获得更多的特征图以用于检测。SSD的网络结构如图所示。上面是SSD模型,下面是YOLO模型,可以明显看到SSD利用了多尺度的特征图做检测。

SSD-2

两种单阶段目标检测算法的比较:
SSD先通过卷积不断进行特征提取,在需要检测物体的网络,直接通过一个3 ×× 3卷积得到输出,卷积的通道数由anchor数量和类别数量决定,具体为(anchor数量*(类别数量+4))。
SSD对比了YOLO系列目标检测方法,不同的是SSD通过卷积得到最后的边界框,而YOLO对最后的输出采用全连接的形式得到一维向量,对向量进行拆解得到最终的检测框。

SSD的网络结构主要分为以下几个部分:

SSD-3

  • VGG16 Base Layer VGG16 基础层

  • Extra Feature Layer 额外特征层

  • Detection Layer 检测层

  • NMS 网络管理系统

  • Anchor 锚

Backbone Layer 骨干层 

SSD-4

输入图像经过预处理后大小固定为300×300,首先经过backbone,本案例中使用的是VGG16网络的前13个卷积层,然后分别将VGG16的全连接层fc6和fc7转换成3 ×× 3卷积层block6和1 ×× 1卷积层block7,进一步提取特征。 在block6中,使用了空洞数为6的空洞卷积,其padding也为6,这样做同样也是为了增加感受野的同时保持参数量与特征图尺寸的不变。

Extra Feature Layer 额外特征层 

在VGG16的基础上,SSD进一步增加了4个深度卷积层,用于提取更高层的语义信息:

SSD-5

block8-11,用于更高语义信息的提取。block8的通道数为512,而block9、block10与block11的通道数都为256。从block7到block11,这5个卷积后输出特征图的尺寸依次为19×19、10×10、5×5、3×3和1×1。为了降低参数量,使用了1×1卷积先降低通道数为该层输出通道数的一半,再利用3×3卷积进行特征提取。

Anchor 锚 

SSD采用了PriorBox来进行区域生成。将固定大小宽高的PriorBox作为先验的感兴趣区域,利用一个阶段完成能够分类与回归。设计大量的密集的PriorBox保证了对整幅图像的每个地方都有检测。PriorBox位置的表示形式是以中心点坐标和框的宽、高(cx,cy,w,h)来表示的,同时都转换成百分比的形式。 PriorBox生成规则: SSD由6个特征层来检测目标,在不同特征层上,PriorBox的尺寸scale大小是不一样的,最低层的scale=0.1,最高层的scale=0.95,其他层的计算公式如下:

SSD-6

在某个特征层上其scale一定,那么会设置不同长宽比ratio的PriorBox,其长和宽的计算公式如下:

SSD-7

在ratio=1的时候,还会根据该特征层和下一个特征层计算一个特定scale的PriorBox(长宽比ratio=1),计算公式如下:

SSD-8

每个特征层的每个点都会以上述规则生成PriorBox,(cx,cy)由当前点的中心点来确定,由此每个特征层都生成大量密集的PriorBox,如下图:

SSD-9

SSD使用了第4、7、8、9、10和11这6个卷积层得到的特征图,这6个特征图尺寸越来越小,而其对应的感受野越来越大。6个特征图上的每一个点分别对应4、6、6、6、4、4个PriorBox。某个特征图上的一个点根据下采样率可以得到在原图的坐标,以该坐标为中心生成4个或6个不同大小的PriorBox,然后利用特征图的特征去预测每一个PriorBox对应类别与位置的预测量。例如:第8个卷积层得到的特征图大小为10×10×512,每个点对应6个PriorBox,一共有600个PriorBox。定义MultiBox类,生成多个预测框。

Detection Layer 检测层 

SSD-10

SSD模型一共有6个预测特征图,对于其中一个尺寸为m*n,通道为p的预测特征图,假设其每个像素点会产生k个anchor,每个anchor会对应c个类别和4个回归偏移量,使用(4+c)k个尺寸为3x3,通道为p的卷积核对该预测特征图进行卷积操作,得到尺寸为m*n,通道为(4+c)m*k的输出特征图,它包含了预测特征图上所产生的每个anchor的回归偏移量和各类别概率分数。所以对于尺寸为m*n的预测特征图,总共会产生(4+c)k*m*n个结果。cls分支的输出通道数为k*class_num,loc分支的输出通道数为k*4。

2. 多尺度特征图(Multi-scale Feature Maps)

SSD在基础网络的顶部添加了多个卷积层,以生成不同尺度的特征图。每个特征图对应不同大小的感受野,能够检测不同大小的目标。通常,SSD会使用基础网络的最后几个层和新增的几个卷积层作为特征图。

3. 默认框(Default Boxes)

在每个特征图上的每个位置,SSD生成多个默认框(也称为锚框),这些框有不同的尺度和长宽比,覆盖各种可能的目标形状和大小。默认框的数量和配置可以根据特定应用进行调整。

4. 卷积预测(Convolutional Predictors)

SSD在每个特征图上应用两个卷积层,一个用于分类预测,一个用于边界框回归。

  • 分类预测(Classification Prediction): 对每个默认框,SSD预测其包含特定类别对象的概率。这一步使用一个1x1卷积层,对每个默认框生成C个类别得分(其中C是类别总数)。

  • 边界框回归(Bounding Box Regression): 对每个默认框,SSD预测其相对于默认框的位移和缩放。这一步使用另一个1x1卷积层,对每个默认框生成4个回归参数(分别表示中心点的x、y偏移量和宽度、高度的缩放)。

5. 损失函数(Loss Function)

SSD的损失函数包括两部分:分类损失和回归损失。

  • 分类损失(Classification Loss): 使用交叉熵损失(Cross-Entropy Loss),衡量每个默认框的类别预测与真实类别之间的差异。

  • 回归损失(Regression Loss): 使用平滑L1损失(Smooth L1 Loss),衡量每个默认框的预测边界框与真实边界框之间的差异。

SSD算法的目标函数分为两部分:计算相应的预选框与目标类别的置信度误差(confidence loss, conf)以及相应的位置误差(locatization loss, loc):

SSD-11

其中:
N 是先验框的正样本数量;
c 为类别置信度预测值;
l 为先验框的所对应边界框的位置预测值;
g 为ground truth的位置参数
α 用以调整confidence loss和location loss之间的比例,默认为1。

对于位置损失函数

针对所有的正样本,采用 Smooth L1 Loss, 位置信息都是 encode 之后的位置信息。

SSD-12

对于置信度损失函数

置信度损失是多类置信度(c)上的softmax损失。

SSD-13

总损失函数是分类损失和回归损失的加权和。

6. 匹配策略(Matching Strategy)

在训练过程中,SSD将每个真实边界框与一个或多个默认框匹配,确保每个目标至少有一个高质量的匹配。具体匹配策略如下:

  • 如果默认框与某个真实边界框的IoU(Intersection over Union)超过0.5,则认为该默认框为正样本。
  • 如果某个真实边界框没有与任何默认框的IoU超过0.5,则选择与其IoU最高的默认框作为正样本。

7. 非极大值抑制(Non-Maximum Suppression, NMS)

在推理过程中,为了减少重复检测,SSD使用非极大值抑制(NMS)来保留每个类别得分最高的边界框,并去除重叠的、得分较低的框。具体步骤如下:

  • 对于每个类别,将所有预测框按照得分从高到低排序。
  • 选择得分最高的框,删除所有与其IoU超过某个阈值的框。
  • 重复上述步骤,直到所有框都被处理完。

8. 最终检测结果

经过非极大值抑制处理后,SSD输出最终的检测结果,包括目标类别和相应的边界框。

9. 评估

自定义eval_net()类对训练好的模型进行评估,调用了上述定义的SsdInferWithDecoder类返回预测的坐标及标签,然后分别计算了在不同的IoU阈值、area和maxDets设置下的Average Precision(AP)和Average Recall(AR)。使用COCOMetrics类计算mAP。模型在测试集上的评估指标如下。

精确率(AP)和召回率(AR)的解释

  • TP:IoU>设定的阈值的检测框数量(同一Ground Truth只计算一次)。

  • FP:IoU<=设定的阈值的检测框,或者是检测到同一个GT的多余检测框的数量。

  • FN:没有检测到的GT的数量。

精确率(AP)和召回率(AR)的公式

  • 精确率(Average Precision,AP):
    准确率(平均精度,AP):

    SSD-15

    精确率是将正样本预测正确的结果与正样本预测的结果和预测错误的结果的和的比值,主要反映出预测结果错误率。

  • 召回率(Average Recall,AR):

    SSD-16

    召回率是正样本预测正确的结果与正样本预测正确的结果和正样本预测错误的和的比值,主要反映出来的是预测结果中的漏检率。

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

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

相关文章

层次分析法:matlab代码实现

计算权重&#xff1a; 一、算术平均法 关于矩阵&#xff1a; 1、矩阵的输入写法 [ ; ; ]同行用空格或逗号隔开&#xff0c;不同行用分号间隔 2、矩阵求和 默认按列求和 asum(E) 等同于 asum(E,1) 得到行向量 按行求和 asum(E,2) 得到列向量 对整个矩阵求和 asum(E,"all&…

昇思25天学习打卡营第18天|MindNLP ChatGLM-6B StreamChat

现在各类chat AI不胜枚举&#xff0c;开源的闭源的都有&#xff0c;ChatGLM-6B是其中一个开源的chat AI模型&#xff0c;我们可以使用mindspore轻松的跑起来这个模型 官方提供的jupyter示例里面却少了安装mindnlp和mdtex2html&#xff0c;所以需要先把这两个模块安装一下。 !…

Python实战指南:一键解锁KimiGPT API,开启智能对话与文本生成的新纪元

Python实战指南&#xff1a;一键解锁KimiGPT API&#xff0c;开启智能对话与文本生成的新纪元 引言 随着人工智能技术的飞速发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;成为了众多领域的核心技术之一。KimiGPT&#xff0c;作为国内广受欢迎的AI工具&#xff0c…

【/etc/profile、~/.bashrc、~/.bash_profile区别以及配置history记录】

目录 /etc/profile、~/.bashrc、~/.bash_profile区别/etc/profile~/.bash_profile~/.bashrc加载顺序和关系示例/etc/profile~/.bash_profile&#xff08;用户级别&#xff09;~/.bashrc&#xff08;用户级别&#xff09; history记录配置修改 /etc/profile确保用户的 ~/.bash_p…

TCP网络传输控制协议

目录 什么是TCP TCP的特点 TCP通信步骤 三次握手&#xff08;建立连接&#xff09; 数据传输 四次挥手&#xff08;连接释放&#xff09; 为什么要进行三次握手&#xff1f;两次握手行不行&#xff1f;一次握手行不行&#xff1f; 为什么是四次挥手&#xff1f;三次、两…

【Dison夏令营 Day 17】使用 Python Turtle 的 24 游戏求解器

24 点 是一个数学谜题&#xff0c;用基本算术运算符&#xff08;、-、、&#xff09;将 4 个数字运算成 24。例如&#xff0c;给定 4 个数字 1,5,5,5&#xff0c;我们可以得到表达式 (5-(15))5&#xff0c;等于 24。 我们可以用 Python 程序暴力解决这个问题。最多有 245444 7…

Vue的生命周期函数有哪些?详细说明

Vue.js 的生命周期函数包括以下几个阶段&#xff0c;每个阶段都有相应的钩子函数可以用来在特定时机执行自定义的逻辑。这些生命周期钩子函数使得我们可以在组件的不同阶段进行操作&#xff0c;从而管理组件的状态和行为。 1. beforeCreate&#xff1a; - 描述&#xff1a;…

【游戏客户端】大话slg玩法架构(三)建筑控件

【游戏客户端】大话slg玩法架构&#xff08;三&#xff09;建筑控件 大家好&#xff0c;我是Lampard家杰~~ 今天我们继续给大家分享SLG玩法的实现架构&#xff0c;关于SLG玩法的介绍可以参考这篇上一篇文章&#xff1a;【游戏客户端】制作率土之滨Like玩法 PS&#xff1a;和之前…

谈谈软件交互设计

谈谈软件交互设计 交互设计的由来 交互设计(Interaction Design)这一概念,最初是由IDEO创始人之一Bill.Moggridge(莫格里奇)1984年在一次会议上提出。他设计了世界上第一台笔记本电脑Compass,并写作出版了在交互设计领域影响深远的《Designing Interactions》一书,被称…

使用 Akshare 下载国内的期货(主力连续)、股票和指数的历史行情数据

本文介绍如何使用 akshare 下载国内期货、股票和指数的历史行情数据。 Akshare 是一个丰富的金融数据查询的 Python 库&#xff0c;提供了大量的金融数据接口。本文将详细介绍如何使用 Akshare 下载期货、股票和指数数据&#xff0c;并提供完整的代码示例&#xff0c;以求大家…

当需要在不同操作系统和编程语言环境中共享和处理 XML 数据时,可能会遇到哪些兼容性问题,以及如何解决?

在不同操作系统和编程语言环境中共享和处理 XML 数据时&#xff0c;可能会遇到以下兼容性问题&#xff1a; 编码问题&#xff1a;不同操作系统和编程语言对于 XML 文件的默认编码可能不同。如果使用不同的编码方式&#xff0c;可能会导致乱码或无法正确解析 XML 数据。解决方法…

Java算法题-找到数组所有左边数都比它小, 右边数都比它大的数

实例1&#xff1a; 输入:[1,2,4,3,7,8,9] 输出:[1,2,7,8,9] 条件一&#xff1a;左边的数都比他小 条件二&#xff1a;右边的数都不比他大 思路&#xff1a;遍历两次,一次从左往右&#xff0c;找到满足条件一的数&#xff0c;一次从后往前找到满足条件二的数&#xff0c;两次遍…

微服务架构实战:案例分析与解决方案探讨

摘要 微服务架构以其模块化和灵活性在软件开发领域迅速崛起。然而&#xff0c;这种架构模式并非没有挑战。本文通过深入分析几个实际的微服务项目案例&#xff0c;探讨了在设计、开发和部署过程中遇到的问题&#xff0c;以及相应的解决方案。同时&#xff0c;文章还展示了微服…

请不要把「团队」二字挂在嘴边上

请不要把「团队」二字挂在嘴边上 什么是团队? 团队(Team)是由 基层和 管理层人员组成的一个 共同体,它合理利用每一个 成员的知识和技能协同工作,解决问题,达到 共同的目标。 团队的构成要素总结为5P,分别为目标、人、 定位、权限、计划。 群体不是团队 “团队”和“…

智能合约和分布式应用管理系统:技术革新与未来展望

引言 随着区块链技术的不断发展&#xff0c;智能合约和分布式应用&#xff08;DApps&#xff09;逐渐成为数字经济中的重要组成部分。智能合约是一种自执行的协议&#xff0c;能够在预设条件满足时自动执行代码&#xff0c;而无需人工干预或中介机构。这种自动化和信任机制极大…

使用Apache服务部署静态网站

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 目录 一、网站服务程序 ​二、配置服务文件参数 ​三、SELinux安全子系统 四、个人用户主页功能 ​五、虚拟网站主机功能 六、Apache的访问控制…

DOM 实例:深入理解文档对象模型

DOM 实例:深入理解文档对象模型 引言 文档对象模型(DOM,Document Object Model)是处理可扩展标记语言(XML)的标准编程接口。在网页开发中,DOM 被广泛应用于 HTML 和 XML 文档的交互。本文将深入探讨 DOM 的概念、实例及其在网页编程中的应用。 DOM 基础概念 什么是 …

nx上darknet的使用-目标检测-在python中的使用

1 内置的代码 在darknet中已经内置了两个py文件 darknet_video.py与darknet_images.py用法类似&#xff0c;都是改一改给的参数就行了&#xff0c;我们说一下几个关键的参数 input 要预测哪张图像weights 要使用哪个权重config_file 要使用哪个cfg文件data_file 要使用哪个da…

基于AT89C51单片机篮球计时计分器的设计(含文档、源码与proteus仿真,以及系统详细介绍)

本篇文章论述的是基于AT89C51单片机篮球计时计分器的设计的详情介绍&#xff0c;如果对您有帮助的话&#xff0c;还请关注一下哦&#xff0c;如果有资源方面的需要可以联系我。 目录 绪论 原理图 ​编辑 仿真图 系统总体设计图 代码实现 系统论文 资源下载 绪论 本次…

postgresql创建只读权限的用户

在PostgreSQL中&#xff0c;创建具有只读权限的用户是一个常见的安全需求&#xff0c;以确保某些用户只能查询数据库中的数据&#xff0c;而不能修改或删除数据。以下是如何在PostgreSQL中创建只读用户的方法&#xff1a; 以下是创建PostgreSQL只读用户的步骤&#xff1a; 使…