阅读笔记:Single Shot Multibox Detector(SSD)
——为什么会阅读这篇论文?原因很简单:SSD比Faster R-CNN准、比YOLO快。
——论文出处: UNC Chapel Hill(北卡罗来纳大学教堂山分校) 的 Wei Liu 新作
——论文代码:https://github.com/weiliu89/caffe/tree/ssd
——本文宗旨:拒绝逐行逐句翻译,从我的理解我的角度,综合很多博客论文的看法来深入分析SSD
Single Shot Multibox Detector
一、论文总体观:
1.1、总体观:
SSD方法提供了一套建立在一个简单网络上的目标检测的方法:一方面,通过人为事先设定默认框的坐标,通过网络的学习训练,与真实框的损失计算,逐渐回归到接近真实尺度;另一方面,该神经网络还会在多个卷积层输出相应类别预测;结合上面位置尺度、类别预测,SSD可以省略其他神经网络惯用的姿态:随机假设目标框、小管道候选、像素重采样、特征重采样、然后需要高效分类器:这些方法套路依托深层次的特征计算,对实时的检测时间花销更大,而且只能牺牲准确度来实现提速(比Faster R-CNN准、比YOLO快)——因此时间上有了很大的提高并且准确率上也是有所提升。本方法在仿真上主要在PASCAL VOC2007上进行训练和评估,并且最后在PASCAL VOC2012上进行测试。
所以,SSD快在省略了随机假设目标框、小管道候选、像素重采样、特征重采样等步骤;准确在整合每一层卷积层输出的预测信息(包括类别和四个位置偏移量),没有丢掉细小的信息;速度和准度两者的平衡靠的是端对端的训练;
1.2、摘要:
文章在既保证速度,又要保证精度的情况下,提出了 SSD 物体检测模型,与现在流行的检测模型一样,将检测过程整合成一个单一神经网络( single deep neural network)。便于训练与优化,同时提高检测速度。SSD 将输出一系列离散化(discretization)的 目标框(bounding boxes),这些目标框是在不同层次(layers)上的特征图( feature maps )上生成的,并且有着不同的高宽比(aspect ratio)。
在预训练(prediction)阶段:要计算出每一个默认框(default box)中的物体,其属于每个类别的可能性,即 (score)得分。本文首选 PASCAL VOC 数据集,总共有 20 类,那么得出每一个目标框中物体属于这 20 个类别的每一种的可能性。同时,要对这些目标框的形状(shape)进行微调,以使得其符合物体的 外接矩形。
还有就是,为了处理相同物体的不同尺寸的情况,SSD 结合了不同分辨率的特征图( feature maps )的预测( predictions)。
二、SSD框架:
其实恕我直言,本文的框架思路不算特别清晰易懂,所以我打算直接放图,从一个大局观来理解这个研究方法:起码,你知道这个方法在做些什,然后你才有动力去理解他的具体的实现过程:
首先输入图片经过VGG16的预处理,什么事VGG16?我在之前的博客里面有对它的每一层进行考究:
http://blog.csdn.net/errors_in_life/article/details/65950699
接下来的六层卷积层是作者的自建卷积层,因为VGG16网络自身的三个全连接层并不可以作为一个图像处理,他输出的知识对应每一个类别的置信分数,所以准确的来说,VGG16只适合作为一个分类器,但是改进过后变成一个全卷积的网络就可以在最后得到特征图,上面有人工定义的默认框:
然后在经过一个卷积预测器:得到一个可以理解为二维的矩阵:比如第一个38*38*512的层,经过卷积预测器后的输出值为(3*3*512*k)*(4+c)的矩阵(这个 算法中c=20);然后每一层产生的列数一致:每层行数叠加形成一个8732*(4+c)的矩阵。形成这个矩阵的每一行对应一个图像目标检测的框。这八千多个框经过非极大值抑制(后面提及)可以筛选剩下一个或者几个了;其中不满足的框标记为负数,其余留下的标为正数框。紧随其后:
而对于训练过程中的默认框和真框的匹配,基本思路是:让每一个默认框回归并且到真框,这个过程的调控我们需要损失层的帮助,他会计算真实值和预测值之间的误差,从而指导学习的走向。
具体过程是我们会让每一个默认框经过Jaccard系数计算和真实框的相似度,阈值只有大于百分之五十的才可以列为候选名单;假设选择出来的是N个匹配度高于百分之五十的框吧,我们令i表示第i个默认框,j表示第j个真实框,p表示第p个类:那么如图,我们就可以结合真实框和默认框( 预测框 )进行定位的损失计算;以及结合c进行置信度的计算(这里的c是表示置信度)。
三、方法介绍:
3.1、非极大值抑制(NMS):
非极大值抑制顾名思义就是抑制不是极大值的元素,搜索局部的极大值。这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二是邻域的大小。这里不讨论通用的NMS算法,而是用于在目标检测中用于提取分数最高的窗口的。例如在行人检测中,滑动窗口经提取特征,经分类器分类识别后,每个窗口都会得到一个分数。但是滑动窗口会导致很多窗口与其他窗口存在包含或者大部分交叉的情况。这时就需要用到NMS来选取那些邻域里分数最高(是行人的概率最大),并且抑制那些分数低的窗口。
在本SSD例子中,做法是:按照第二部方法每层行数叠加形成一个8732*(4+c)的矩阵:
行数和每一个特征图的卷积核有关;列数前四列是一个框的对角点横纵坐标值;后二十列是对应的二十个类中的每一个类的得分;摘选过程中,我们先选出每一类的最高分,然后在这个值对应的默认框和其他框进行重叠度计算,超过阈值,我们就认为这个类会在图片上出现,我们就继续留用。如此重复,可以选择出图片上有的所有目标的最有价值的框。
3.2、Jaccard相似度:
给定两个集合A,B,Jaccard 系数定义为A与B交集的大小与A与B并集的大小的比值,定义如下:
当集合A,B都为空时,J(A,B)定义为1。
与Jaccard 系数相关的指标叫做Jaccard 距离,用于描述集合之间的不相似度。Jaccard 距离越大,样本相似度越低。公式定义如下:
其中对参差(symmetric difference):
3.3、Softmax函数
首先逻辑斯谛函数也就是经常说的sigmoid函数,它的几何形状也就是一条sigmoid曲线。
那么看名字就知道了,就是如果某一个zj大过其他z,那这个映射的分量就逼近于1,其他就逼近于0,主要应用就是多分类,sigmoid函数只能分两类,而softmax能分多类,softmax是sigmoid的扩展。
而softmax本质就是将一个K 维的任意实数向量压缩(映射)成另一个K维的实数向量,其中向量中的每个元素取值都介于(0,1)之间。
Softmax把一个k维的real value向量(a1,a2,a3,a4….)映射成一个(b1,b2,b3,b4….)其中bi是一个0-1的常数,然后可以根据bi的大小来进行多分类的任务,如取权重最大的一维。
softmax函数形式如下:
SSD例子中:空间位置的损失:
其中:
置信度损失计算:
四、结果分析:
5.1、性能对比:
下面表格显示了,我们的 SSD300 model 的精度已经超过了 Fast R-CNN,当我们用 SSD 在更大的图像尺寸上, 500×500 训练得到的 model,甚至要比 Faster R-CNN 还要高出 1.9% 的 mAP。
5.2、下图的第一行图片展示了列举三个类别物体:
它们的累计的百分数以及对应的错误:我么先定义白色部分是正确检测(Cor);其后,蓝色部分(Loc)为定位错误;而红色部分(Sim)为类别错误;绿色部分(Oth)为其他错误;紫色部分(BG)为背景识别错误;而中间的红色实线表达的是:随着检测数量增加,每一类返回值准确性(0.5重叠率之下)的改变;红色虚线表达的是:随着检测数量增加,每一类返回值准确性(0.1重叠率之下)的改变。
第二行图片展示了这些类对应的最容易出错的选项之间的百分比设置;
5.3、检测例子:
5.3.1、A类目标检测框里面完全包含有物体B:
分析:前置景象会比后面被遮挡的物体置信度更加高,可以判定不会受到背景的影响,只要自身轮廓和颜色倾斜程度不受到严重的干扰。
5.3.2、同类物体多目标重叠:
发现:尽管是包含的关系,同类物体的检测效果仍然是非常高的,两个框的重叠度达到100%的情况甚至会比重叠度只有10%—25%的原因可能是:神经网络检测上对于轮廓完全可辨的情况下的准确度是有所提升的
5.3.3、目标对象失焦:
分析:该图片的人影很明显处于昏暗环境下快速运动造成,导致了镜头进光量不足的失焦,但是在目标检测中我们仍然可以检测出是一个置信度为82%的人,应该是能达到我们日常生活中的理想状态的。
阅读笔记:Single Shot Multibox Detector(SSD)相关推荐
- 目标检测 SSD: Single Shot MultiBox Detector - SSD在MMDetection中的实现
目标检测 SSD: Single Shot MultiBox Detector - SSD在MMDetection中的实现 flyfish 目标检测 SSD: Single Shot MultiBox ...
- SSD: Single Shot MultiBox Detector 之再阅读
SSD: Single Shot MultiBox Detector SSD 一句话就是速度快,效果好! 第一版 8 Dec 2015,第二版是30 Mar 2016 主要改进是内容更加详实,实验更加 ...
- 深度学习之 SSD(Single Shot MultiBox Detector)
目标检测近年来已经取得了很重要的进展,主流的算法主要分为两个类型: (1)two-stage方法,如R-CNN系算法,其主要思路是先通过启发式方法(selective search)或者CNN网络(R ...
- ssd网络结构_封藏的SSD(Single Shot MultiBox Detector)笔记
关注oldpan博客,侃侃而谈人工智能深度酝酿优质原创文! 阅读本文需要xx分钟 ? 前言 本文用于记录学习SSD目标检测的过程,并且总结一些精华知识点. 为什么要学习SSD,是因为SSD和YOLO一 ...
- SSD论文阅读(Wei Liu——【ECCV2016】SSD Single Shot MultiBox Detector)
本文转载自: http://www.cnblogs.com/lillylin/p/6207292.html SSD论文阅读(Wei Liu--[ECCV2016]SSD Single Shot Mul ...
- python ssd目标检测_解读目标检测之SSD:Single Shot MultiBox Detector
注:md文件,Typora书写,md兼容程度github=CSDN>知乎,若有不兼容处麻烦移步其他平台,github文档供下载. 发表在CSDN:https://blog.csdn.net/ha ...
- SSD:Single Shot MultiBox Detector解读
注:md文件,Typora书写,md兼容程度github=CSDN>知乎,若有不兼容处麻烦移步其他平台,github文档供下载. 发表在CSDN:https://blog.csdn.net/ha ...
- SSD(Single shot multibox detector)目标检测模型架构和设计细节分析
先给出论文链接:SSD: Single Shot MultiBox Detector 本文将对SSD中一些难以理解的细节做仔细分析,包括了default box和ground truth的结合,def ...
- 目标检测--SSD: Single Shot MultiBox Detector
SSD: Single Shot MultiBox Detector ECCV2016 https://github.com/weiliu89/caffe/tree/ssd 针对目标检测问题,本文取消 ...
最新文章
- spark- PySparkSQL之PySpark解析Json集合数据
- 综述 | 现在是蛋白质组学数据共享和再分析的黄金时间?
- linux yum yum gem,CentOS 7 gem 安装fluentd
- python压缩包怎么安装-Python学习笔记-打包发布Python模块或程序,安装包
- 给华为S5700交换机配下链路聚合
- CRM one order性能调优指南
- 贷款用途有什么限制?非法用途有什么后果?
- 用css实现星级评分效果
- 对WITH和from(select ...)的一点比较
- 如何鉴别硬盘是否是全新的,及HD Tune的使用方法
- Brocade 光纤交换机配置命令
- 楼梯有n个台阶,一共有多少种上楼的方法?
- 1024程序员节,一份精华合辑送给你
- Linux 中的内存使用率计算方式
- CGB2107-Day03-mybatis
- [开发技巧]·TopN指标计算方法
- 同一台服务器上安装mysql5.5和mysql5.7 不同版本的实例
- 电商平台获取淘宝详情高级版接口、卖家信息、sku、发货地等参数字段调用示例展示
- selenium中拖动鼠标通过滑动验证码(geetest)验证
- Unity3D教程:着色器
热门文章
- 比赛记录——记录一次失败的比赛,九坤量化验证码识别大赛
- mysql截取前几个字符串_mysql中截取指定字符前后的字符串
- Gluster升级遇到的问题
- 我的单车游记:向西,向西,到栖霞去(一)
- android 8.1评测,[中文字幕]WP8.1版HTC One M8与Android版对比评测
- 非均匀三次B样条曲线插值实现及MATLAB代码
- 2020年中国无缝钢管行业发展现状及竞争格局分析,天津钢管产量领先,居国内首位「图」
- 身为一名合格root管理员的基本防范措施 Linux系统安全及应用
- vue+elementUI动态生成表格列
- 俄罗斯最大的盗版资源网站,解封了!