SSD先验框详解
人形梳毛姬
2019年03月06日 20:46
收录于文集
共1篇

由于讲了四次视频还出错,讲到自己心态崩了,不想录视频了,就写个专栏好了。

  首先,昨天说到SSD的一个缩放比是Sk,代表了先验框和原始图像之间的比例。

  但是,SSD的第一层的缩放比Sk,是另外用Smin/2,计算得来的。正如上个特点所说的,大尺度识别小目标,第一层特征图还是比较大的,那么我们的先验框要小一些才好。

先验框的尺寸计算表

根据

Sk计算方式

因为第一层的Sk是人为给出的,所以Sk的计算应该是从19*19这一层开始的,所以m=5,k的话也是从1取到5分别对应2至6层,那么的出来的Sk数值应该就是【0.1,0.2,0.375,0.55,0.725,0.9】。那么这么看,不就是从0.2开始每一层都加0.175吗,这(Smax-Smin)/(m-1)就是Sk的增量,这就是step的最基础的原理。

但是这样计算会出现一个问题,就是会算出带有小数点的先验框尺寸,但是原始图像像素点不可分,不可能出现类似于第125.5个像素点,所以就出现了这个式子。

那么这里的step就应该是17.5,向下取整17。有了这个每层的增量17之后,我们只需要计算出第二层(19*19)层的先验框尺寸300*0.2=60,那么接下来的Sk直接加17不就行了吗。这就的出来Sk*100=【第一层的不算,20,37,54,71,88】,接着再除掉100,得到了一组近似的缩放比,之后用300的原始图像的尺寸去乘这一组缩放比【0.1,0.2,0.37,0.54,0.71,0.88】就可以得出六层的先验框尺寸【30,60,111,162,213,264】。这背后其实还有个逻辑就是300*0.17=51,是个整数,所以这样一放一缩之后,乘出来的每层先验框尺寸的差值是个整数,不会出现半个像素点的情况。

这一次复杂的又傻叉的计算之后,就得到的是中间那个小正方形的长宽,但是我们都知道每一层特征图的每个栅格都有两个正方形,外面那个正方形的长宽怎么算呢?

公式如下:

大正方形长宽

此Sk非彼Sk,这个Sk表示的是当前这个特征层上面,先验框的尺寸(简单来说就是中间那个正方形的边长),Sk+1是后面那一层的先验框的尺寸,那么又有问题了,最后一层的后面没有层了,所以直接给定给出了S7=300*1.05=315。然后欢快的计算出了所有层的大正方形的长宽。

正方形解决了,如何来算长方形呢?这就依赖一个参数,α 以及非常巧妙的w,h计算公式。

长方形的参数

宽高计算公式

这个Sk还是表示当前层的小正方形的长宽,也就是anchor_size.然后,代入数据,比如第一层38*38的特征图,其anchor_size就是30,就会有以下发现:

在先验框尺寸为30下的宽高组合

就可以发现这个公式和这个α的取值可以完美的得到中心对称的先验框组合,α=1也就是啥都没变,还是那个小正方形,α取其他的,就长成如下样子:

1:2和1:3下的先验框组合

然后就完了,先验框就生成了,自己排列组合选α即可。

代码明天讲,内心好忧伤。