个人博客:http://www.chenjianqu.com/

原文链接:http://www.chenjianqu.com/show-90.html

文:Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy,Scott Reed, Cheng-Yang Fu, Alexander C. Berg.SSD: Single Shot MultiBox Detector

素质三连

1.论文贡献

提出SSD目标检测模型,是一个single-stage目标检测模型,综合了YOLO、RPN以及语义分割的思想。

运行速度快,可是实现实时检测,精度相较于YOLO大幅提高。

关键点:使用多尺度/多比例的先验包围框,在多个特征图上预测,使用卷积核预测包围框和置信度。

2.实验结果

对SSD300,在VOC 2007 test上达到72.1% mAP和58FPS;对SSD500,达到75.1% mAP,超越了Faster R-CNN。

3.存在的问题

对小目标的检测性能较差。

SSD

SSD(Single Shot MultiBox Detector)和YOLO 的网络架构对比如下:

由上图可知:SSD的输入分辨率为300x300,也称为SSD300,而YOLO 的输入分辨率是448x448;SSD使用VGG16作为backbone,YOLO使用GoogLeNet;SSD使用卷积核预测包围框(bounding box)和类别置信度,而YOLO使用全连接网络;SSD使用多个特征图进行预测,即多尺度,而YOLO使用单尺度特征图。总结SSD的核心要点如下:

  1. 使用多尺度特征图进行目标检测。在backbone后面增加几层卷积层,特征图的分辨率逐层降低。使用这些多个不同分辨率的特征图用于目标检测。低层特征图有学习到的是精细的表层特征,高层特征图学习到的是抽象的特征。换句话说,低层特征图有利于检测小目标,高层特征图有利学检测到大目标。

  2. 使用先验包围框。对于用于检测的特征图的每个像素,设置一组不同长宽比例和大小的先验包围框。对于每个包围框,预测相对于先验包围框的偏移以及该框对每个类别的置信度,这其实就是RPN。

  3. 使用卷积运算进行预测。对于用于检测的特征图,使用卷积运算预测包围框。比如,对于m×n×p的特征图,使用3×3×p的卷积核进行卷积计算,预测每个像素的类别置信度和所有先验包围框的偏移。

具体地说,对于某个位置的k个框,每个框计算c个类别置信度和相对于先验包围框的4个偏移,因此每个位置输出维度是 (c+4)k,这个分辨率为mxn特征图预测结果的维度是(c+4)kmn

SSD整个流程如下图:

匹配策略

训练时,需要确定gt bbox(ground truth包围框)对应的先验包围框。策略1:找到与gt bbox的IOU最大的先验包围框,这样保证每个gt bbox至少对应一个先验框。但是一个图片中gt bbox非常少,而先验框却很多,这样正负样本极其不平衡。策略2:对于其它的先验包围框,若与gt bbox的 IOU 大于某个阈值(一般是0.5),那么该先验框也与这个ground truth进行匹配。

损失函数

设xijp=1表示第i个默认框匹配到类别p的第j个gt框,否则xijp=0。根据匹配策略,一个gt框至少对应一个输出框,即Σi xijp >=1。总损失函数是定位损失(loc)和置信度损失(conf)的加权和,公式如下:

N是匹配的先验框(即被预测为正确的)的数量,l是预测框,g是gt框,α表示定位损失的加权系数,根据交叉验证,α的取值为1。

定位损失Lloc 使用Smooth L1损失,计算公式如下:

d是先验框。

置信度损失Lconf(x,c) 采用的是softmax损失:

先验框尺度和比例的选择

为了利用低层的表层特征和高层的抽象特征,SSD使用多个尺度的特征图用于预测目标。假设想用m个特征图取做预测,那么每个特征图使用的先验框尺度的计算公式如下:

smin=0.2,smax=0.95,sk 表示先验框大小相对于图片的比例。随着特征图的减小,先验框大小逐渐增加。最底层的尺度是0.2,最顶层的尺度的0.95。每个位置的先验框有不同的长宽比例 ar∈{3, 2, 1, 1/2, 1/3}。先验框的宽度是wka=skar1/2,高度是hka=sk ar1/2。对于比例1,额外增加一个尺度为sk’ = (sk sk+1)1/2,对于k=m的特征图,假设sm+1来设置sm+1。因此每个位置可以有6个不同的先验框。某些层仅使用4个先验框,则不使用长宽比3, 1/3。

设置每个先验框的中心是((i+0.5) / |fk|, (j+0.5) / |fk|),其中|fk|是特征图的边长,i, j ∈[0, |fk| ],截断坐标以至于先验框的边界总是在[0,1]。

通过组合来自多个特征图的所有位置的具有不同尺度和比例的所有先验框的预测,可以得到一组覆盖不同的输入对象大小和形状的预测。例如,在 Fig.1 中,狗与4×4特征图的先验框匹配,但不与8×8特征图中的任何先验框匹配,这些不匹配的先验框则是负样本。

难例挖掘

难例挖掘的概念在R-CNN博客里有介绍过,经过gt bbox和先验框的匹配后,被匹配先验框是正例,没有被匹配的先验框是负例,前面说过,正例和负例的数量非常不平衡,这会导致收敛速度变慢。因此这里并不使用所有负例,而是从所有负例中挑选出高置信度的负例,使得正负例达到1:3。

数据增强

后面会分析到,数据增强有利于模型学习到平移不变性,对提高精度非常重要。这里使用随机水平翻转,随机裁剪,随机采集块域等技术。

训练和实验

数据增强

使用VGG16,在ILSVRC CLS-LOC数据集上进行预训练。跟DeepLab-LargeFOV类似,对预训练的模型修改如下:将fc6和fc7转换为1x1卷积层,从fc6和fc7下采样参数;将pool5的size = 2x2, stride = 2变为size = 3x3, stride = 1;使用atrous算法填补”holes”;去除fc8。然后对模型进行微调,使用SGD,初始学习率为0.001,动量系数为0.9,权重衰减为0.0005,batch_size=32。

开源的代码: https://github.com/weiliu89/caffe/tree/ssd

VOC2007实验

作为对比,Fast R-CNN,Faster R-CNN,和SSD均使用预训练的VGG16作为backbone,在VOC2007 trainval和VOC2012 trainval (16551 images) 进行训练,在VOC2007 test (4952 images)进行测试。

下面是SSD300的结构图:

使用conv4_3,conv7 (fc7), conv8_2, conv9_2, conv10_2,和pool11的输出特征图预测包围框和置信度。对于新添加的层,使用xavier初始化参数。因为conv_4的特征图比较大(38x38),故仅放置4个先验框在上面:比例为1的且尺度为1和0.1的先验框,另外两个比例为0.5和2。其它特征图每个像素放置6个先验框。与其他层相比,conv4_3具有不同的特征尺度,因此使用ParseNet中介绍的L2 normalization技术将特征图中每个位置的feature norm缩放到20,并在反向传播期间学习尺度。

首先设置学习率为0.001,迭代40k,然后设置学习率0.0001,然后迭代20k。得到的结果如下:

上表中的SSD500除了输入分辨率之外,其它的与SSD300相同。可以看到SSD500的mAP甚至超越了,Faster R-CNN。使用[Diagnosing error in object detectors]的目标检测分析工具对SSD500的分析如下:

观察发现,相比于R-CNN,SSD有更小的定位误差,表明这种通过回归先验框的定位方法优于回归SS生成区域推荐的方法。但是SSD对相似目标的分类错误率更高,这大概是因为多个类别共享定位缘故。

SSD对包围框的大小很敏感,即它在较小目标上的性能比较大目标要差得多,这是因为小目标提供的信息较少,通过增加输入分辨率可以改善这点,如下图所示:

模型分析

通过控制变量法观察影响SSD性能的因素,结果如下表:

从上表可以发现,数据增强是关键。其次是使用更多的特征图,conv4_3可以捕获到更加精细的特征,对小目标尤其重要。第三是,越多的先验框效果越好。最后是使用atrous版本的VGG16更快、而且更好。

PASCAL VOC2012实验

MS COCO实验

推断

在测试时,对预测的包围框执行NMS。首先使用置信度阈值为0.01,可以过滤掉大部分预测的包围框,然后使用Thrust CUDA库对包围框的置信度进行排序,使用GPU计算两两包围框的IOU,然后应用阈值为0.45的NMS,最终每张图片得到200个包围框。这一步SSD300在VOC上需要花费2.2ms。

各个检测模型的精度和速度对比如下:

参考文献

[0]Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy,Scott Reed, Cheng-Yang Fu, Alexander C. Berg.SSD: Single Shot MultiBox Detector

[1]chenghaoy.SSD论文笔记.https://blog.csdn.net/chenghaoy/article/details/85263060 .2019-01-03

最详细的SSD论文笔记相关推荐

  1. 最详细的YOLOv3论文笔记

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-117.html 论文:YOLOv3: An Increment ...

  2. 最详细的YOLOv2论文笔记

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-116.html 论文:YOLO9000:Better, Fas ...

  3. 最详细的U-net论文笔记

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-84.html 论文:Olaf Ronneberger, Phi ...

  4. 最详细的FPN论文笔记

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-110.html 论文:Tsung-Yi Lin, Piotr ...

  5. 最详细的R-CNN论文笔记

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-69.html RBG大佬的论文<Rich feature ...

  6. 最详细的FCN论文笔记

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-81.html 文:Jonathan Long,Evan She ...

  7. 最详细的YOLO论文笔记

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-77.html 论文:Joseph Redmon, Santos ...

  8. 经验 | 深度学习中从基础综述、论文笔记到工程经验、训练技巧

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:本文授权转自知乎作者跑者小越,https://zhuanla ...

  9. 从基础综述、论文笔记到工程经验、训练技巧:值得一看的目标检测好文推荐...

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文授权转自知乎作者跑者小越,https://zhuanlan.z ...

最新文章

  1. 会了这些命令,还怕搞不定思科设备?
  2. 把图片做成html,HTML5实践-图片设置成灰度图
  3. Python教程:threading中join与setDaemon的用法及区别讲解
  4. 一文读懂 .NET 中的高性能队列 Channel
  5. vue学习中遇到的错误 Duplicate keys detected: ‘[object Object]‘. This may cause an update error.
  6. Vercel反向代理做CDN,免费给网站加速隐藏源站,可绑定域名
  7. matlab优化设计大作业答案,优化设计有哪些方法(2019优化设计答案大全)
  8. Example of Zookeeper and Solr cluster with Docker networking
  9. au人声处理_如何使用AU软件为视频降噪?
  10. bootstrap多模态框
  11. PDF编辑器(PDF Editor)中文版
  12. 2021美亚团队赛复盘
  13. NFT,一种新型社交网络
  14. CodeGenerator代码生成器使用
  15. ue4使用Niagara粒子实现下雨效果,使用蓝图调节雨量
  16. 使用虚拟鼠标驱动解决Surface go以及寨板win10 win11 win8平台 甚至win arm手机 在运行某些GalGame 当不插入鼠标或者连接蓝牙鼠标时候出现的错误
  17. xp计算机workgroup无法访问,无法访问,小编告诉你怎么解决workgroup无法访问
  18. 有5个学生,每个学生的数据包括学号、姓名、三门课的成绩,从键盘输入5个学生数据,要求打印出三门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、三门课的成绩、平均分数)。VS2019版
  19. 而立之年——那些从一线城市退到二三线的程序员,现在过的怎么样了?
  20. WORD 用tab实现居中和右对齐

热门文章

  1. 如何检查python的库是否安装成功_机器学习之Python编程库的安装
  2. php写简单接口_php写接口,对比两种写法
  3. 猜物品游戏java编程_小猿圈Java初学者练习小案例:猜数字游戏
  4. 2.9 while循环
  5. Android 第三方有用的库收集
  6. [HDOJ5327]Olympiad
  7. Swing中的并发-使用SwingWorker线程模式
  8. Oracle学习笔记:oracle服务在linux平台的启动问题
  9. 【西安石油大学主办|IEEE CPS出版】2020智能控制、测量与信号处理国际学术会议诚邀您投稿参会!...
  10. Pywick:追求功能完备的PyTorch高级训练库