物体检测算法SSD简述

目标检测SSD算法(新手入门) SSD SSD算法是比较经典的目标检测算法,讲解SSD的博客有很多,比如目标检测之SSD就讲的非常好。 本篇博客的不同之处在于,我当时整理学习SSD的时候相对小白一点,遇到什么不太清楚的查阅的东西比较多一些。在此把当时记录的东西整理出来分享给大家。 ... 阅读详情

其实SSD的论文是在YOLOv2之前看的,但由于那时本人初识机器学习,还不了解基本概念,所以只是囫囵吞枣,没能理解得很透彻,于是今天重新拾起SSD,并编辑出一篇学习记录,希望对大家有所帮助。

如果本文中某些表述或理解有误,欢迎各位大神批评指正。

下面进入正题。


论文原文中提到,作者提出的SSD算法比之前的YOLO算法更快、更精确,精确度可以媲美之前的Faster R-CNN。

为了理解方便,本文将原论文中涉及到的概念重新排序,以便看起来逻辑通顺。


【Multi-scale feature maps for detection】

SSD最大的亮点之一就是利用多尺度的feature map进行分类检测。

如果有朋友不是很清楚feature map是什么,暂时可以将其理解成网络中每个卷积层的输出。
详情可以参看本人的另外一篇博客:
机器学习中的一些基本概念(未完待续)
或自行百度。

在SSD中,不同层级的卷积层输出的feature map尺度不同。
像这样:

(这张图很重要,本文将多处使用到这张图)


其中,8*8的feature map和4*4的feature map对应不同layer的卷积层输出。
在网络架构上,层级的大小不同(例如,第二层卷积输出8*8的feature map,第三层卷积输出4*4的feature map,第四层卷积输出2*2的feature map),这对多尺度物体的检测提供了便利——2*2的feature map对大尺度的物体进行检测,而8*8的feature map对小尺度的物体进行检测(具体例子可以参见上图中的对猫和狗的检测)。

【注:大小尺度对应feature map的划分与default boxes的生成有关,这里先不对其进行详细说明,下文中会提到。】


【Default boxes and aspect ratios】

(这里的default boxes给我的感觉有点像YOLOv2中的anchor boxes)

对于feature map中每个的location(作者在论文中将其称为feature map location,个人将其理解为feature map中的cell,为了方便表述,下文这样的location称为cell),都会生成一组default boxes,用YOLOv2论文中的话说,这些default boxes是根据人类经验事先选择的。所以,这些default boxes相对于每个cell的位置是固定的。于是,在每个feature map中,我们(事实上是网络)可以了解到ground truth boxes与default boxes之间的位置关系,进而预测坐标偏移。不仅如此,网络还可以预测boxes中的物体类别,对每个类别的划分进行score。

现在让我们来做一个计算:

假设每个cell会生成k个default boxes,网络中一共有c个分类类别,位置信息利用四个属性来表述(如上图所示,分别为default boxes的x偏移量、y偏移量、宽度w、高度h)。
那么每个cell中就会使用(c+4)*k个卷积核(filter)进行运算(每个属性对应一个卷积核);
对应的m*n的feature map中就会使用到一共(c+4)*k*m*n个卷积核。

说到这里,让我们看看SSD的网络架构(原文中将其与YOLO进行对比):


对于p通道为m*n的feature layer,利用3*3卷积核在m*n的每个位置,产生表明类别score(确定分类),或者坐标偏移(确定位置)的输出值。

bounding box的坐标偏移是其相对于一个feature map中default box位置而测量的。


【Choosing scales and aspect ratios for default boxes】

前面有提到,SSD中的default boxes是根据经验事先选择的,那么,SSD是如何对其进行选择的呢?

由于SSD利用不同尺度(lower and upper)的feature maps进行检测,不同卷积层所对应的feature maps尺度不同,所以default boxes的生成也与feature maps所在的层级有关。

在SSD中,假设想要利用m个feature map进行预测,那么default boxes的尺度计算公式如下:


其中,最低层(lowest layer)default boxes的尺度为0.2,最高层(highest layer)default boxes的尺度为0.9,k表示feature map所处的层数。

此外,由于一个cell要生成多个default boxes,default boxes的宽高比(aspect ratios)也有所不同,论文中使用了:1,2,3,1/3,1/2五个值作为宽高比(ar)。

以此经过一点小小的计算,我们可以算出每个default boxes宽和高(w代表宽、h代表高)的大小:

        

经过运算,我们可以发现,论文中的尺度表述方式 s 是default boxes面积的开平方。

为了增加default boxes的个数(或者只是因为作者喜欢偶数对称性),作者对于宽高比为1的情况另外生成了一个新的default box,它的大小(s)是这样的(会比其他default boxes的面积大一点):


至此,作者对每个feature map中的每个cell生成了6个default boxes。
实验表明,default boxes的个数越多,模型的性能会越好,但是开销也会越大。
具体原因在本人的一篇介绍YOLOv2的博客中有所分析:

YOLOv2简述

然后,将每个default box的中心放置于这个坐标处:

其中,分母表示feature map的大小(4*4 feature map所对应的分母就是4),分子中的i,j取值范围为[0,|fk|)。

经过与feature map简单的比较,我们可以看到,将所有可能的i,j值带入坐标之后,对应的坐标刚好铺满整个feature map的所有cell(这也是为什么i,j的取值范围为左闭右开)。

本节过后,我们就可以回答第一节所提出的那个有关待检测物体尺度的问题了:

由于低层feature map划分较细(例如,8*8),较高层feature map划分较粗(例如,2*2),所以feature map中的default boxes大小也不同。很明显可以看出的是,2*2feature map中的default boxes面积要比8*8feature map中的default boxes面积大,所以高层feature map中对应检测的物体尺度较大,低层feature map中对应检测的物体尺度较小。


【Matching strategy】

在训练期间,网络需要决定哪个default box匹配对应的ground truth box(网络的输入)并据此训练网络。

在本节以及后面的描述中,经常会出现jaccard overlap这个高端大气上档次的词语,原文中使用的是这个词,本文未对其进行修改,但其实jaccard overlap就是我们平时所说的交并比:IoU。

对IoU不了解的朋友们可以参看本人另外一篇博客:

机器学习中的一些基本概念(未完待续)

匹配策略分为两步:
1.用MultiBox中的最佳jaccard overlap(即,IoU最大)匹配每一个ground truth box与default box,用以保证每个ground truth box至少有一个default box相对应。
2.如果default box与ground truth box的jaccard overlap超过某阈值(例如,0.5),那么就把该default box与该ground truth box进行匹配。

这个策略允许为一个ground truth box匹配多个有所重叠的default boxes,而不是要求ground truth box只选择与其有最大重叠的某一个default box。

我们将第一步和第二步中所有匹配到ground truth box的default box称为正样本(positive sample);

将所有没有匹配到ground truth box的default box称为负样本(negative sample)。


【Hard negative mining】

匹配过后,我们会发现,只有少数default boxes是正样本,而绝大多数是负样本。

所以,作者将负样本进行筛选:以confidence loss由高到低对负样本进行排序,将排序靠后的负样本剔除掉,直到正样本和负样本的比例约为1:3。

那么,confidence loss是什么?


【Training objective】

神经网络训练的目标往往是将一个loss值最小化,我们可以将这个loss值看作模型预测结果与我们期望得到的真实结果的偏差。

有了这样一个概念,对confidence loss的理解就很简单了。

在SSD中,模型需要预测的东西一共分两大类:位置、分类。SSD将对应于分类的loss称为confidence loss(conf),对应于位置的分类称为localization loss(loc),模型的总loss可以简单看做conf和loc的加权平均值(但事实上可能会比加权平均值复杂一些)。

公式部分由于排版等问题不在本文中进行讲解,有兴趣的朋友们可以参看论文原文进行研究。

【Data augmentation】

这部分其实可以看做作者为了防止过拟合、增多训练数据、提高鲁棒性而使用到的一个小技巧——数据增广。

对于每一张图片,训练的时候随机进行如下操作:
1.使用原始图像

2.采样一个patch,与物体的最小jaccard overlap为0.1,0.3,0.5,0.7或0.9

3.随机采样一个patch

且在上述采样操作过后,得到的patch被resize到一个固定的尺寸。接着,对图片进行概率为0.5的水平翻转。

经过如上这么一折腾,就增加了数据多样性。


【Experimental Results】

费了这么多的周折,SSD在一些数据集上的测试结果如下:


两个字,优秀!

更多的实验过程、实验数据等资料在论文原文中都有详细列出,本文就不再赘述。

【写在后面】
如果对本文哪里有不理解的地方,多看看第一张图,相信对理解SSD会有很大帮助。

论文原文地址:
SSD: Single Shot MultiBox Detector

目标检测算法——YOLO与SSD解析 文章目录1 YOLO(you only look once)算法1.1 YOLO整体结构1.2 网格(grid)——`7*7*30`1.2.1 单元格(grid cell)1.2.2 网格输出筛选1.3 非最大抑制(NMS)1.4 YOLO训练1.5 与Faster R-CNN比较2 SSD(Single Shot MultiBox Detector)算法2.1 SSD简介2.2 SSD结构2.3... 阅读详情

相关推荐

JavaSpringBoot + VUE 相关开发环境配置合集

1.Java环境-JDK安装 参照:Java基础1-环境篇:JDK安装与环境变量配置 Java基础1-环境篇:JDK安装与环境变量配置_第一段代码的博客-优快云博客_jdk 2.Web服务器-Tomcat安装 原创Java服务器Tomcat安装和配置 3.Maven(后面为了项目兼容性,使用了3.0.5版本) 原创Maven安装和配置(Maven3.0.5) 4.nginx 原创nginx轻量级Web服务器安装和配置 5 数据库mysql 原创数据库Mysql安装和配置 ...

第一段代码的博客 3163

SSD算法原理介绍,包含算法结构、Loss计算、默认框计算几个方面

一、SSD算法的介绍 1、SSD算法: 是One-stage目标检测算法中的一种,不需要region proposal阶段,可以直接产生物体的类别概率和位置坐标值,经过单词检测即可直接得到最终的检测结果,具有检测速度快的特点。 2、SSD算法结构: ① 主干网络:是由VGG16中部分卷积层组成,并将最后2层的conv6和conv7换成全连接层,用来进行图像分类 ...

weixin_43869605的博客 1万+

谈谈人大金仓数据库

人大金仓数据库(Kingbase)是国产自主研发的关系型数据库管理系统,兼容主流数据库语法,支持高并发、高安全性及国产化适配。该数据库提供完整的安装部署方案,包括环境准备、初始化配置和验证流程,并配备专业的数据迁移工具(KDMS)实现从Oracle/MySQL等数据库的平滑迁移。系统提供KStudio等图形化管理工具,支持性能监控、备份恢复等运维功能,同时具备性能调优、高可用架构、分区表管理等高级特性,满足政府、金融等领域的企业级需求。

蜚鸣的博客 2091

SSD进行物体检测

1.案例效果: 2.案例需求: 代码: 对结果进行标记-完整代码: def tag_picture(self, images_data, outputs): """ 显示预测结果到图片中 :return: """ # 获取每张图片预测结果的值 for i, img in enumerate(images_data): # 解析输出结果,每张图片的标签,置信度和位置 pre

zikyou的博客 640

Spring Cloud 整合(一) CRUD

Springcloud 整合之 CRUDSpringcloud介绍功能概述为什么要选用Springcloud Springcloud介绍 功能概述 实现微服务 Spring Cloud为开发人员提供了工具,以快速构建分布式系统中的某些常见模式(例如,配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,领导选举,分布式会话,群集状态)。分布式系统的协调导致样板式样,并且使用Spring Cloud开发人员可以快速站起来实现这些样板的服务和应用程序。 为什么要选用Springcloud

Kerwin-Lin的博客 1501

【侯俊霞全网最全收集--PLC1200/200SMART(88+93课时) 第1章】

第1章:零基础快速入门西门子S7-1200

问就ycy的博客 2030

深度学习物体检测(七)——SSD

SSD (Single Shot MultiBox Detector)方法同时兼顾了 mAP 和实时性的要求。对于输入图像大小为 300*300 在 VOC2007 test 上能够达到 58 帧每秒( Titan X 的 GPU ),72.1% 的 mAP。输入图像大小为 500 *500 , mAP 能够达到 75.1%。

zchang81的博客 9289

Apollo&Carla联合仿真基本操作

基于UE4开发的开源无人驾驶仿真器PythonAPI自动驾驶传感器(还有理想化的collision detection传感器)用于规划和控制的快速仿真地图生成交通场景(open scenario)仿真ROS集成自动驾驶baseline0.9.15新特性新的车型以及地图基于Omniverse的素材导入基于OSM的三维场景生成。

SLAM小土堆 3799

【3】目标检测之SSD-Single Shot MultiBox Detector

这里写目录标题网络结构知识点DefaultBoxPredictor损失函数类别损失定位损失训练方法 网络结构 骨干网络采用VGG-16模型,将经过卷积得到的特征层中的Conv4_3, Conv7, Conv8_2, Conv9_2, Conv10_2, Conv11_2这一共6个特征层作为预测层,分别通过Predictor进行卷积获得8732个default box的category score和shape offset to default box coordinates,将预测结果经过筛选和非极大值抑制

qq_16009377的博客 235

政务帮办新范式:基于检索增强与多智能体协同的智能系统实践

本文提出了一种多智能体协同的智能政务系统架构,突破传统方案在状态管理、职责过载和感知闭环方面的局限。系统由中央规划智能体、对话引导智能体、参数提取智能体和执行状态分析智能体组成,通过职责分离与显式状态管理实现高效协同。核心创新在于中央决策引擎的确定性逻辑,采用基于规则的状态机设计,确保系统可靠可控。该架构支持自然语言交互、参数自动提取、业务系统操作和视觉闭环验证,能够真正实现"帮办"功能,显著提升政务服务的智能化水平。

468

Mamba-YOLOv8深度解析:基于状态空间模型的下一代目标检测架构(含完整代码与实战部署)文末含资料链接!

通过本文的完整指南,您将掌握从理论创新到工程落地的全流程技术细节。立即动手实践,开启目标检测的新纪元!

FJN110的博客 517

深度学习——物体检测算法:R-CNN,SSD,YOLO(笔记)

④yolo 在后续的版本(V2,V3,V4...)中有持续的改进,但是核心思想没有变,真实的边缘框不会随机的出现,真实的边缘框的比例、大小在每个数据集上的出现是有一定的规律的,在知道有一定的规律的时候就可以使用聚类算法将这个规律找出来(给定一个数据集,先分析数据集中的统计信息,然后找出边缘框出现的规律,这样之后在生成锚框的时候就会有先验知识,从而进一步做出优化)①输入图像后,首先进入一个基础网格抽取特征,抽取完特质之后对每个像素生成大量的锚框(每个锚框就是一个样本,然后预测锚框的类别和偏移)

jbkjhji的博客 2799

PCL 点云加权均值收缩

PCL 点云加权均值收缩

dayuhaitang1的博客 688

【SSD目标检测】1:图片、视频内的物体检测与定位

SSD原理

zzZ_CMing的博客 2万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

目标检测算法——SSD详解

目录 一、 背景(基本介绍) 二、 网络结构 三、 具体过程 1. default box 匹配 2. 损失函数 3. 数据增广 4. Atrous Algothrim 5. NMS(非极大值抑制) 五、 性能评估 优点: 缺点: SSD 算法的改进:DSSD 1. DSSD 网络结构 图19 VGG网络与ResNet网络的对比 2. 实现细节 3. 训练...

T-Jhon的博客 6万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

目标检测->SSD算法

目标检测算法总体分为:基于区域的算法和基于回归的算法 1)基于区域的算法: RCNN, Fast RCNN, Faster RCNN, Mask RCNN 等。整个检测过程分为两个阶段。在第一个阶段,检测器需要找到一些假设的区域 (ROI);在第二个阶段,检测器需要在这些假设区域上进行分类 (classification) 和 位置回归 (bounding box regression)。 2)基于回归的算法:YOLO系列 等。检测是一个端到端 (end-to-end) 的过程,直接回归出物体的类别和位

wanchengkai的博客 2万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

物体检测算法-R-CNN,SSD,YOLO

目标检测算法主要分为两个类型(1)two-stage方法,如R-CNN系算法(region-based CNN),其主要思路是先通过启发式方法(selective search)或者CNN网络(RPN)产生一系列稀疏的候选框,然后对这些候选框进行分类与回归,two-stage方法的优势是准确度高。

qq_41286360的博客 2693

SSD算法的改进版之R-SSD

论文:Enhancement of SSD by concatenating feature maps for object detection 论文链接:https://arxiv.org/abs/1705.09587算法详解: SSD算法在object detection领域的效果有目共睹,是proposal-free方面的代表算法之一,如果你对SSD算法不大熟悉,可以看看这篇博客:SSD(

AI之路 2万+

目标检测之SSD

一、目标检测之SSD SSD: Single Shot MultiBox Detector 论文链接:https://arxiv.org/abs/1512.02325 论文翻译:https://blog.youkuaiyun.com/denghecsdn/article/details/77429978 论文详解: 论文代码:https://github.com/balancap/SSD-Tensorflo...

thisiszdy的博客 3万+

SSD算法详解

SSD github : https://github.com/weiliu89/caffe/tree/ssd SSD paper :https://arxiv.org/abs/1512.02325 SSD 动态PPT:https://docs.google.com/presentation/d/1rtfeV_VmdGdZD5ObVVpPDPIODSDxKnFSU0bsN_rgZXc/pu...

ytusdc的博客 5万+

自动驾驶感知——激光雷达物体检测算法

点视图 | PointNet/PointNet++,Point-RCNN,3D-SSD 俯视图 | VoxelNet,SECOND,PIXOR,AFDet 前视图 | LaserNet,RangeDet 多视图融合 (俯视图+点视图)|PointPillar,SIENet,PV-CNN 多视图融合(俯视图+前视图)|MV3D,RSN

sinat_52032317的博客 7603

SSD物体检测算法详解

物体检测算法,按算法结构,可以分为one-stage和two-stage两类。 two-stage经典算法主要是R-CNN族,以准确度见长,速度稍慢,一般不如one-stage。 one-stage算法主要包括YOLO、SSD、CornerNet等,以速度快见长,准确度一般不如two-stage。本文分享的SSD就是经典的one-stage算法。 上图是物体检测算法整个演化坐标轴,可以看出SSD...

weixin_34280237的博客 909

SSD算法解析

目标检测算法主要分为两类: Two-stage方法:如R-CNN系列算法,主要思路就是通过Selective Search或者CNN网络产生一系列的稀疏矩阵的候选区域,然后对这些候选区域进行分类和回归,two-stage的方法优势在于准确率度高; One-stage方法:如YOLO系列方法,主要思路就是均匀地在图片上不同位置进行密集采样,采样时使用不同尺度和长宽比box,然后利用CNN提取特征后直接进行分类和回归,整个过程只需要一步,所以优势在于速度快。我们接下来介绍的SSD方法也是单阶段的算法。 SS

m0_56192771的博客 1万+

SSD-variants: 使用PyTorch实现的SSD物体检测算法变种

SSD-variants: 使用PyTorch实现的SSD物体检测算法变种 1. 项目基础介绍和主要编程语言 SSD-variants 是一个开源项目,它基于 PyTorch 深度学习框架,实现了多种 SSD(Single Shot MultiBox Detector)物体检测算法的变种。该项目旨在提供一个学习项目,通过实现这些算法变种来探索和改进物体检测技术。主要使用的编程语言是 Python。...

gitblog_00220的博客 556

物体检测算法对比:SSD与YOLO与Faster RCNN谁更优?

1.背景介绍 物体检测是计算机视觉领域的一个重要研究方向,它涉及到识别图像中的物体及其位置、尺寸和形状等特征。物体检测算法广泛应用于自动驾驶、视频分析、人脸识别、医疗诊断等领域。近年来,随着深度学习技术的发展,物体检测算法也发生了巨大变化。目前,SSD(Single Shot MultiBox Detector)、YOLO(You Only Look Once)和Faster R-CNN等三种算...

AI天才研究院 2565
上一篇: 新手初识Tensorflow
下一篇: 机器学习如何进行调参
echoKangYL
博客等级 码龄9年 432粉丝 27原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值