ssd

SSD:single shot multibox detector

摘要

SSD将输出一系列离散化的bounding box,这些box在不同的层的特征图上产生,有着不同的纵横比。

测试阶段:

  • 计算每个物体的置信度,并产生这些box的调整量,使得先验更好地与目标的形状相匹配。
  • 为了处理多尺度的目标检测问题,网络还从多张不同分辨率的feature map做预测。

相对于那些需要object proposal的检测模型,本文方法摒弃了proposal generation的阶段。使得模型更好地训练并且更容易融进系统之中。

SSD

SSD从Multibox得到灵感,和他有相似的目标函数。Multibox通过训练一个目标检测器来产生目标proposal,但是完成完整的目标检测仍然需要在产生的proposal上进行分类后(post-classification)的处理。但是SSD只需要对输入图片的a single shot evaluation能够检测多类别

feature map cell:将feature map切分成$4\times4$或者$8\times8$的格子

default box:每个cell上的一系列固定的box,如上图。

Model:

SSD是一个前向传播的CNN网络,产生一系列固定大小的bounding box,以及每个box包含物体实例的可能性:score。之后进行非极大值抑制,得到最终的predictions。

Multi-scale feature map for detection:

在基础网络结构后面又添加了额外的卷积层,这些卷积层的大小逐渐递减,使得可以进行多尺度的预测。

Convolutional predictors for detection:

每个添加的特征层,可以使用一系列的卷积滤波器来产生固定的检测。对于特征层为$m\times n$ 、通道为$p$ 的卷积层,预测一个检测的基本单元的参数为:$3\times 3\times p$ 个小的滤波器,可以产生一个类别的分数和相对于default box的偏移量。在每个$m\times n$ 的位置,卷积核会输出一个值。bounding box的偏移输出量是:default box相对每张特征图的位置。

Default Box and aspect ratios:

对于多个特征图,我们将一系列的default box和每个feature map联系起来。每一个box相对feature map cell的位置固定。在每个feature map cell内,我们预测得到的box和default box之间的偏移,已经每个box中包含物体的分数。

因此,对于每个位置上的$k$个box中的每个box,我们需要计算出:

  • $c$个类、每一个类一个score
  • 还有这个box相对于default box的4个偏移量。
  • 于是,在feature map中的每个cell上,需要有$(c+4)\times k$个滤波器,对于一张$m\times n$的feature map,输出$(c+4)\times k\times n\times m$个输出结果。

这里的default box类似于faster RCNN中的anchor。

Training

区别于 region proposal+pooling的方法,SSD的ground truth需要赋到每个固定输出的box上面。

training objective

用$x_{ij}^p=1$表示第i个default box与类别$p$的第$j$个ground truth相匹配。否则为0.

有$\sum_ix_{ij}^p\geq 1$ ,表示第j个ground truth box,可能和多个default box相匹配。

总的目标函数:

$$L(x,c,l,g)=\frac{1}{N}(L_{conf}(x,c)+\alpha L_{loc}(x,l,g))$$

$$L_{loc}(x,l,g)=\sum_{i\in Pos }^N \sum_{m\in {cx,cy,w,h}} x_{ij}^ksmooth_{L1}(l_i^m-g_j^m)$$

其中:

  • $N$是ground truthbox相匹配的default box个数。
  • loc loss是Smooth L1损失,用于predict box($l$)和ground truth box($g$)参数,回归bounding box的中心位置,以及width和weight。
  • confidence loss:softmax loss,输入为每一类的置信度$c$。
  • $\alpha$为1

Choosing scales and aspect ratios for default boxes:

大部分CNN在网络深层,feature map的尺寸会越来越小,这样不仅仅是为了减少计算和内存的需求,并且可以具有平移和尺度不变性。

先例:

ICLR 2014, Overfeat: Integrated recognition, localization and detection using convolutional networks

[ECCV 2014, Spatial pyramid pooling in deep convolutional networks for visual recognition]

将图像转化成不同尺度,将这些图像独立的通过CNN进行处理,再将这些不同尺度的图片结果进行综合。

但是:使用同一个网络中的不同层的feature map也可以达到相同的结果,同时在所有物体尺度上共享参数。

CVPR 2015, Fully convolutional networks for semantic segmentation

使用了浅层的特征,因为越底层的layer,保留的图像细节越多,以提高图像分割的效果。

Combining predictions from multiple feature maps

SSD中,每个default box不必与每一层的layer的receptive field对应。本文设计中,feature map中特定的位置,来负责图像中特定的区域,以及物体的特定尺寸。加入$m$个feature map来做predictions,每一个feature map default box尺寸大小为:

$$s_k=s_{min}+\frac{s_{max}-s_{min}}{m-1}(k-1),\quad k \in [1,m]$$

其中,$s_{min}$取值为0.2,$s_{max}$取值为0.95,即最低层尺寸为0.2,最高层为0.95。

不同aspect ratio的default box,用$\alpha_r$来表示:$\alpha_r = {1,2,3,1/2,1/3}$,则每个default的尺寸可以被计算出来:

$$w_k^{\alpha}=s_k\sqrt{\alpha_r}$$

$$h_k^{\alpha} = s_k/\sqrt{\alpha_r}$$

对于aspect ratio为1的时候,增加了一个default box,其尺寸为$s’k=\sqrt{s_ks_{k+1}}$.最终每个feature map location上,有6个default boxes。

每个default box中心,设置为$(\frac{i+0.5}{|f_k|},\frac{j+0.5}{|f_k|})$,其中,$|f_k|$是第k个feature map的大小。同时,$i,j\in [0,|f_k|]$.

Hard negative mining:

产生一系列的prediction之后,会有很多符合groundtruth 的prediction boxes,但是同时也有很多不符合的,就是negative box,远远多于positive box。会造成negative box和positive box之间的不平衡。训练难以收敛。

因此本文采取策略:现将每一个物体位置上对应的predictions的negative的进行排序,按照default box的confidence大小,选择最高的几个,保证最后的negatives 和positives比例为3:1。

Data Argumentation

操作:

  • 使用原始图像
  • 采样一个patch,与物体之间最小的jaccard overlap为0.1,0.3,0.5,0.7与0.9
  • 随机采样一个patch

采样的patch是原始图像大小比例为【0.1,1】,aspect ratio为1/2和2之间。

当ground truth box的中心在采样的patch中,我们保留重叠部分。

之后。每采样一个patch,resize到固定大小。一0.5的概率随机水平翻转。