SSD在众多的物体检测方法中算是比较重要的。之前学习过,但是没过多久就忘了,因此决定将该论文翻译一下,以加深印象。
我们提出了用单个深度神经网络进行物体检测的方法,称为SSD。在每个特征图中的每个位置,SSD将bbox(bounding boxes)离散化成一系列的固定框,每个框有不同的长宽比(aspect ratios)和缩放率(scale)。在预测的时候,网络会为每个default box预测物体类别,并且会为每个default box的长宽进行调整,以更好的匹配物体的形状。另外,网络使用了多尺度特征图进行预测,使得SSD对不同大小物体的检测更具有鲁棒性。与需要物体候选框的方法相比较,SSD会更简单。因为SSD不需要候选框的提取、iOU Polling或者特征重采样,而是将这些过程都包含进一个单独的网络。这使得SSD更容易训练,并且也更容易嵌入到系统中使用。在PASCAL VOC、COCO以及ILSVRC数据集的实验结果显示,SSD的正确率在同等训练和测试条件下会比采样候选框方案更具有竞争性。在输入分辨率为300*300的情况下,SSD在VOC2007 测试集中的mAP为74.3%,在nvidia titan X显卡下达到了59FPS的速度。而在512*512时,SSD的mAP为76.9%比faster R-CNN还好。相较与其他one stage的方法,SSD即使在小分辨率图片下也能够取得更好的正确率。代码:: https://github.com/weiliu89/caffe/tree/ssd
目前最好的物体检测系统都来着以下的变种:确定bbox,为每个bbox重采样特征,然后分类。这个基于faster R-CNN的流程在Selective Search方法后,在VOC、COCO、ILSVRC数据集中一直获得最好的结果。尽管有高正确率,但是在计算量上却非常大。这使得不管是嵌入式系统或者高端硬件上都很难达到实时应用。这些方法的运行速度衡量标准都是每秒多少帧(SPF),即使是Faster R-CNN也才达到了7帧每秒(FPS)。尽管有很多方案进行了速度优化,但是都牺牲正确率。
论文提出了第一个使用单个网络的物体检测方法,该方法不需要提取候选框、不需要重采样特征图,也能获取与相同的正确率。我们的改进主要包括,使用小卷积核预测类别以及bbox的偏移量,使用不同的卷积核来检测不同的长宽比例物体以及使用多尺度的特征图。具体的贡献如下:
1、提出了SSD,该方法比yolo效果更好,实时上该方法的正确率与faster R-CNN一样好。
2、SSD的核心是:在多尺度特征图上利用小卷积核为每个预设定好的default box预测类别与框的偏移量。
3、该方法能够很简单的进行端到端训练,并且即使是低分辨率图片也有高的正确率。进一步提升了速度与正确率的平衡。
4、效果很不错。
开始SSD算法的介绍。
SSD利用一个CNN网络预测出一系列的bbox以及相应的物体类别,然后利用NMS得到最终的检测结果。SSD的关键点在于:
Multi-scale feature maps for detection
在基础网络的后面,我们增加了一些卷积层。这些卷积层逐步的减小特征图的尺寸,并且能进行多尺度的物体检测。(YOLO只使用最后一层的特征图进行物体检测)
Convolutional predictors for detection
每一层新增的卷积层通过加入额外的卷积层,都能够进行物体的检测,如下图所示。假设新增的卷积层的输出特征图有p个通道,大小为m×n,那么可以加入3×3×p的卷积层作为检测层,该层的输出是物体类别和default box的偏移量。并且检测层的输出是一个m×n×p结果,也就是说m×n上的每个点都会预测出物体的类别(每个default box都会有相应的物体类别)和default bbox的偏移量。而yolo只有在最后一层进行检测。
Default boxes and aspect ratios
我们为每个用来检测的特征图的每个位置(feature map cell,或者说图像中的每个像素)设置了default box(4个或者6个)。在每个cell里面,会预测对应的default box的偏移量以及物体类别。具体的,在每个位置上有k个default box,我们会会每个default box计算出c个类别的分数和4个在该default box上的偏移量。这样每个位置就有(c+4)k个输出,一个m×n大小的特征图就有(c+4)kmn个输出。我们的default box与 faster R-CNN的anchor boxes很相似,不同的是我们将其应用到了多个特征图上面。由于不同尺度的特征图上的default box形状不一样,因此我们能够覆盖所有的真实框。关于default box我们可以参考下图:
上图的解释:(a)SSD的输入,分别是图片和真实的框。在该例子中特征图上的default box数量为4,(b)、(c)为两个不同尺度的特征图,分别为8*8和4*4。对于每个default box我们会预测偏移量和类别 (c1,c2,...,cp) ( c 1 , c 2 , . . . , c p ) 。在训练时,我们首先将这些default box与真实的框进行匹配。比如,我们将8×8特征图中蓝色的default box与猫的框匹配,4*4中红色的default box与狗匹配,这两个default box将作为正样本,而其他的作为负样本。
Matching strategy
在训练过程我们需要确定哪个default box与真实的box最匹配。对于每个真实的box我们会从不同的位置、长宽比和尺寸的default box中进行选择。我们首先为每个真实的box匹配出IoU最大的default box,然后我们为每个default box匹配出IoU大于某一阈值(0.5)的真实box。这使得学习问题变得更简单,因为网络可以为多个重叠的default box预测出高的分数,而不是只预测一个最大重叠的框。
Training objective
假设 xpij=1,0 x i j p = 1 , 0 表示第i个default box与第j个真实box匹配,p表示真实box的物体类别。在本文的匹配策略里面,我们会有多个default box匹配到同一个真实box,即 ∑ixpij>=1 ∑ i x i j p >= 1 。完整的损失函数由位置损失函数和类别损失函数确定:
其中N表示匹配上的default box 个数,如果N=0,那么损失函数值则为0。 Lloc L l o c 的目的是回归default box(d)的中心点 (cx,cy) ( c x , c y ) 和宽高(w,h)的偏移量:
g表示真实box, l l 表示网络预测的box。
另外类别的损失函数为:
Choosing scales and aspect ratios for default boxes
为了能够检测不同尺度大小的物体,有些方法推荐使用不同尺寸的图片进行检测,然后合并每张图片的检测结果。但是通过利用不同层的特征图我们也能够获得相同的效果,同时在不同物体尺寸上使用的是共同的参数。之前的别人的工作表明,使用低层特征图能够有效的提升语义分割的效果。这是因为低层特征图能够获取更多的细节信息。还有其他论文表明,通过加入pooling后的低层特征图可以使得分割结果更平滑。受这些方法的启发,我们同时使用低层和高层特征图进行检测。
来自不同层的特征图会有不同的感受野。幸运的是,在SSD框架里面,default box不需要与每一层的感受野对应上。我们通过设计一系列的default box,使得不同层的特征图能够预测不同尺寸的物体。假设我们使用了m个特征图用来检测,那么每个特征图对应的default box的尺度为:
其中 Smin=0.2,Smax=0.9 S m i n = 0.2 , S m a x = 0.9 ,这表示最低层的特征图的default box缩放尺度是0.2,最高层特征图的缩放尺度是0.9,其他层的缩放尺度由上面的公式计算而来。
对于不同default box的宽高比我们设置为 ar∈{1,2,3,1/2,1/3} a r ∈ { 1 , 2 , 3 , 1 / 2 , 1 / 3 } ,那么每个default box的宽为 wak=ska‾√r w k a = s k a r ,高为 hak=sk/a‾√r h k a = s k / a r 。对于宽高比为1的情况,我们增加了一个scale为 s′k=sksk+1‾‾‾‾‾‾√ s k ′ = s k s k + 1 的default box。这样中共有6个default box,并且每个default box的中心点为 (i+0.5|fk|,j+0.5|fk|) ( i + 0.5 | f k | , j + 0.5 | f k | ) , |fk| | f k | 表示第k个特征图(正方形)的大小。在实际中default box的分布可以根据实际的数据集来设计,如何设计是另一个需要讨论研究的问题。
通过合并所有特征图上所有的default box,我们可以获取一系列的预测框,这些框几何可以覆盖所有的真实框。例如猫和狗的那张图,狗的box在是4×4特征图中匹配到default box,而不是在8×8中。这是因为在8×8中的default box的宽高比和尺寸与狗的box不匹配,因此在训练过程中被当做负样本。
Hard negative mining
在匹配步骤完成后,大部分default box都是负样本。特别是 default box个数多的特征图中,负样本数会更多。这就使得正样本数和负样本数极大不平衡。为了解决这个不平衡问题,我们不使用所有的负样本。而是对所有的负样本根据confidence loss进行排序,然后取loss最高的default box作为负样本。这样一来负样本数和正样本数的比例则为3:1。
Data augmentation
为了使得模型对不同尺寸的物体更具有鲁棒性,每张用于训练的图片会进行随机扩充:
1、使用原始图片;
2、从图片中采样一个块,这个块与真实物体的最小IoU为0.1,0.3,0.5或者0.9;
3、随机采样一个块。
被采样的块的大小是原始图片大小的0.1或者1倍,并且宽高比为1/2和2。【其他具体的扩充要去查看源代码才能比较清楚。】
后面的实验结果主要是与其他方法的比较,以及说明default box和多特征图的有效性。
还有一个比较重要的是,给出了针对小目标的数据扩充方案。由于SSD没有像Faster R-CNN那样对特征进行重采样,所以SSD对小目标的检测会比价困难。随机crop有放大的效果,这相当于产生了很多大的目标。为了产生小的目标,我们先将原始图片随机放置在一个大的图片(原始图的16倍)里面,这个大图中其他没有被填充的地方用均值填充。然后再进行随机crop操作。通过这样的操作能够获得2%-3%mAP的提升。