【项目实践】从零开始学习SSD目标检测算法训练自己的数据集(附注释项目代码)(一)

简介: 【项目实践】从零开始学习SSD目标检测算法训练自己的数据集(附注释项目代码)(一)

1、SSD的知识思维脑图



2、简介


2.1、SSD出现的背景

针对YOLO V1对于小目标检测的缺陷一个死板的边框定制,导致如果出现过于密集检测物体时,效果就会比较差,而对于多阶段检测的方法,诸如,RCNN,Fast RCNN,Faster RCNN虽然对于小目标有比较好的检测效果,但是由于其自身会产生很多的冗余边界框导致基于分类的检测方法的检测时间比较久,很难满足实时性的要求。

SSD是一个端到端的模型,所有的检测过程和识别过程都是在同一个网络中进行的;同时SSD借鉴了Faster R-CNN的Anchor机制的想法,这样就像相当于在基于回归的的检测过程中结合了区域的思想,可以使得检测效果较定制化边界框的YOLO v1有比较好的提升。

2.2、SSD的模型思想

2.2.1、多尺度特征图预测(Multi-Scale Feature Maps Prediction)

SSD较传统的检测方法使用顶层特征图的方法选择了使用多尺度特征图,因为在比较浅的特征图中可以对于小目标有比较好的表达,随着特征图的深入,网络对于比较大特征也有了比较好表达能力,故SSD选择使用多尺度特征图可以很好的兼顾大目标和小目标。

0f54a5a6eb20f33f8fefe2e0f950836e.png

对于对尺度特征图的实验如下,全部使用是可以达到最好的效果:

73f1e076e27b8520f7dfc6e0bce79d8e.png

2.2.2、根据不同尺度的特征图进行定制不同尺度的默认边界框

如下图和表所示,针对不同的特征图,SSD定制了不同数量的默认边界框的数量(借鉴了YOLO V1的定制边界框的思想)

但是默认框的数量是动手选择的,SSD为每个特征图定义一个尺度值,从左侧开始,conv4_3的最小尺度值为0.2,然后以0.14的线性增加到最右边的层的0.9(即0.20、0.34、0.48、0.62、0.76、0.90),然后将尺度值(Scale)与目标的宽高比结合,计算默认框的宽度和高度。

8fcb482e802d015a984f243d9626c5d8.png

对于进行预测6次的层,SSD以5个目标高宽比开始{1,2,3,1/2,1/3},具体的计算如下:

定义的宽高比为:

1faa5b4802869aa2e5c63ba1765f21d6.png

边界框的宽高为:

99bdf7d2f05d415580686d0af74a2b27.png

m表示特征图的数量,s_min=0.2,s_max=0.9。

1bf8d5c786351eba88d6611aa70786d3.png

68c040592029d3917059ea4042403b06.png

由上面的表和图可以看出,最终总共产生了8732个边界框,最后使用非最大值抑制的方法进行筛选。

2.2.3、使用3x3的小卷积核进行预测分类结果和边界框的信息

SSD不使用特定的区域建议网络。它采用一个非常简单的方法,即使用小卷积滤波器计算位置和类别得分。

在提取特征图之后,SSD对每个单元应用3×3卷积滤波器以进行预测(这些滤波器像常规CNN滤波器一样计算结果)。每个滤波器输出25个通道:21个类别分数+1个边界框的信息

e1eaa06932a5fa341fa3597453c71cb5.png

2.2.4、多任务损失函数

  • 匹配策略

SSD预测分为正匹配或负匹配。如果相应的默认边界框(不是预测的边界框)与GT的IoU大于0.5, 则匹配为正。否则,是负的。

SSD仅使用正匹配来计算边界框不匹配的代价。

0ced3670791d6086e242277ad4e9aa9b.png

只有默认框1和2(但不是3)的IoU大于0.5。因此, 只有第1和第2个框是正匹配。一旦识别出正匹配,就使用相应的预测边界框来计算代价。这种匹配策略很好地划分了预测所负责的GT框的形状。

该匹配策略鼓励每个预测更接近相应默认框的形状。因此,预测在训练中更加多样化和稳定。

损失函数

总体目标损失函数是**定位误差(loc)置信度损失或者叫分类误差(conf)**的加权和:

定位损失:是GT框与预测边界框之间的不匹配。是预测框(?)和GT框(?)参数之间的Smooth L1损失

d9d9baa45def3fd5dd1112f6b4b9769f.png

a5135f31eac481bf67091564305c65d3.png

SSD仅对正匹配的预测进行惩罚。希望正匹配的预测能够更接近GT。负匹配可以忽略。

置信度损失或者叫分类误差:是多类置信度(c)下的softmax损失。

3ed7701abfadbb568e5fcfbfb31b4edd.png

2.2.5、空洞卷积

由于SSD借鉴了DeepLab-LargeFOV,分别将VGG16的全连接层fc6和fc7转换成3×3卷积层Conv6和1×1卷积层Conv7,同时将池化层pool5由原来的2×2−s2变成3×3−s1。为了配合这种变化,采用了一种Atrous Algorithm,其实就是Conv6采用带孔卷积(Atrous/Dilation Convolution),带孔卷积在不增加参数与模型复杂度的条件下指数级扩大卷积的感受野。

Atrous/Dilation Convolution的思想:紧密相邻的像素几乎相同,全部纳入的话会存在很多的冗余关系,于是选择跳跃H(hole)个像素取一个有效值,这样可以在较少的参数下增大感受野,也节省了内存的使用。

如下图所示,(a)是普通的3×3卷积,其感受野就是3×3,(b)是扩张率为2,此时感受野变成7×7,(c)扩张 率为4时,感受野扩大为15×15,但是感受野的特征更稀疏了。

e423d8ccd4cbec9328b49f93101fa8c9.png

2.2.6、困难负样本挖掘(Hard negative mining)

由于做出的预测远远超过目标存在的数量,所以负匹配比正匹配要多得多。这造成了一种训 练的类别不平衡:更多地学习背景空间而不是检测目标。

然而,SSD仍然需要负采样,因此它可以了解什么构成不良的预测。因此,我们不是使用所 有的样本,而是通过计算的置信度损失对这些负样本进行排序。SSD选择最高损失的负样本并 确保所选负样本与正样本之间的比率最多为3:1。这导致更快和更稳定的训练。

相关文章
|
1月前
|
开发框架 算法 .NET
基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA
简介:本文介绍基于ADMM的MIMO信号检测算法,结合无穷范数优化与交替方向乘子法,降低计算复杂度并提升检测性能。涵盖MATLAB 2024b实现效果图、核心代码及详细注释,并对比ML、MMSE、ZF、OCD_MMSE与LAMA等算法。重点分析LAMA基于消息传递的低复杂度优势,适用于大规模MIMO系统,为通信系统检测提供理论支持与实践方案。(238字)
|
1月前
|
监控 安全 算法
137_安全强化:输入过滤与水印 - 实现输出水印的检测算法与LLM安全防护最佳实践
随着大语言模型(LLM)在各行业的广泛应用,安全问题日益凸显。从提示注入攻击到恶意输出生成,从知识产权保护到内容溯源,LLM安全已成为部署和应用过程中不可忽视的关键环节。在2025年的LLM技术生态中,输入过滤和输出水印已成为两大核心安全技术,它们共同构建了LLM服务的安全防护体系。
|
2月前
|
传感器 资源调度 算法
DDMA-MIMO雷达多子带相干累积目标检测算法——论文阅读
本文提出一种多子带相干累积(MSCA)算法,通过引入空带和子带相干处理,解决DDMA-MIMO雷达的多普勒模糊与能量分散问题。该方法在低信噪比下显著提升检测性能,实测验证可有效恢复目标速度,适用于车载雷达高精度感知。
436 4
DDMA-MIMO雷达多子带相干累积目标检测算法——论文阅读
|
2月前
|
机器学习/深度学习 运维 算法
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
197 1
机器学习/深度学习 算法 自动驾驶
480 0
|
2月前
|
算法 API 数据安全/隐私保护
深度解析京东图片搜索API:从图像识别到商品匹配的算法实践
京东图片搜索API基于图像识别技术,支持通过上传图片或图片URL搜索相似商品,提供智能匹配、结果筛选、分页查询等功能。适用于比价、竞品分析、推荐系统等场景。支持Python等开发语言,提供详细请求示例与文档。
|
3月前
|
机器学习/深度学习 算法 数据挖掘
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
150 0
|
4月前
|
存储 监控 算法
基于跳表数据结构的企业局域网监控异常连接实时检测 C++ 算法研究
跳表(Skip List)是一种基于概率的数据结构,适用于企业局域网监控中海量连接记录的高效处理。其通过多层索引机制实现快速查找、插入和删除操作,时间复杂度为 $O(\log n)$,优于链表和平衡树。跳表在异常连接识别、黑名单管理和历史记录溯源等场景中表现出色,具备实现简单、支持范围查询等优势,是企业网络监控中动态数据管理的理想选择。
147 0
|
5月前
|
机器学习/深度学习 运维 监控
实时异常检测实战:Flink+PAI 算法模型服务化架构设计
本文深入探讨了基于 Apache Flink 与阿里云 PAI 构建的实时异常检测系统。内容涵盖技术演进、架构设计、核心模块实现及金融、工业等多领域实战案例,解析流处理、模型服务化、状态管理等关键技术,并提供性能优化与高可用方案,助力企业打造高效智能的实时异常检测平台。
449 1
|
5月前
|
监控 算法 安全
公司电脑监控软件关键技术探析:C# 环形缓冲区算法的理论与实践
环形缓冲区(Ring Buffer)是企业信息安全管理中电脑监控系统设计的核心数据结构,适用于高并发、高速率与短时有效的多源异构数据处理场景。其通过固定大小的连续内存空间实现闭环存储,具备内存优化、操作高效、数据时效管理和并发支持等优势。文章以C#语言为例,展示了线程安全的环形缓冲区实现,并结合URL访问记录监控应用场景,分析了其在流量削峰、关键数据保护和高性能处理中的适配性。该结构在日志捕获和事件缓冲中表现出色,对提升监控系统效能具有重要价值。
158 1

热门文章

最新文章