SSD算法

1、先验框的中心点坐标和尺寸

首先生成一个38×38的网格,网格的交点处为网格的坐标,让网格的横坐标加0.5,纵坐标加0.5后就得到了网格的中心点坐标,中心点坐标再乘以步长8后,就将先验框的坐标映射到了300×300的图像上了。接下来计算每个尺度的特征图中每个cell先验框的数量以及先验框在图片上的宽和高的尺寸(每个特征图中都会对应一个小尺度和大尺度[21,45]),每个cell都会产生两个不同尺度的正方形先验框,其尺度计算为先验框小正方形尺度为21,大的正方形的尺度为21×45然后再开根号,另外长方形先验框的尺度其宽度为小正方形的尺度乘以根号r[2,1/2],其高度为小正方形的尺度除以根号r。这样我们就能得到每个特征图在300×300的图片上每个cell的中点坐标和每个cell在原始图片上产生先验框的尺度。

2、先验框编码(先验框通过与GT进行匹配来获得先验框的label,坐标位置,先验框与GT的IOU)

生成先验框的中心点坐标和框的宽高后,计算出框的左上角坐标(中心点的横坐标减去宽的一半,中心点的纵坐标减去高的一半)和右下角坐标(中心点的横坐标加上宽的一半,中心点的纵坐标加上高的一半),然后再计算出先验框的面积。先验框和GT的左上角坐标和右下角坐标都有了,就可以算出先验框与GT之间的IOU(交并比)。当先验框与某一个GT的IOU最大时,先验框的label和这个GT的label一样,然后再计算先验框的中心点坐标和这个GT中心点坐标的偏差,最后再得到匹配到GT的中心点坐标和宽高。

3、预测值

输入数据经过网络层conv1-conv11,其中conv4-3,conv7,conv8,conv9,conv10,conv11层再重新提取出来,然后每一层后面再接两个卷积,其中一个卷积改变通道数,变成24×38×38×16,16的意思是一个cell有4个先验框,每个先验框有4个坐标,然后用16个特征图来预测这16个坐标。另一个卷积是将通道数改变成预测的类别数,一个框预测两个类别,所以是8个特征图通道,24×38×38×8。这样我们就得到了先验框的预测成不同类别的数值和概率值,框的坐标的预测值。

预测出来的先验框的每个类别的数值(也就是没有经过softmax函数转换成概率值),预测出来的每个框的坐标值,真实框的label、先验框的中心点坐标与匹配到的GT中心点坐标的偏差,先验框与GT的IOU。这些值作为损失函数的输入。每个先验框与GT进行匹配都会得到一个IOU,这个IOU与0.5阈值进行比较,大于0.5的为正样本,没有达到0.5的为负样本,对负样本进行抽样,确保正负样本达到1:3,抽样时按照置信度误差(预测背景的置信度越小,误差越大)进行降序排列,选取误差的较大的top-k作为训练的负样本

4、loss函数

SSD的损失函数包含两项

(1)预测类别损失                                                    (2)预测位置偏移量损失

loss中的N代表着被挑选出来的默认框个数(包括正样本和负样本),L(loc)即位置偏移量损失是Smooth L1 loss(是默认框与GTbox之间的位置偏移与网络预测出的位置偏移量之间的损失),L(conf)即预测类别损失是多类别softmax loss,α的值设置为1.  Smooth L1 loss定义为:
 

你可能感兴趣的:(SSD算法)