概述
论文地址:(ECCV 2016 oral)
SSD: Single Shot MultiBox Detectorarxiv.org笔者读论文的学习笔记,本人水平有限,如有错误,请指出。
码字不易,如果您觉得写得不错,请点个赞,谢谢。
SSD关键点:
- one-stage,可以end-to-end训练
- 比YOLOv1快且精准度高,比Faster R-CNN精度略低
- 多尺度:多个feature map上生成多个不同的default box
- 和YOLO一样不同类别之间共享回归器,所以易混淆相似的类别
- 对小物体的检测相对于YOLO好一点
一、背景介绍
主流的目标检测算法分为两种,一种是之前介绍的R-CNN系列(论文笔记地址:https://zhuanlan.zhihu.com/p/57470611),主要思路是先使用启发式方法(Selective Search)或CNN网络(RPN)生成region proposal,然后在此proposal上生成特征输入到分类和定位网络中,所以这类方法是two-stage的,特点是精度高、速度略慢、训练较复杂;第二种是one-stage方法,如之前介绍的YOLO(论文笔记地址:https://zhuanlan.zhihu.com/p/58066901)和这篇笔记所要介绍的SSD,它们的思路是均匀地在图片的不同位置进行密集抽样,抽样时可以采用不同的尺度和长宽比,然后利用CNN提取特征后直接进行分类和回归,整个过程只需要一步,所以它们的优势是速度快。但是均匀的密集采样有一个缺点就是正样本和负样本分布极不均衡,这会导致训练困难,导致模型准确度稍低。(可以通过FocalLoss缓解这个问题)
二、网络结构
以VGG-16为backbone,SSD网络结构如图1所示:
图1中网络的输入是300 x 300,称为SSD300;除此之外还有输入为500 x 500的SSD500,它在SSD300的基础上又加了一层conv11_2用于检测。
SSD将VGG-16的全连接层fc6和fc7转换成3 x 3的卷积层Conv6和1 x 1的卷积层Conv7,并将pool5从2 x 2 - s2转换成3 x 3 - s1。第一个用于检测的feature map是Conv4_3,由于位置靠前,为了避免与后面的检测层差异太大,所以在Conv4_3后面使用L2 normalization,即仅对每个像素点在channel维度上进行归一化。
- 在多个尺度的feature map上进行检测
在Conv4_3、Conv6、Conv7、Conv8_2、Conv9_2、Conv10_2、Pool 11的feature map上都会进行检测
- feature map上每个像素都会生成多个default box
如图2所示,在8 x 8和4 x 4的feature map上生成用于检测的default box,它们可以对应不同尺度的检测框,这样可以更好地拟合ground truth。比如图2中狗的ground truth和4 x 4 feature map中default box匹配,但和8 x 8 feature map的任何一个default box都不匹配,所以SSD相对于RPN考虑更周到
- 使用CNN进行检测
和RPN有些类似,对于feature map先使用3 x 3卷积(为了综合利用周围信息),卷积后的结果代表feature map上每个像素代表的default box的信息,如类别概率或位置信息。以图1中的Conv4_3为例,feature map尺寸为38 x 38 x 512,用3 x 3 x 512 x (3 x (Classes + 4))卷积,可以得到38 x 38 x (3 x (Classes + 4)),所以feature map的每个像素都可以得到3 x (Classes + 4)个信息:3代表每个像素有3个不同尺度和长宽比的default box(由于Conv4_3尺寸太大所以只用了3个,后面还会再详细介绍),Classes代表所要预测的类别数(注意这里还包括背景这个类别,YOLO不包括,Faster R-CNN也包括),4代表预测出的bounding box的参数化后的偏移量(这个和RPN一样,但和YOLO不一样,YOLO是直接拟合ground truth)
三、训练细节
- 如何选择default box的尺度和长宽比?
这里和RPN的anchor box选择很类似,针对不同数据集可以采用不同尺度和长宽比的default box。SSD在每个feature map上都可以选择不同的default box,下面假设共有
其中
- default box与ground truth匹配规则
在训练过程中,要将ground truth与default box进行匹配,与之匹配的default box将负责拟合这个ground truth。和MultiBox不一样,SSD每个ground truth可以与多个default box匹配。SSD的匹配规则和RPN类似,分为两步:首先对于每个ground truth,找到一个与其IoU最大的default box匹配,这个default box对应的预测框就作为正样本,其余都作为负样本。但这样做会导致负样本过多,正负样本分布极其不均衡,所以还会采取第二步:对于每个ground truth,将与其IoU大于某一阈值(比如0.5)的default box都进行匹配。从上面讨论可以知道,每个ground truth都会有多个default box与其匹配。
- 损失函数
损失函数分为置信度损失(即分类损失,conf)和定位损失(loc):
- Hard negative mining
在训练阶段,负样本过多,如果让所有负样本都参与训练,会导致正负样本不均衡、训练困难,所以SSD采用了hard negative mining:将负样本根据confidence进行排序,从高到低选取负样本使正负样本比例至少为1:3,只有被选取的样本才能计算损失函数参与训练。作者发现这样做之后模型优化更快且训练更稳定了
- 数据增强
为了获取小目标训练样本,每张训练图片都会随机选择下面三个选项中的一个:
- 使用整张图片
- 采样一个patch,使其与物体的最小IoU为0.1、0.3、0.5、0.7或0.9
- 随机选取一个patch
在得到patch之后再resize到固定尺寸,并以0.5的概率将其水平翻转
四、实验细节
具体实验配置不再详述,下面提几个关键点:
- SSD和YOLO一样,不同类别共享位置,所以易混淆相似的类别
- 对结果有提升的设置:数据增强、使用更多的feature map如Conv4_3、使用更多不同尺度和长宽比的default box、使用空洞卷积
- 由于MS COCO数据集的物体都较小,所以使用SSD500检测小物体效果更好
- inference阶段由于生成的bounding box较多,所以还要使用NMS进行筛选
Reference:
- https://zhuanlan.zhihu.com/p/33544892
最后
以上就是善良树叶为你收集整理的ssd网络结构_SSD论文笔记的全部内容,希望文章能够帮你解决ssd网络结构_SSD论文笔记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复