SSD: Single Shot MultiBox Detector思想精要&技术细节
来源:互联网 发布:linux怎么退出top命令 编辑:程序博客网 时间:2024/06/08 16:47
一、理解SSD:
这大半个月来一直在捣弄SSD。一篇文章在handle一个task的时候,总是有其隐藏在其背后,独特的处理问题的思想,为了避免过目就忘,决定把SSD的思想提炼总结一下,原则就是简而精:
往大了看,SSD其实就是由两个subtask构成的。这两个subtask绝大多数时候是相互独立的,各做各的事,自己优化自己,不存在交叉优化或者joint training,可以说是并不相关的。只有在最后test/inference的时候,会利用其中一个subtask的prediction作为依据去另一个subtask的prediction中进行检索。
这两个subtask,
一个的目的就是在image中找出所有可能包含物体的bboxes,具体实现就是通过在prior boxes的基础上预测offset来找到最合适的bboxes,这个时候的bboxes是没有类别信息的,也就是“天下一家亲”,“不分你我”,只要你这个bbox里面是一个物体(当然要是已指定的C类中的),那我就在你match到的prior bboxes上去学offset,具体怎么match ground truth bboxes和prior bboxes,就是通过计算jaccard overlap,大于0.5就match到一起。
其实换一种思维,这个subtask相当于做了一个salient object detection。但是也有不同,不同在于一般意义上的salient object detection没那么“挑剔”,图片中只要是一个salient object,都会去找一个bbox把它框出来,但是SSD中的这个subtask却“挑剔”一些,因为我们有ground truth bboxes在手上,所以会强制神经网络去学那些要检测的若干类别的bboxes offset。所以,我想另外给这个“挑剔”的salient object detection起一个名字,叫做——class specific salient object detection。
另一个的目的也很简单。回到刚才那个subtask来说,通过class specific salient object detection,已经找到了很多bboxes。但是,我们由于这些bboxes都是没有类别信息的,只知道它们是我们想找的那些类中的。然后,我们要怎么把这些bboxes和它的类别对应上呢?这就是第二个subtask做的事。具体来说,它用3x3的卷积,让上一层的每一个feature map cell(其实就是上一层feature map的一个pixel,这么说其实还不严谨,因为卷积是所有channel都要一次性“卷”的,所以应该说feature map cell就是上一个layer的所有feature map的对应localization的pixel组成的集合)都学习到一个长度为
下面这个截取的原论文的文字,
================================================================
二、应用SSD时需要注意的细节问题:
SSD是一个设计得很精妙的detector,具体在应用时有一些需要格外注意的细节和参数设置,其中也渗透着SSD的思想。
- 首先第一个,选择怎样的base network,VGG还是Inception,或者ResNet,最初的SSD是用的VGG,现在已经有了ResNet的版本,具体我还没有去看。
- 第二个,想要在base network的基础上增加addtional layers,并且从哪些layer中引出side output来做detection,也就是上面提到的两个task(class specific salient object detection+indices learning)
- 决定上面一步中,每一个被引出layer的prior box的scale(以原图大小scale为1做参考)和aspect ratio,还有!step的参数!(step参数指的是feature map上每一个pixel的间隔对应到原图上是step个pixel,step参数的选择应该要参考当前feature map的size来决定)
Hard Negative Mining和Data augmentation,前者是着重训练那些容易犯错的false ture,后者见仁见智,但是绝对不容忽视。要知道,改进后的data augmentation可以让SSD在VOC07上提升多达3个点(见第9点)。
Atrous is faster,但是这一点我还没有理解。
The effects of using multiple outputs layers
这也是一个值得注意的地方,作者做了多组实验来观察使用multiple layers对最终mAP的影响。下表右边的mAP有两列,分别代表使用/不使用 boundary boxes。从实验结果来看,使用boundary boxes的时候,大体上层数越多,mAP越好,但是正所谓“物极必反”,当使用很后面的layer的时候,比如conv11_2,由于layer size已经很小了(比较coarse),所以加入conv11_2反而会起相反的效果。实验结果,完虐。另外,作者有提到SSD512在SSD300的基础上新增了一个conv12_2做prediction,并且把s_min从0.2减到0.1
还有一个不大不小的地方就是,无论在VOC07,12,COCO还是ILSVRC上,SSD的训练都采用了Caffe中的
'lr_policy':"multistep"
,而且都是从10−3 作为起始的base_lr,这让人感觉训练策略其实影响也没有太大。image expansion data augmentation trick,这个也值得学习。作者发下SSD擅长检测large objects,而Faseter-RCNN则擅长检测small objects detection。为了改善SSD在小物体上的性能,特地设计了这个data augmentation的trick。使用之后,相比使用前有近3个点的提升,见下表:
================================================================
More words on SSD:
The impact of Base Network on SSD:
来自一个论坛的帖子,SSD的作者,Liu Wei坦言自己发现在SSD框架下,使用更强的base network,并没有观察到明显的性能提升:
Jonathan Huang带领的谷歌detection团队在CVPR2017的文章中也反映了这一点,从下图可以看出,只有Faster RCNN能够持续地从更好的base network中获得提升,其次是R-FCN系列。也难怪Faster-RCNN成为了实际中更加受欢迎的框架。
- SSD: Single Shot MultiBox Detector思想精要&技术细节
- SSD: Single Shot MultiBox Detector
- SSD: Single Shot MultiBox Detector
- SSD: Single Shot MultiBox Detector
- SSD: Single Shot MultiBox Detector
- SSD: Single Shot MultiBox Detector
- SSD: Single Shot MultiBox Detector
- SSD: Single Shot MultiBox Detector
- SSD: Single Shot MultiBox Detector
- SSD: Single Shot MultiBox Detector
- SSD: Single Shot MultiBox Detector
- SSD: Single Shot MultiBox Detector
- SSD: Single Shot Multibox Detector
- SSD Single Shot MultiBox Detector
- SSD: Single Shot MultiBox Detector
- SSD: Single Shot MultiBox Detector
- READING NOTE: SSD: Single Shot MultiBox Detector
- 论文笔记 | SSD: Single Shot MultiBox Detector
- sshfs文件系统安装与实践
- winform屏蔽键盘按键
- Java基础——银行例题
- 一个有用的log4j.properties文件模板
- Python入门之windows下部署Python
- SSD: Single Shot MultiBox Detector思想精要&技术细节
- C# log4net使用
- opencv中facedetect例子浅析
- MySQL的配置及一些基础操作
- Oracle数据库 常用语法1031
- 探究Fragment oncreateview 和 onActivityCreated 方法
- elasticsearch-5.6.3 安装
- Redis
- 不会接口测试时,该如何使用eoLinker进行接口测试