阅读 657

SSD物体检测算法详解

物体检测算法,按算法结构,可以分为one-stage和two-stage两类。

two-stage经典算法主要是R-CNN族,以准确度见长,速度稍慢,一般不如one-stage。

one-stage算法主要包括YOLO、SSD、CornerNet等,以速度快见长,准确度一般不如two-stage。本文分享的SSD就是经典的one-stage算法。

上图是物体检测算法整个演化坐标轴,可以看出SSD的发布,是在Faster R-CNN和YOLO v1之后。YOLO v1是one-stage检测算法的开山之作,速度碾压Faster R-CNN,但准确性远不如Faster R-CNN。SSD沿用了YOLO v1的基本思路,糅合了Faster R-CNN的anchor-box,又开创性的提出了多分辨率预测,最终达到了极快又准,如下表。

SSD单一scale的检测原理

这里先直接给出具体的模型计算方法,后面再解释原理,否则原理解释起来非常晦涩难懂。

1)模型

a) 输入图片经过特征提取器(SSD采用VGG16做特征提取器),得到H x W x Channel的Extracted Feature Map。

b) 将上述Extracted Feature Map,经过3 x 3 x (25 x num_default_box)的卷积核,卷积成H x W x (25 x num_default_box)的feature map作为物体检测的predict。如下图(图中num_default_box=4):

上述两步,就已经完成了物体检测的predict。足够简单

2)原理解释

由卷积的特性可知,从输入图片到HxW分辨率的预测,相当于将原分辨率的输入图片进行HxW等分,如下图(这里h=2,w=2):

为了更准确的预测物体bounding box,SSD借鉴了faster rcnn中的default box思想。

先假设,每一个cell中已经存在多个default box,default box的长宽固定,位于每一个cell正中。

以下图为例,每一个cell中有四个固定大小的default box。

那么在predict时,每一个cell就会有4个预测,每一个预测对应一个default box。如下图:

具体到一个default box的预测,分为两个部分,如上图中的default box 1,

  1. P_i(i=background, c1, …, c20),代表的是这个default box的物体类别。P_background代表是背景的概率,P_ci代表是类别ci的概率(这里采用的VOC数据集,共有20个物体类别),所有概率值之和为1,取概率值最大的类作为default box的类别预测值。

  2. Δcx, Δcy, Δw, Δh代表default box内的物体目标框与default box的位置之间的偏差。Δcx, Δcy代表中心点的偏差,Δw, Δh代表宽高的偏差。具体的含义可以参考Loss计算章节。

所以一个default box会有25个预测结果,4个default box就有100个。这就是上文模型部分predict中的100的意义。

3)Loss计算

根据上述分析可知,每个cell都有4个default box,HxW的分辨率,则会有4HW个预测结果。对于监督学习,需要知道每个default box对应的标签Ground Truth。SSD对于真实GT物体框的分配策略是,首先将GT分配给IoU最大的default box,然后将GT分配给IoU大于0.5的default box,也即同一个GT会分配给不同的default box,不同的default box对应的GT可能是同一个。

如上图,红色框是dog的真实位置,那么绿色箭指向的两个default box的GT都是红色框,其他两个default box的GT是背景即没有物体。

对于正例,即default box有GT框的,loss分为类别损失和位置损失。

对于反例,即default box没有GT框的,loss只有类别损失(类别是背景)。

Loss是confidence loss和location loss加权之和。

location loss计算如下:

其中,y是预测值,y^hat是预测值的label。对于cx,cy,w,h的y^hat采用下式计算:

g是ground truth值,d是default box的先验值。可以看出,中心点坐标就是ground truth值与default box先验值得相对差,w和h是ground truth值与default box先验值比值的对数。

其实这样处理都是尽量减小y^hat值变化幅度,减少学习难度。

confidence loss计算如下:

都是cross entropy loss。

以上就是单一scale的SSD原理。

SSD多scale的检测原理

SSD的主要贡献有两点

1)引入了上文所述的default box

2)多scale预测

上文的单scale预测,是取整个特征提过程的某一个feature map做预测。多scale预测,就是取整个特征提取过程中的不同分辨率的feature map均做预测。

由上图可以看出,SSD做了6个scale的预测。

Loss也是每个scale的Loss之和。

Tricks

1)data augmentation

数据增强是模型训练非常重要的一环,毕竟数据获取太难了。

SSD每一张训练图片由如下方法随机产生:

原图片

截取一部分图片,保证截取框与物体框的最小IoU是0.1,03,0.5,0.7,或者0.9

随机截取一部分图片

随机截取图片的大小是[0.1,1]原图片大小,aspect ratio是0.5~2。

2)default box

default box由scale和aspect ratio控制。

scale最小为0.2,最大0.9。假如总共选取了m个scale,则各个scale的scale值按下式计算:

aspect ratio选取为:

aspect ratio为1时,再增加一个scale,取值为:

所以每一个scale的每一个cell共有6个default box。

3)hard negative mining

因为绝大部分default box都是负样本,导致正负样本严重失衡,如果计入所有负样本的损失,训练非常不稳定,收敛性非常慢,所以负样本只计入损失最大的几个负样本,并且要保持正负样本比例为1:3。

试验结果

1)普通技巧的消融试验结果

可以看出数据增强的影响非常大

2)多scale预测的消融试验

可以看出多scale可以显著提高准确性

3)COCO数据集结果对比

关注下面的标签,发现更多相似文章
评论