先验框¶
SSD
算法定义了多尺度、多长宽比的先验框(Prior Boxes
,也称为默认框,Default Boxes
),代替了目标预提取步骤,能够加速检测过程
尺度设置¶
先验框的尺度计算如下:
其中,
- m表示不同分辨率的特征图的个数
- S_{min}=0.2, S_{max}=0.9
长宽比设置¶
特征图的每个cell
中使用了多个先验框,其不同先验框的长宽比计算如下:
对于长宽比为1的先验框,使用两种尺度
中心坐标计算¶
每个先验框的中心坐标计算如下:
其中f_{k}表示第k个特征图的尺度,i, j\in [0, \left | f_{k} \right |)
先验框个数¶
当前提取了6
个网络层作为特征图
Conv4_3
:38\times 38\times 512Conv7
:19\times 19\times 1024Conv8_2
:10\times 10\times 512Conv9_2
:5\times 5\times 256Conv10_2
:3\times 3\times 256Conv11_2
:1\times 1\times 256
在Conv4_3/Conv10_2/Conv11_2
中,每个cell
使用了3
种长宽比设置 - (1, 2, \frac {1}{2}),所以在这些特征图中每个cell
包含了4
个先验框(因为长宽比为1
的先验框有2
种尺度)
在Conv7/Conv8_2/Conv9_2
中,每个cell
使用了5
种长宽比设置 - (1, 2, 3, \frac{1}{2}, \frac{1}{3}),所以在这些特征图中每个cell
包含了6
个先验框
完整的先验框个数计算如下:
先验框作用¶
- 对分辨率较高的特征图使用小尺度的先验框
- 对分辨率较低的特征图使用大尺度的先验框
这样能够充分覆盖不同尺度的检测目标,使得
- 比较大的特征图能够用来检测相对较小的目标
- 比较小的特征图能够用来检测相对较大的目标
从而提高检测精度
具体实现¶
py/ssd/models/achors/prior_box.py
在具体实现过程中,对于先验框的尺度计算进行了相应的调整
参考:
指定了第一个特征图使用的尺寸s_{1}=0.1,然后从第二个特征图开始按公式计算。所以s_{2}=0.2, s_{6}=0.9,完整的尺度列表为
从第二个特征层开始增量为0.175
在上述计算后进一步对尺度进行了100
倍的放大(防止具体计算时尺度不为整数),计算公式为
从第二个特征层开始,之后特征层的增量为17
所以放大后的尺度列表为
再进行100
倍的缩小,得到尺度列表为
输入图像大小为300\times 300,所以各层先验框的实际大小为
每层的增量为0.17*300=51
对于第6
个特征层,还需要额外计算s_{k+1}=264+51=315