paper:https://arxiv.org/abs/1512.02325
code:https://github.com/weiliu89/caffe/tree/ssd
一句话概述:SSD是One-stage的物体检测器,它是直接预测每个default box(在RCNN中称为anchor)是各物体类别的概率,并做回归。另外,SSD使用不同层的feature map来handle不同大小的物体。
base network:和图像分类的标准结构一样(文中使用VGG-16),只是把分类相关的层去掉了,然后将 FC6,FC7 layer转成卷积层。将 Pool5 layer 的参数从 2×2−s2 转变成 3×3−s1,但是这样变化后,会改变感受野(receptive field)的大小。因此,采用了 atrous algorithm 的技术。 atrous algorithm其实就是 hole filling algorithm,这篇文章有比较详尽的解释:http://blog.csdn.net/u010167269/article/details/52563573
multiscale feature maps:如上图,在base network的基础上再加一些conv layer,这些层的尺寸逐渐变小,使得整个网络能够检测多尺度的物体。
conv predictors for detection:不同于YOLO使用全连接层做预测,SSD使用卷积层。multiscale feature layers通过conv layer输出score和location offsets,即上图中的Classifier,使用3*3的卷积核。
default boxes and aspect ratios:对于每个default box,预测c个类别的score和4个offsets,所以对于每个feature layer的每个位置来说,共有(c+4)*k个输出,其中k表示的是default box的数目,这个值在不同分辨率的feature map上不一样,例如上图中Classifier的k值有4和6两种。
Matching strategy:训练的时候如何把default box和gt box匹配上?首先最大overlap的default box置为正,另外overlap>阈值(0.5)的也置为正。这个设定简化了学习问题,可以容许一个gt box对应多个default box。如下图,在两个scale的feature map上,猫这个object有两个default box对应,狗有一个default box对应。
Training objective:和其他物体检测算法一样,loss由分类loss和回归loss两部分组成,其中 α 表示回归loss的权重,交叉验证得 α=1 。N表示和该物体相匹配的default box的数目,如果N=0,loss=0。
Choosing scales and aspect ratios for default boxes:如何选择default box的scale和aspect ratios?设计default box使得特定层的feature maps学习特定scale的物体。
根据公式,最低层学习scale为0.2的box,最高层学习scale为0.9的box。
另外,aspect ratios取{1,2,3,1/2,1/3},这样我们就能计算每个default box的宽高:
wak=skar‾‾‾√ ,
hak=sk/ar‾‾‾√
另外在aspect ratio为1时本文还增加了一个default box,这个box的scale是:
s′k=sksk+1‾‾‾‾‾‾√
Hard negative mining:为了避免数据imbalance的问题,选择default box中最高loss的那些负样本,使得正负样本比例接近于1:3。
Data augmentation:每张图片将通过以下方式之一进行randomly sampled:
采样的patch和原始图像大小的比例是[0.1,1], aspect ratio在[0.5,2]之间。如果gt box的中心落在采样的patch中,我们保留重叠部分。经过sampling以后,每个patch会被resize到固定大小,并且以0.5的概率进行水平翻转,另外还使用了亮度扭曲(photometric distortions),参考[14]。
实验主要讲一下文章中作model analysis的部分。主要是通过控制变量来验证SSD的每个模块对最终性能的影响。
从上图中可以看出以下几点: