物体检测算法,按算法结构,可以分为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,
-
P_i(i=background, c1, …, c20),代表的是这个default box的物体类别。P_background代表是背景的概率,P_ci代表是类别ci的概率(这里采用的VOC数据集,共有20个物体类别),所有概率值之和为1,取概率值最大的类作为default box的类别预测值。
-
Δ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是预测值,yhat是预测值的label。对于cx,cy,w,h的yhat采用下式计算:
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可以显著提高准确性
网友评论