目标检测主流方法有两大类

two-stage,以rcnn系列为主,采用建议框的方式对目标进行预测,过程首先要经过网络生成候选框,分类背景前景与进行第一次回归,之后再进行一次精细回归。

优点是准确率高,但速度较one-stage慢

one-stage,以yolo 、sdd等为主,通过事先制定先验框(对图像均匀进行选取先验框),直接回归出目标的坐标来检测。

优点是速度快,但精度稍微低(均匀的密集采样的一个重要缺点是训练比较困难,这主要是因为正样本与负样本(背景)极其不均衡,导致模型准确度稍低)

SSD的主要特点:

1.采用多尺度预测,对图像的整体信息提取的比较完整

2.速度与精确度都比较高;

3.利用卷积进行检测;

4.设置先验框,这个与yolo的先验框类似但不同;类似fast rcnn中的anchor机制,尺度与长宽比不同。

另外,再yolo3中已经对先验框的设置进行了改进,采用了ssd的多尺度方法,设置了9中先验框,最后达到的准确率与速度都是比较好的。

SSD的网络结构

下面这张图是ssd的网络结构,网络的基础cnn网络是用vgg16_atros版本,在vgg16的基础上进行了改进,首先是使用卷积层来代替全连接层,对应图中的Conv6,Conv7,原来是FC6和FC7,

改为卷积是因为后面还需要添加新的卷积层;

第二个改进是采用deeplab中的带洞卷积(不增加参数与模型复杂度的条件下指数级扩大卷积的视野,代替pooling操作,可以使特征图的大小保持不变)的操作,使卷积核的感受野变大,在池化的同时对图片信息没有丧失很多信息。

可以看出,检测过程不仅在填加特征图(conv8_2, conv9_2, conv_10_2, pool_11)上进行,为了保证网络对小目标有很好检测效果,检测过程也在基础网络特征图(conv4_3, conv_7)上进行。小物体在高层特征图上保留很少的信息,

通过增加输入图像的尺寸能够解决对小物体检测效果。

对于每个特征图有不同的先验框,先验框的设置,包括尺度(或者说大小)和长宽比两个方面。其遵守一个线性递增规则:随着特征图大小降低,先验框尺度线性增加。

对于第一个特征图Conv4_3,因为比较大,所以后面加了一个l2 normlization,这个与batch normlization有所不同,l2 normlization仅仅对每个像素点在channels维度上进行归一化,batch normlization是在(batch_size,wight,height )上同时进行

归一化的。

接下来是卷积检测的过程,对应图中的倒数第二个框(Detectiongs:8732 class)  ,8732指的是所有特征图得到的先验框个数;不同的特征图所对应的先验框的个数也不一样;

每个特征图对应的框数如下:

38×38×4+19×19×6+10×10×6+5×5×6+3×3×4+1×1×4=8732

一般情况下,每个单元会设置多个先验框,其尺度和长宽比存在差异

SSD训练的过程

对于每个ground truth来说,第一个原则是选取一个先验框与之iou最大的来匹配,但是这种方法会使得正负样本变得不均衡,所以需要第二种原则,

第二种原则即:对于剩下的先验框,若iou大于某个阈值(0.5),也将之与ground truth匹配,因为一个ground truth可以匹配多个先验框,但是一个

先验框只能匹配一个ground truth,

即使这样,负样本还是很多,为了保证正负样本尽量平衡,SSD采用了hard negative mining,就是对负样本进行抽样,

抽样时按照置信度误差(预测背景的置信度越小,误差越大)进行降序排列,选取误差的较大的top-k作为训练的负样本,以保证正负样本比例接近1:3。

训练的损失函数:

损失函数有两部分构成:定位的损失,以及置信度函数的损失;

N是样本个数,xij这个值是一个指示参数,代表的是第i个先验框与第j个ground truth关于类别k是否匹配,值为0和1;

Lloc是位置的损失函数,位置损失函数采用smmothl1来计算,

Lconf是置信度损失函数,前半部分是关于类别p匹配的概率预测,后半部分是背景概率预测;计算采用softmax loss;

图片转自:https://www.cnblogs.com/fariver/p/7347197.html

SSD的预测过程:

预测过程首先根据类别置信度确定其类别,过滤掉背景的先验框,然后根据置信度值过滤低于阈值的先验框,

对于这些先验框计算其位置信息,

再把置信度按降序排列,通过NMS,最后得出预测目标框。

SSD的理解,为PyramidBox做准备的更多相关文章

  1. SSD论文理解

    SSD论文贡献: 1. 引入了一种单阶段的检测器,比以前的算法YOLO更准更快,并没有使用RPN和Pooling操作: 2. 使用一个小的卷积滤波器应用在不同的feature map层从而预测BB的类 ...

  2. 反射学习总结 --为理解SpringMVC底层做准备

    反射是什么? 通俗理解 - 照X光. java:一个类在反射面前就像照X光,清清楚楚明明白白. 应用:我们的ide中,能够"."一下就知道类中的所有方法就是通过反射实现的. XML ...

  3. Servlet学习总结,为理解SpringMVC底层做准备

    Servlet 一句话概括 :处理web浏览器,其他HTTP客户端与服务器上数据库或其他应用交互的中间层 Servlet 生命周期 : 1.类加载, 2.实例化并调用init()方法初始化该 Serv ...

  4. 对QT的理解——能在公司里不做Java,不做很偏门的产品,不使用偏门的语言,还有钱挣,要有感恩的心

    我的理解: QT做应用软件可以很强大,界面足够漂亮(最有意思的是QSS,让我刮目相看),应该是足够了.同时QT也提供了源码,不过超级复杂,难以理解,所以还是无法深入底层.另外它提供了一个额外的好处,就 ...

  5. SSD -----TLC MLC SLC

    SLC缓存什么鬼?TLC评测造假要持续多久 2016.5.5来源:中关村在线 TLC的廉价真的将SSD引入了全面普及的高速公路上,谈到TLC我们更多的理解是TLC的P/E(Program/Erase ...

  6. SSD 为什么顺序写比随机写性能更好?

    SSD以Page为单位做读写,以Block为单位做垃圾回收,Page一般有16KB大小,Block一般有几十MB大小,SSD写数据的逻辑是: 1)将该块数据所在的Page读出 2)修改该Page中该块 ...

  7. SSD回归类物体检测

    本宝宝最近心情不会,反正这篇也是搬用别人博客的了:(SSD就是YOLO+anchor(不同feature map 作为input)) 引言 这篇文章是在YOLO[1]之后的一篇文章,这篇文章目前是一篇 ...

  8. 原 CNN--卷积神经网络从R-CNN到Faster R-CNN的理解(CIFAR10分类代码)

    1. 什么是CNN 卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Netwo ...

  9. SSD检测几个小细节

    目录 一. 抛砖引玉的Faster-RCNN 1.1 候选框的作用 1.2 下采样问题 二. SSD细节理解 2.1 六个LOSS 2.2 Anchor生成细节 2.3 Encode&& ...

随机推荐

  1. ConcurrentSkipListMap--跳表的简单使用

    import java.util.Map; import java.util.concurrent.ConcurrentSkipListMap; /** * 跳表的使用 */ public class ...

  2. C#高级编程笔记(11至16章)异步/托管/反射/异常

    11.1.2LINQ语句 LINQ查询表达式以from子句开始,以select或者group子句结束.在这两个子句之间可以跟零个或者多个from.let.where.join或者orderby子句. ...

  3. 阿里云李刚:下一代低延时的直播CDN

    在上周落幕帷幕的多媒体领域技术盛会——LiveVideoStackCon音视频技术大会上,阿里云的高级技术专家李刚进行了<下一代低延时的直播CDN>技术分享.主讲人李刚,多年关注在CDN这 ...

  4. flutter图片组件

    在flutter中,image组件有很多构造函数,常用的包括Image.asset(本地图片)和Image.network(远程图片). 常用属性 不管是显示本地图片还是远程图片,image组件都包含 ...

  5. Java程序执行的过程

    ava程序执行的过程: Step1:将字节码加入内存: Step2:对字节码进行合法性检查: Step3:jvm会为每个字节码文件都生成一个对象(class): Step4:执行静态代码块,初始化静态 ...

  6. 做一个简单的scrapy爬虫

    前言: 做一个简单的scrapy爬虫,带大家认识一下创建scrapy的大致流程.我们就抓取扇贝上的单词书,python的高频词汇. 步骤: 一,新建一个工程scrapy_shanbay 二,在工程中中 ...

  7. 2018-2019-2 20175120 实验五《Java网络编程》实验报告

    实验报告封面 课程:Java程序设计 班级:1751班 姓名:彭宇辰 学号:20175120 指导教师:娄嘉鹏 实验日期:2019年5月26日 实验时间:13:10 - 15:25 实验序号:20 实 ...

  8. 测开之路三十四:html常用标签

    网页的结构: HTML:超文本标记语言是迄今为止网络上应用最为广泛的语言,也是构成网页文档的主要语言.HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字.图形.动画.声音.表格.链 ...

  9. 微众银行c++选择题后记

    一个类的成员可以有:另一个类的对象,类的自身指针,自身类对象的引用(私有的如何初始化呢,所以不行,换成静态的可以),自身类对象(构造时如何初始化呢?) class A{ public: A(){} A ...

  10. appium常见问题03_appium脚本报错selenium.common.exceptions.WebDriverException

    运行appium脚本时报错selenium.common.exceptions.WebDriverException...,如下截图: 该报错说明appium和app的内置chrome版本不一致 [解 ...