SSD(single shot multibox detector)
SSD,全称Single Shot MultiBox Detector,是Wei Liu在ECCV 2016上提出的一种目标检测算法,截至目前是主要的检测框架之一,相比Faster RCNN有明显的速度优势,相比YOLO又有明显的mAP优势(不过已经被CVPR 2017的YOLO9000超越)
在VOC2007上,SSD300比Faster R-CNN的mAP高了6.6倍
在VOC2007上,SSD300比YOLP的FPS高了10%倍
1.SSD网络结构
SSD网络最前边使用了VGG16的前5个层,使用Conv4_3做边框回归和分类;然后把VGG16的2个全连接层FC6、FC7改成了卷积层Conv6、Conv7,使用Conv7做边框回归和分类;之后自己添加了Conv8、Conv9、Conv10、Conv11,并选取其中的Conv8_2、Conv9_2、Conv10_2、Conv11_2做边框回归和分类。
通过分析SSD网络的结构,我们知道了SSD网络是在哪个特征图上做边框回归和分类,接着看下怎么在这些特征图上圈一个框出来。
2.Default Boxs
假设网络经过卷积,生成了8*8和4*4的feature map
在8*8和4*4的feature map上分割生成一些网格,这些网格称为feature map cell,如下图所示
使用一个3*3卷积核在图像上滑动,每一个卷积核滑动的位置,生成一系列default box
由于网络前边的feature map尺寸较大(8*8),使用3*3的卷积核可以圈出小物体;网络后边的feature map尺寸较小(4*4),使用3*3的卷积核可以圈出大物体,这样就解决了在YOLO中容易漏掉小物体的问题(如果YOLO划分的网格中有2个小物体的中心都在同一个网格,那么YOLO只能检测出一个物体)
default box的大小用scale和aspect ratios表示,使用如下公式计算:
scale
$s_k = s_{min} + {s_{max}- s_{min} \over m -1}(k - 1) ,k \in [1,m]$
其中$s_{min} = 0.2,s_{max = 0.9}$
aspect ratios
$w_k^a表示的是盒子的宽,h_k^a表示盒子的长$
当aspect ratios为1时,scale为s`
3.特征向量生成
有了default box后就需要生成特征向量进行框回归和分类。
对于边框回归,只需要4维向量即可,分别代表边框缩放尺度(坐标轴两个方向)和平移向量(坐标轴两个方向)。对于分类,SSD网络采取为每个类别进行打分的策略,也就是说对于每个Default Box,SSD网络会计算出相应的每个类别的分数。假设数据集类别数为c,加上背景,那么总的类别数就是c+1类。SSD网络采用了c+1维向量来分别代表该Default Box对于每个类别所得到的分数。这里,假设是VOC数据集,那么每个Default Box将生成一个20 + 1 + 4 = 25维的特征向量。同样,以Conv9输出特征图5x5为例。
在5*5的特征图上使用1*1的卷积核滑动,即每个格子生成6个default box,一共5*5*6 = 150个default box
每个盒子要生成25个特征向量,最后会产生5*5*6*25 = 3750个输出
SSD源码中并不会使用所有的default box,而是在每张feature map中使用部分default box,源码中叫prior box
conv4_3(4),fc7(6),conv6_2(6),conv7_2(6),conv8_2(4),conv9_2(4)括号中的数字是每张feature map使用的prior box数
所以SSD300的prior box总数是38*38*4+19*19*6+10*10*6+5*5*6+3*3*4+1*1*4=8732
4.损失函数
这8732个prior box不会全部计算损失函数,而是通过计算Jaccard overlap计算和Groudtruth box重叠的比例,大于0.5的计算损失,损失的计算公式如下,具体的可以参考reference论文中的公式
5.Reference
- 论文:http://arxiv.org/abs/1512.02325
- https://zhuanlan.zhihu.com/p/24954433
- https://zhuanlan.zhihu.com/p/31427288
- https://www.cnblogs.com/xuanyuyt/p/7447111.html
SSD(single shot multibox detector)的更多相关文章
- SSD(single shot multibox detector)算法及Caffe代码详解[转]
转自:AI之路 这篇博客主要介绍SSD算法,该算法是最近一年比较优秀的object detection算法,主要特点在于采用了特征融合. 论文:SSD single shot multibox det ...
- 五、SSD原理(Single Shot MultiBox Detector)
主流的算法主要分为两个类型: (1)tow-stage R-CNN系列算法,其主要思路是先通过启发式方法(selective search)或者CNN网络(RPN)产生一些列稀疏的候选框,然后对这些候 ...
- 翻译SSD论文(Single Shot MultiBox Detector)
转自http://lib.csdn.net/article/deeplearning/53059 作者:Ai_Smith 本文翻译而来,如有侵权,请联系博主删除.未经博主允许,请勿转载.每晚泡脚,闲来 ...
- 【计算机视觉】目标检测之ECCV2016 - SSD Single Shot MultiBox Detector
本文转载自: http://www.cnblogs.com/lillylin/p/6207292.html SSD论文阅读(Wei Liu--[ECCV2016]SSD Single Shot Mul ...
- 深度学习论文翻译解析(十四):SSD: Single Shot MultiBox Detector
论文标题:SSD: Single Shot MultiBox Detector 论文作者:Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Sz ...
- SSD(Single Shot MultiBox Detector)的安装配置和运行
下文图文介绍转自watersink的博文SSD(Single Shot MultiBox Detector)不得不说的那些事. 该方法出自2016年的一篇ECCV的oral paper,SSD: Si ...
- SSD: Single Shot MultiBox Detector
By Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, Scott Reed, Cheng-Yang Fu, Alexande ...
- 论文笔记 SSD: Single Shot MultiBox Detector
转载自:https://zhuanlan.zhihu.com/p/33544892 前言 目标检测近年来已经取得了很重要的进展,主流的算法主要分为两个类型(参考RefineDet):(1)two-st ...
- [论文理解]SSD:Single Shot MultiBox Detector
SSD:Single Shot MultiBox Detector Intro SSD是一套one-stage算法实现目标检测的框架,速度很快,在当时速度超过了yolo,精度也可以达到two-stag ...
随机推荐
- pymysql安装
安装python3之后 链接数据库需要安装pymysql pymysql 下载地址 https://pypi.python.org/pypi/PyMySQL3/0.5 ,下载之后传到linux虚拟机, ...
- 你不知道的JavaScript--Item16 for 循环和for...in 循环的那点事儿
大家都知道在JavaScript中提供了两种方式迭代对象: for 循环: for..in循环: 1.for循环 不足: 在于每次循环的时候数组的长度都要去获取: 终止条件要明确: 在for循环中,你 ...
- JavaScript设计模式之----组合模式
javascript设计模式之组合模式 介绍 组合模式是一种专门为创建Web上的动态用户界面而量身制定的模式.使用这种模式可以用一条命令在多个对象上激发复杂的或递归的行为.这可以简化粘合性代码,使其更 ...
- 通过MSSQL分析器跟踪研究EM内部行为并解决identify列问题
今天有人问到MSSQL表里的IDENTITY字段,如何让它在复制原来数据到该表时,原来数据的IDENTITY字段不变,而新插入数据时,新插入的数据的IDENTITY依然增长,查了些资料,做了个实验,最 ...
- 多线程动态规划算法求解TSP(Traveling Salesman Problem) 并附C语言实现例程
TSP问题描述: 旅行商问题,即TSP问题(Travelling Salesman Problem)又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须 ...
- 1.1 为什么要使用lambda 表达式
第1章 lambda 表达式 1.1 为什么要使用lambda 表达式 1.2 lambda 表达式的语法 1.3 函数式接口 1.4 方法引用 1.5 构造器引用 1.6 变量作用域 1.7 默认方 ...
- 【状压dp】Bzoj1231 [Usaco2008 Nov]mixup2 混乱的奶牛
Description 混乱的奶牛 [Don Piele, 2007] Farmer John的N(4 <= N <= 16)头奶牛中的每一头都有一个唯一的编号S_i (1 <= S ...
- Java实现大批量数据导入导出(100W以上) -(一)导入
最近业务方有一个需求,需要一次导入超过100万数据到系统数据库.可能大家首先会想,这么大的数据,干嘛通过程序去实现导入,为什么不直接通过SQL导入到数据库. 大数据量报表导出请参考:Java实现大批量 ...
- LeetCode算法题-Number of Lines To Write String(Java实现)
这是悦乐书的第319次更新,第340篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第188题(顺位题号是806).我们要将给定字符串S的字母从左到右写成行.每行最大宽度为 ...
- 『取巧』VS2015试用期过后 继续试用
背景: 个人电脑 安装的 VS2015 Community 社区版. 一直用得挺好,都忘了要登录. 直到近来,30天试用期过 —— VS弹窗:要登录用户名.密码 才能继续使用. 但是,输入了无数次 邮 ...