版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/jy001227801/article/details/80388192

参考链接:https://blog.csdn.net/a8039974/article/details/77592395

论文题目:SSD: Single Shot MultiBox Detector

论文地址:http://arxiv.org/abs/1512.02325

代码地址:https://github.com/balancap/SSD-Tensorflow

SSD提供了一种多尺度特征图预测分类和回归的思想,精确度和速度都很高。

SSD框架如下:

一、论文解读

1、多尺度特征(最大贡献)

YOLO在卷积层后接全连接层,即检测时只利用了最高层feature maps(包括Faster RCNN也是如此);而SSD采用了特征金字塔结构进行检测,即检测时利用了conv4-3,conv-7(FC7),conv6-2,conv7-2,conv8_2,conv9_2这些大小不同的feature maps,在多个feature maps上同时进行softmax分类和位置回归。也就是说,SSD就是Faster-RCNN和YOLO中做了一次的分类和检测过程放在不同的图像大小上做了多次。

2、先验框个数计算

一共有8732个boxes,和 Faster-RCNN一样,SSD也是特征图上的每一个点对应一组预选框。然后每一层中每一个点对应的prior box的个数,是由PriorBox这一层的配置文件决定的。

3、生成先验框

在SSD中引入了Prior Box,实际上与anchor非常类似,就是一些目标的预选框,后续通过softmax分类+bounding box regression获得真实目标的位置。区别是SSD每个位置的prior box一般是4~6个,少于Faster RCNN默认的9个anchor;同时prior box是设置在不同尺度的feature maps上的,而且大小不同。

SSD按照如下规则生成prior box:

(1)以feature map上每个点的中点为中心,生成一些列同心的prior box,然后中心点的坐标会乘以step,相当于从feature map位置映射回原图位置。

(2)正方形prior box最小边长为,最大边长为:

(3)每在prototxt设置一个aspect ratio,会生成2个长方形,长: 宽:

(4)而每个feature map对应prior box的min_size和max_size由以下公式决定,m是使用feature map的数量(SSD 300中m=6):

第一层feature map对应的min_size=S1,max_size=S2;第二层min_size=S2,max_size=S3;其他类推。在原文中,Smin=0.2,Smax=0.9,但是在SSD 300中prior box设置并不能和paper中上述公式对应:

4、step参数选择

中心点的坐标会乘以step,相当于从feature map位置映射回原图位置。Cal_scale = 300/out_size,实际就是 原图与特征图 大小的比值,比如conv4-3 width = 38 ,输入的大小为300,那么scale=7.8,所以这里设置的step=8。

5、先验框的使用

以conv4_3为例,在conv4_3 feature map网络pipeline分为了3条线路:

(1)分类:经过一次batch norm+一次卷积后,生成了[1, num_class*num_priorbox, layer_height, layer_width]大小的feature用于softmax分类目标和非目标(其中num_class是目标类别,SSD 300中num_class = 21)

(2)框回归:经过一次batch norm+一次卷积后,生成了[1, 4*num_priorbox, layer_height, layer_width]大小的feature用于bounding box regression(即每个点一组[dxmin,dymin,dxmax,dymax])

(3)先验框:生成了[1, 2, 4*num_priorbox]大小的prior box blob,其中2个channel分别存储prior box的4个点坐标和对应的4个variance(bounding regression中的权重)

6、SSD优缺点

优点:运行速度可以和YOLO媲美,检测精度可以和Faster RCNN媲美

缺点:

(1)需要人工设置prior box的min_size,max_size和aspect_ratio值。网络中prior box的基础大小和形状不能直接通过学习获得,而是需要手工设置。而网络中每一层feature使用的prior box大小和形状恰好都不一样,导致调试过程非常依赖经验。

(2)虽然采用了pyramdial feature hierarchy的思路,但是对小目标的recall依然一般,并没有达到碾压Faster RCNN的级别。作者认为,这是由于SSD使用conv4_3低级feature去检测小目标,而低级特征卷积层数少,存在特征提取不充分的问题。

7、损失函数

(1)整体损失函数是定位损失和置信损失(类条件概率:类别概率*置信度)的加权和:

其中n是匹配的默认框数,如果n=0,将损失设置为0。α参数用于调整confidence loss和location loss之间的比例,默认α=1。

(2)其中confidence loss是典型的softmax loss:

其中,表示第i个默认框和第j个p类真值框匹配。

(3)其中location loss是典型的smooth L1 loss:

8、匹配策略

在训练时,groundtruth boxes 与 default boxes(就是prior boxes) 按照如下方式进行配对:

(1)首先,寻找与每一个ground truth box有最大的jaccard overlap的default box,这样就能保证每一个groundtruth box与唯一的一个default box对应起来(所谓的jaccard overlap就是IoU)。

(2)SSD之后又将剩余还没有配对的default box与任意一个groundtruth box尝试配对,只要两者之间的jaccard overlap大于阈值,就认为match(SSD 300 阈值为0.5)。

(3)配对到GT的default box就是positive,没有配对到GT的default box就是negative。

9、硬负样本挖掘

一般情况下negative default boxes数量 >> positive default boxes数量,直接训练会导致网络过于重视负样本,从而loss不稳定。所以SSD在训练时会依据confidience score排序default box,挑选其中confidience高的box进行训练,控制positive:negative=1:3

10、数据增强

随机的进行如下几种选择:

(1)使用原始的图像

(2)采样一个 patch,与物体之间最小的 jaccard overlap 为:0.1,0.3,0.5,0.7 或 0.9

(3)随机的采样一个 patch,采样的 patch 是原始图像大小比例是[0.1,1],aspect ratio在1/2与2之间。

11、思考:SSD多尺度得到的预测结果如何综合考虑?

每个尺度结果互不影响,得到的预测结果个数是各层的总和,然后进行NMS,得到最终预测结果。也就是说,SSD就是(把Faster-RCNN和YOLO中做了一次的)分类和检测过程放在不同的图像大小上做了多次。

二、代码解读

1、SSDNet网络结构

在vgg16的基础上(前5个block),新增一些卷积层,分别提取block4,block7,block8,block9,block10,block11层的不同大小特征图,在多个feature maps上同时进行softmax分类和位置回归。

block1~5代码如下:

block6~11代码如下:

对这些层:block4,block7,block8,block9,block10,block11都做softmax分类和位置回归。

其中ssd_multibox_layer函数如下:

2、SSD loss

硬负样本挖掘、分类用交叉熵损失函数、框位置回归用smooth L1

目标检测算法SSD论文解读相关推荐

  1. 目标检测算法SSD结构详解

    ❝ 上期我们一起学习了Faster RCNN的损失函数以及如何进行模型训练的相关知识,如下: Faster RCNN的损失函数以及模型训练流程 ❞ 本文主要学习: One-Stage / Two-St ...

  2. CVPR2020论文分方向整理之检测篇_3D目标检测(代码/论文解读/136篇打包下载)

    CVPR2020论文分方向整理之检测篇(代码/论文解读/136篇打包下载) 本周三,CVPR官方正式开放下载,极市第一时间将所有论文(共1467篇)进行了下载打包,详情见此处.为了方便大家进一步的学习 ...

  3. 【个人整理】一文看尽目标检测算法SSD的核心架构与设计思想

    前言:SSD(Single Shot MultiBox Detector)是大神Wei Liu在 ECCV 2016上发表的一种的目标检测算法.对于输入图像大小300x300的版本在VOC2007数据 ...

  4. 目标检测算法——SSD详解

    目录 一. 背景(基本介绍) 二. 网络结构 三. 具体过程 1. default box 匹配 2. 损失函数 3. 数据增广 4. Atrous Algothrim 5.  NMS(非极大值抑制) ...

  5. 【AAAI 2020】NAS+目标检测:SM-NAS 论文解读

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 最近冒出来很多 Neural Network Search (NAS) + 目标检 ...

  6. 三维目标检测新SOTA---ADFDetV2论文解读

    问题 本文提出了一种单阶段的三维目标检测算法,并在文中分析了二阶段三维目标检测算法的不必要性.其所提算法在waymo实时目标检测竞赛中取得了第一的成绩.其性能超过了所有单阶段和多阶段的目标检测算法. ...

  7. cnn 句向量_深度学习目标检测Fast R-CNN论文解读

    前言 我们知道,R-CNN存在着以下几个问题: 分步骤进行,过程繁琐.Selective Search生成候选区域region proposal->fine tune预训练网络->针对每个 ...

  8. 深度学习目标检测算法综述(论文和代码)

    RCNN-→SPP Net-→ Fast RCNN-→ Faster RCNN-→ YOLO-→ SSD 思路是:a,生成候选框 b,CNN提取特征 c,分类网络 d,回归,位置精修(refine) ...

  9. 目标检测:CenterNet论文解读及代码详解

    论文思想 当前anchor-based目标检测方法可分one-stage.two-stage两种.one-stage模型利用anchor机制得到大量的框,之后直接加入回归.分类分支对框进行分类与微调. ...

最新文章

  1. 批处理(.bat)无限循环,定时,固定时间间隔
  2. ubuntu最基本的软件
  3. J2EE中修改了jsp页面或者html页面重新启动tomcat无效问题
  4. mysql中出现没有权限访问或者查看全部数据库的问题---用客户端第一次打开的时候...
  5. 企业级应用架构(一) 三层架构之解耦
  6. Struts2环境搭建
  7. WEB前端常用JavaScript代码整理(二)
  8. Android 开源框架Universal-Image-Loader完全解析(二)--- 图片缓存策略详解
  9. 使用envi将遥感数据从uint16转为uint8
  10. Linux下使用源码包安装禅道
  11. NWT失败反省:明明是自己把公司搞死,却说别人水平不行
  12. 【使用Mac制作手写签名的方法】
  13. Android+SpringBoot+Vue实现安装包前台上传,后台管理,移动端检测自动更新
  14. 木秀于林,风必摧之;行高于人,众必毁之?
  15. 企业能源管控平台在轧钢行业能源管理中的应用
  16. volatile作用
  17. 《都挺好》:编剧你是不是对硅谷渣男有什么误解?
  18. hive指标计算:同比
  19. HR干货,怎样做好企业员工的晋升
  20. js如何遍历map类型

热门文章

  1. 计算机网络学习笔记四、http和https
  2. 计算机科学与技术考研北京工业大学分,22考研——北京工业大学电子信息专业考研考情分析...
  3. java中获取文本域内容_怎样读文件内容到文本域中(java SWT)
  4. vapor mysql_基于Swift的Web框架Vapor2.0之MySQL模板
  5. HTML5+CSS3小实例:滚动的方块loading动画
  6. SOA (面向服务的体系结构)
  7. 华为plk al10 android6.0 刷机,华为荣耀7(PLK-AL10 全网通)一键刷机教程图解,怎么刷机简单...
  8. 校园随e行远程计算机关闭,校园随e行
  9. 淘宝搬家助手(移动版)使用教程
  10. 中本聪会计算机编程,中本聪要暴露了?仅需简短片段 AI就能“指认”编代码的程序员...