SSD
背景介绍
基于“Proposal + Classification”
的Object Detection
的方法,R-CNN
系列(R-CNN
、SPPnet
、Fast R-CNN
以及Faster R-CNN
),取得了非常好的结果,但是在速度方面离实时效果还比较远,在提高mAP
的同时兼顾速度,逐渐成为 Object Detection
未来的趋势。YOLO
虽然能够达到实时的效果,但是其mAP
与刚才提到的state of art
的结果有很大的差距。YOLO
有一些缺陷:每个网格只预测一个物体,容易造成漏检;对于物体的尺度相对比较敏感,对于尺度变化较大的物体泛化能力较差。针对YOLO
中的这些不足,该论文提出的方法 SSD
在这两方面都有所改进,同时兼顾了mAP
和实时性的要求。在满足实时性的条件下,接近 state of art
的结果。对于输入图像大小为300*300
在VOC2007 test
上能够达到 58 帧每秒( Titan X
的 GPU
),72.1% 的 mAP
。输入图像大小为500 *500
, mAP
能够达到 75.1%。作者的思路就是Faster R-CNN+YOLO
,利用YOLO
的思路和Faster R-CNN
的anchor box
的思想。
关键点
关键点1:网络结构
该论文采用VGG16
的基础网络结构,使用前面的前 5 层,然后利用astrous
算法将 fc6
和fc7
层转化成两个卷积层。再格外增加了 3 个卷积层,和一个 average pool
层。不同层次的feature map
分别用于 default box
的偏移以及不同类别得分的预测(惯用思路:使用通用的结构(如前 5个conv
等)作为基础网络,然后在这个基础上增加其他的层),最后通过nms
得到最终的检测结果。
这些增加的卷积层的 feature map
的大小变化比较大,允许能够检测出不同尺度下的物体: 在低层的feature map
,感受野比较小,高层的感受野比较大,在不同的feature map
进行卷积,可以达到多尺度的目的。观察YOLO
,后面存在两个全连接层,全连接层以后,每一个输出都会观察到整幅图像,并不是很合理。但是SSD
去掉了全连接层,每一个输出只会感受到目标周围的信息,包括上下文。这样来做就增加了合理性。并且不同的feature map
,预测不同宽高比的图像,这样比YOLO
增加了预测更多的比例的box
。(下图横向的流程)
关键点2:多尺度feature map得到 default boxs及其 4个位置偏移和21个类别置信度
对于不同尺度feature map
( 上图中38x38x512
,19x19x512
, 10x10x512
, 5x5x512
, 3x3x512
, 1x1x256
) 的上的所有特征点: 以5x5x256为例 ,它的#defalut_boxes = 6
按照不同的 scale
和ratio
生成k
个 default boxes
,这种结构有点类似于Faster R-CNN
中的 Anchor
。(此处k=6
所以:5*5*6 = 150 boxes
)
新增加的每个卷积层的feature map
都会通过一些小的卷积核操作,得到每一个default boxes
关于物体类别的21个置信度 20个类别和1个背景) 和4偏移 (shape offsets
) 。
(1) 假设feature map
通道数为p
,卷积核大小统一为3*3*p
(此处p=256)。个人猜想作者为了使得卷积后的feature map
与输入尺度保持一致必然有 padding = 1
, stride = 1
:
(2) 假如feature map
的size
为 m*n
, 通道数为p
,使用的卷积核大小为3*3*p
。每个 feature map
上的每个特征点对应 k
个 default boxes
,物体的类别数为c
,那么一个feature map
就需要使用k*(c+4)
个这样的卷积滤波器,最后有(m*n)*k*(c+4)
个输出。
训练策略
监督学习的训练关键是人工标注的label
。对于包含default box
(在Faster R-CNN
中叫做anchor
)的网络模型(如:YOLO
, Faster R-CNN
, MultiBox
)关键点就是如何把标注信息(ground true box,ground true category
) 映射到(default box
上)。
-
正负样本: 给定输入图像以及每个物体的
ground truth
,首先找到每个ground true box
对应的default box
中IOU
最大的作为(与该ground true box
相关的匹配)正样本。然后,在剩下的default box
中找到那些与任意一个ground truth box
的IOU
大于 0.5的default box
作为(与该ground true box
相关的匹配)正样本。 一个ground truth
可能对应多个正样本default box
而不再像MultiBox
那样只取一个IOU
最大的default box
。其他的作为负样本(每个default box
要么是正样本box
要么是负样本box
)。下图的例子是:给定输入图像及ground truth
,分别在两种不同尺度(feature map
的大小为8*8
,4*4
)下的匹配情况。有两个default box
与猫匹配(8*8
),一个default box
与狗匹配(4*4
)。
目标函数,和常见的Object Detection
的方法目标函数相同,分为两部分:计算相应的 default box
与目标类别的 score
(置信度)以及相应的回归结果(位置回归)。置信度是采用 Softmax Loss
(Faster R-CNN
是log loss
),位置回归则是采用Smooth L1 loss
(与Faster R-CNN
一样采用offset_PTDF
靠近 offset_GTDF
的策略:见下图)。
其中:N代表正样本的数目
该论文是在 ImageNet
分类和定位问题上的已经训练好的 VGG16
模型中 fine-tuning
得到,使用 SGD
,初始学习率为 , 冲量为 0.9,权重衰减为 0.0005,batchsize
为 32。不同数据集的学习率改变策略不同。新增加的卷积网络采用xavier
的方式进行初始化
- 在预测阶段,直接预测每个
default box
的偏移以及对于每个类别相应的得分。最后通过nms
的方式得到最后检测结果。
Default Box 的生成
该论文中利用不同层的 feature map
来模仿学习不同尺度下物体的检测。
-
scale
: 假定使用 m 个不同层的feature map
来做预测,最底层的feature map
的scale
值为,最高层的为,其他层通过下面公式计算得到
-
ratio
: 使用不同的ratio
值 ,计算default box
的宽度和高度:,。另外对于ratio
= 1 的情况,额外再指定scale
为 也就是总共有 6 中不同的default box
。 -
default box
中心:每个default box
的中心位置设置成 ,其中表示第k个特征图的大小, 。
Hard Negative Mining
用于预测的feature map
上的每个点都对应有 6 个不同的default box
,绝大部分的 default box
都是负样本,导致了正负样本不平衡。在训练过程中,采用了 Hard Negative Mining
的策略(根据confidence loss
对所有的box
进行排序,使正负例的比例保持在1:3) 来平衡正负样本的比率,这样做能提高4%左右。
Data augmentation
为了模型更加鲁棒,需要使用不同尺寸的输入和形状,作者对数据进行了如下方式的随机采样:
- 使用整张图片
- 使用
IOU
和目标物体为0.1, 0.3, 0.5, 0.7, 0.9的patch
(这些patch
在原图的大小的[0.1, 1]
之间, 相应的宽高比在[1/2, 2]
之间) - 随机采取一个
patch
当ground truth box
的 中心(center
)在采样的patch
中时,我们保留重叠部分。在这些采样步骤之后,每一个采样的patch
被 resize 到固定的大小,并且以 0.5 的概率随机的水平翻转(horizontally flipped
)。用数据增益通过实验证明,能够将数据mAP
增加8.8%。