SSD的英文全名是Single Shot MultiBox Detector,Single shot说明SSD算法属于one-stage方法,MultiBox说明SSD算法基于多框预测。

SSD是一种非常优秀的one-stage目标检测方法,one-stage算法就是目标检测和分类是同时完成的,其主要思路是利用CNN提取特征后,提取不同大小的特征层,均匀地在图片的不同位置进行密集抽样,抽样时可以采用不同尺度和长宽比,物体分类与预测框的回归同时进行,整个过程只需要一步,所以其优势是速度快。

原作者给了两种SSD结构,SSD 300和SSD 512,用于不同输入尺寸的图像识别。本文中以SSD 300为例

有什么优点?有什么缺点呢?
优点:
SSD在Yolo的基础上进行改进:多尺度特征图,利用卷积进行检测,设置先验框。这使得SSD在准确度上比Yolo更好,而且对于小目标检测效果也相对好一点。
速度快,one-stage算法,在不逊于Faster R-CNN的情况下,提升了速度

缺点:
但是均匀的密集采样的一个重要缺点是训练比较困难,这主要是因为正样本与负样本(背景)极其不均衡(参见Focal Loss),导致模型准确度稍低。
SSD是一种基于全卷积的网络的检测器,用不同层检测不同大小的物体。这中间有个矛盾,前面的featmap大,但semantic不够,后面的sematic够了,但经过太多的pooling,featmap太小了。要检测小物体,既需要一张足够大的featmap来提供更加精细的特征和做更加密集的采样,同时也需要足够的semantic meaning来与背景区分开。

1、主干网络介绍

1.1 VGG网络

VGG中根据卷积核大小和卷积层数目的不同,可分为A,A−LRN,B,C,D,EA,A-LRN,B,C,D,EA,A−LRN,B,C,D,E共6个配置(ConvNet Configuration),其中以D,ED,ED,E两种配置较为常用,分别称为VGG16和VGG19。

下图给出了VGG的六种结构配置:


上图中,每一列对应一种结构配置。例如,图中绿色部分即指明了VGG16所采用的结构。
我们针对VGG16进行具体分析发现,VGG16共包含:

13个卷积层(Convolutional Layer),分别用conv3-XXX表示
3个全连接层(Fully connected Layer),分别用FC-XXXX表示
5个池化层(Pool layer),分别用maxpool表示

1.2 SSD网络

SSD相比普通的VGG16网络有一定的修改,主要修改的地方就是:

①将VGG16的FC6和FC7层转化为卷积层

采用VGG16做基础模型,首先VGG16是在ILSVRC CLS-LOC数据集预训练。然后借鉴了 DeepLab-LargeFOV,分别将VGG16的全连接层fc6和fc7转换成 3x3卷积层 conv6和 1x1 卷积层conv7,同时将池化层pool5由原来的stride=2的 2x2变成stride=1的 3x3 (猜想是不想reduce特征图大小),为了配合这种变化,采用了一种Atrous Algorithm,其实就是conv6采用扩展卷积或带孔卷积(Dilation Conv),其在不增加参数与模型复杂度的条件下指数级扩大卷积的视野,其使用扩张率(dilation rate)参数,来表示扩张的大小,如下图所示,(a)是普通的 3x3 卷积,其视野就是 3x3 ,(b)是扩张率为2,此时视野变成 7x7 ,©扩张率为4时,视野扩大为 15x15,但是视野的特征更稀疏了。Conv6采用 3x3大小但dilation rate=6的扩展卷积。

②去掉所有的Dropout层和FC8层

然后移除dropout层和fc8层,并新增一系列卷积层,在检测数据集上做finetune 。

③新增了Conv6(conv6_1、conv6_2)、Conv7(conv7_1、conv7_2)、Conv8(conv8_1、conv8_2)、Conv9(conv9_1、conv9_2)

a、输入一张图片后,被resize到300x300的shape
b、conv1,经过两次[3,3]卷积网络,输出的特征层为64,输出为(300,300,64),再2X2最大池化,输出net为(150,150,64)。
c、conv2,经过两次[3,3]卷积网络,输出的特征层为128,输出net为(150,150,128),再2X2最大池化,输出net为(75,75,128)。
d、conv3,经过三次[3,3]卷积网络,输出的特征层为256,输出net为(75,75,256),再2X2最大池化,输出net为(38,38,256)。
e、conv4,经过三次[3,3]卷积网络,输出的特征层为512,输出net为(38,38,512),再2X2最大池化,输出net为(19,19,512)。
f、conv5,经过三次[3,3]卷积网络,输出的特征层为512,输出net为(19,19,512),再3X3最大池化,输出net为(19,19,512)。
g、利用卷积代替全连接层,进行了一次[3,3]卷积网络和一次[1,1]卷积网络,输出的特征层为1024,因此输出的net为(19,19,1024)。(从这里往前都是VGG的结构)
h、conv6,经过一次[1,1]卷积网络,调整通道数,一次步长为2的[3,3]卷积网络,输出的特征层为512,因此输出的net为(10,10,512)。
i、conv7,经过一次[1,1]卷积网络,调整通道数,一次步长为2的[3,3]卷积网络,输出的特征层为256,因此输出的net为(5,5,256)。
j、conv8,经过一次[1,1]卷积网络,调整通道数,一次padding为valid的[3,3]卷积网络,输出的特征层为256,因此输出的net为(3,3,256)。
k、conv9,经过一次[1,1]卷积网络,调整通道数,一次padding为valid的[3,3]卷积网络,输出的特征层为256,因此输出的net为(1,1,256)。

在这个图中显示的是SSD和YOLO的对比区别,本图中的conv8,conv9,conv10,conv11相当于上图的Conv6、Conv7、Conv8、Conv9。

其中VGG16中的Conv4_3层将作为用于检测的第一个特征图。conv4_3层特征图大小是 38x38,但是该层比较靠前,其norm较大卷积层度较浅,所以在其后面增加了一个L2 Normalization层(参见 ParseNet,以保证和后面的检测层差异不是很大,这个和Batch Normalization(一篇文章搞懂Batch Normalization批标准化)层不太一样,其仅仅是对每个像素点在channel维度做归一化,而Batch Normalization层是在[batch_size, width, height]三个维度上做归一化。归一化后一般设置一个可训练的放缩变量gamma。

参考:

目标检测:SSD(ECCV 2016)
【深度学习】深入理解Batch Normalization批标准化
目标检测|SSD原理与实现

SSD(ECCV 2016)相关推荐

  1. 论文笔记:3D-CVF(ECCV 2020)

    论文笔记:3D-CVF: Generating Joint Camera and LiDAR Features Using Cross-View Spatial Feature Fusion for ...

  2. 给SSD(固态硬盘)编程

    给SSD(固态硬盘)编程(1):简介和目录 本文由 伯乐在线 - 熊铎 翻译.未经许可,禁止转载! 英文出处: Emmanuel Goossaert (CodeCapsule.com) .欢迎加入 翻 ...

  3. 转 给SSD(固态硬盘)编程

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 给SSD ...

  4. [转]给SSD(固态硬盘)编程

    给SSD(固态硬盘)编程(1):简介和目录 本文由 伯乐在线 - 熊铎 翻译.未经许可,禁止转载! 英文出处: Emmanuel Goossaert (CodeCapsule.com) .欢迎加入 翻 ...

  5. office全套教程(2003~2016)

                                                                                    教程简介 office全套教程包含了PP ...

  6. SSD(固态硬盘)和HHD(混合硬盘)的区别

    SSD(固态硬盘)和HHD(混合硬盘)的区别 固态硬盘(Solid State Drive,SSD): 优点 缺点 混合硬盘(hybrid hard drive,HHD): 优点 缺点 SSD和HDD ...

  7. VSO:Visual Semantic Odometry(ECCV 2018)

    VSO:Visual Semantic Odometry(ECCV 2018) 推荐另外三篇视觉语义里程计论文: . <Probabilistic Data Association for Se ...

  8. 小老板,我学的计算机组成原理告诉我半导体存储器都是断电后丢失的,为什么U盘SSD(固态硬盘)没事呢?

    什么是闪存: 快闪存储器(英语:flash memory),是一种电子式可清除程序化只读存储器的形式,允许在操作中被多次擦或写的存储器 存储原理 要讲解闪存的存储原理,还是要从EPROM和EEPROM ...

  9. 【论文简述及翻译】MVSNet:Depth Inference for Unstructured Multi-view Stereo(ECCV 2018)

     一.论文简述 1. 第一作者:Yao Yao 2. 发表年份:2018 Oral 3. 发表期刊:ECCV 4. 关键词:MVS.端到端网络.代价体.深度图.可微分单应变换 5. 探索动机:传统方法 ...

最新文章

  1. 理解class.forName()
  2. 2014江苏省职称计算机,2014年江苏省职称计算机office多选题.doc
  3. Lisp语言: 在Windows下搭建CLisp环境
  4. java中上传附件怎么该名称_将附件保存到Outlook中的文件夹并重命名
  5. 前端学习(1647):前端系列实战课程之选项卡实现js思路
  6. 阿里云负载不支持 WebSocket 协议与 WSS 和 Nginx 配置问题
  7. 网络知识和交换机的基本配置知识培训
  8. spring freemarker 获取后端的值
  9. 箴言录2014年4月19日
  10. node服务器返回文件,Node.js 服务器对应的路由返回对应的 HTML 文件
  11. rust代练吧_代练也配名正言顺?电竞协会被狂喷,只因颁发游戏代练师证书!...
  12. 用md5值识别相似图片 python
  13. Python破解WIFI密码详细介绍
  14. 宁芝普拉姆键盘说明书及帮助文档支持宏定义
  15. 美国LangeEylandt长岛
  16. 前端开发中PC端和移动端网站的区别
  17. 你的大四,推荐做的几件事 [英语专业女生的自白]
  18. 2015.2,对任意正整数n,求xn,要求运算时间复杂度为o(logn).例如x30=x15*x15.
  19. R语言使用glmnet包拟合lasso-cox回归模型(包含生存时间和结果标签)、使用lasso-cox模型进行特征筛选、使用sapply函数对特征数据进行标准化z-score
  20. 第五章 习惯三 要事第一——自我管理原则

热门文章

  1. java设计模式--设配器adapter
  2. 阿里云ECS服务器安装AMH5.3面板并搭建WordPress站点详细教程(卞懂的学习笔记)...
  3. 2021最新分享阿里P6面经及心得
  4. android app 按键精灵,安卓按键精灵的,关闭app程序问题!
  5. 走进小作坊(十三)----并购之战
  6. RTKlib相对定位源码解析: udstate函数
  7. Opencv remap函数
  8. C语言程序——首字母变大写
  9. 酷客多小程序重磅升级,这十几个模板足以打动你的心!
  10. 不会汇报工作,还敢拼职场