深度学习-物体检测SSD

news/2024/11/13 13:58:17/

一:SSD结构

以VGG-16为基础,使用VGG的前五个卷积,后面增加从CONV6开始的5个卷积结构,输入图片要求300*300

1. 分别将VGG16的全连接层FC6和FC7转换成3x3的卷积层Conv6和1x1的卷积层Conv7

2.去掉所有的Dropout层和FC8层

3.同时将池化层pool5中的stride=2的2x2变成了stride=1的3x3

4.添加了Atous算法,目的获取更加密集的得分映射

5.然后在VGG16的基础上新增了卷积层来获得更好的特征图以用于检测

它针对输入的图片获取不同尺度的特征映射,但是在预测阶段仅仅使用了最后一层的特征映射。 同时在不同的特征映射上面进行预测,它在增加运算量的同时可能会提高检测的精度,因为它具有更多的可能性。

二:流程

 

如上图,输入以辆汽车图片,经历了多个卷积层和池化层,可以看到,不同的卷积层会输出不同大小的feature map(特征图),而且不同的feature map中有不同的特征,不同的特征有不同的作用,都会输入到NMS中。总的来说,浅层卷积层对边缘更加感兴趣,可以获得一些位置信息,二深层网络对有浅层特征构成的复杂特征更感兴趣,可以获得一些语义信息,对于检测任务而言,目标有复杂有简单的,对于简单的我们利用浅层网络的特征就可以检测出来,对于复杂的利用深层网络的特征检测出来。因此,如果同时在不同的feature map上面进行检测,理论上会有更好的检测结果。

 SSD中引入了Defalut Box(候选框),实际上与Faster R-CNN的anchor box(候选框,不同的结构力叫法不一样)机制类似,就是预设一些目标预选框,不同的是在不同尺度feature map所有特征点上使用PriorBox层

生成一系列feature map时,传统框架会在feature map上进行region proposal提取出可能有物体的部分然后分类,这一步非常费时,所以SSD就放弃了,而是选择将直接生成一系列defaul box(候选框),然后以prior box为初始bbox,将bbox回归到正确的GT位置上去,预测出的定位信息实际上是回归后的bboxes和回归前的prior box的相对坐标,整个过程通过网络的一次前向传播就可以完成。

三:Detector和classifier

 Detector和classifier的三个部分

1.PriorBox层:生成default boxes,默认候选框

2.Conv3x3:生成localization,4个位置偏移

3.Conv3x3:confidence,21个类别置信度(要区分出背景)

 

四:PriorBox层-default boxes

 训练中还有一个东西:Prior box,是指实际中选择的要投入训练过程的Default box(每一个feature map cell 不是k个Default box都取)。
      也就是说Default box是一种概念,Prior box则是实际的选取。训练中一张完整的图片送进网络获得各个feature map,对于正样本训练来说,需要先将prior box与ground truth box做匹配,匹配成功说明这个prior box所包含的是个目标,但离完整目标的ground truth box还有段距离,训练的目的是保证default box的分类confidence的同时将prior box尽可能回归到ground truth box。
       举个列子:假设一个训练样本中有2个ground truth box,所有的feature map中获取的prior box一共有8732个。那可能分别有10、20个prior box能分别与这2个ground truth box匹配上。

default boxex类似于RPN当中的滑动窗口生成的候选框,SSD中也是对特征图中的每一个像素生成若干个框,以feature map上每个点的中点为中心(offset=0.5),生成一些列同心的Defalut box(然后中心点的坐标会乘以step,相当于从feature map位置映射回原图位置)

 

特点分析:
priorbox:相当于faster rcnn里的anchors,预设一些box,网络根据box,通过分类和回归给出被检测到物体的类别和位置。每个window都会被分类,并回归到一个更准的位置和尺寸上
各个feature map层经过priorBox层生成prior box 

 根据输入的不同aspect ratio 和 scale 以及 num_prior来返回特定的default box,default box 的数目是feature map的height x width x num_prior。

 

五:localization与confidence

 这两者的意义如下,主要作用用来过滤,训练

六:训练与测试流程

1.train流程

 输入->输出->结果与ground truth标记样本回归损失计算->反向传播, 更新权值

2.样本标记

先将prior box与ground truth box做匹配进行标记正负样本,每次并不训练8732张计算好的default boxes, 先进行置信度筛选,并且训练指定的正样本和负样本, 如下规则

正样本:

1.与GT重合最高的boxes, 其输出对应label设为对应物体.
2.物体GT与anchor iou满足大于0.5

负样本:其它的样本标记为负样本

七:损失

 网络输出预测的predict box与ground truth回归变换之间的损失计算, 置信度是采用 Softmax Loss(Faster R-CNN是log loss),位置回归则是采用 Smooth L1 loss (与Faster R-CNN一样)

 


http://www.ppmy.cn/news/1528188.html

相关文章

Linux文件IO(二)-文件操作使用详解

前篇已经讲过open打开文件的操作使用,本篇文章介绍剩余的wirte、read、close、lseek等操作。 1.write写文件 调用 write 函数可向打开的文件写入数据,其函数原型如下所示(可通过"man 2 write"查看): #inc…

基于SpringBoot+Vue的商场停车场管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

【Git原理与使用】版本管理与分支管理(1)

目录 一、基本操作 1、初识Git 2、Git安装[Linux-centos] 3、Git安装[ Linnx-ubuntu] 4、创建git本地仓库 5、配置Git 6、认识工作区、暂存区、版本库 7、添加文件 8、查看历史提交记录 9、查看.git文件目录结构 10、查看版本库对象的内容 11、小结(在本地的.git仓库…

HTML中的零宽字符

概述 零宽字符是一组在文本中没有可见宽度的字符,它们通常用于处理文本的布局、分隔和合成。下面是一些常见的零宽字符及其详细介绍: 详细介绍 零宽空格 (Zero Width Space, ZWSP) Unicode 码位: U+200BHTML 实体: ​ 或 ​用途: 用于防止文字自动换行。用于在文本中插入不…

pandas:读取各类文件方法以及爬虫时json数据保存

文件的读取与写入 | 常用读文件方法 | 说明 | | -------------- | ---------------- | | read_csv | 读取CSV文件 | | read_excel | 读取Excel文件 | | read_html | 读取网页HTML文件 | | read_table | 通用读取方法 | | 常用写文…

leetcode160相交列表

思路 一开始以为要固定A,然后循环B,这个复杂度也太高了 题解: https://leetcode.cn/problems/intersection-of-two-linked-lists/?envTypestudy-plan-v2&envIdtop-100-liked 代码 /*** Definition for singly-linked list.* publi…

vue node node-sass sass-loader 版本 对应 与 兼容

警告: LibSass 和 Node Sass 已弃用。虽然它们将继续无限期地接收维护版本,但没有计划添加其他功能或与任何新的 CSS 或 Sass 功能兼容。仍在使用它的项目应该转移到 Dart Sass。 sass Sass是一种预处理器脚本语言,可以解释或编译成…

探索Python的Excel世界:openpyxl的魔法之旅

文章目录 探索Python的Excel世界:openpyxl的魔法之旅背景:为什么选择openpyxl?什么是openpyxl?如何安装openpyxl?简单的库函数使用方法场景应用:openpyxl在实际工作中的应用常见bug及解决方案总结 探索Pyth…