目标检测 SSD
flyfish
VOC数据集的类别个数
VOC_CLASS = ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle',
'bus', 'car', 'cat', 'chair', 'cow',
'diningTable', 'dog', 'horse', 'motorbike', 'person',
'pottedPlant', 'sheep', 'sofa', 'train', 'TV']
类别个数是21,还有一个没在列表里的背景
如何看懂下面这张图
feature map 是什么
简单理解
假设有个函数,我们叫它卷积函数f,x为输入。
f(x)=y,输入x,经过卷积函数f之后得到y,我们可以称为这个y就是feature map
f(y)=z, 输入y,经过卷积函数f之后得到z,我们可以称为这个z就是feature map
如果f(x)的结果y有一个通道,可以说一个feature map或者一张feature map
如果f(x)的结果y有三个通道,可以说三个feature map或者三张feature map
SSD 有6张feature map
feature map,因为map翻译成地图,地图就是真是地理的映射,所以有的地方翻译成特征图,有的地方翻译成特征映射
feature map 要解决什么问题
1 what(recognition),也就是feature,我们根据feature判断出来它是什么object
2 where(localization),也就是map,在什么地方,用一个矩形的边框画出来,表明object在哪
feature layer
一部分在base net中的feature layer
一部分是自行添加的feature layer
feature map 在哪一层是我们人为指定的,我们认为它是,他就是,并不是每个经过卷积层的输出我们都认为它是feature map。
例如上图,划分成了8 × 8 feature map 和 4 × 4 feature map
图b, 8 × 8 feature map 有64个 feature map cell
这个就像一个Excel表格 中的 单元格的概念一样
SSD 的6张feature map 划分的是 39 × 39,19 × 19, 10 × 10, 5 × 5, 3 × 1, 1 × 1
程序中通常以配置展现 38, 19, 10, 5, 3, 1
后面用38, 19, 10, 5, 3, 1 指代每层的feature map
例如说38 feature map,19 feature map
GT box 是什么
绿色的GT是ground truth
就像我们人为操作画出猫狗的边框,也就是正确的标注数据,也可以把标注数据都叫ground truth
这里我们给图片正确打标记,画上边框就是ground truth,实际ground truth在程序是一行文本表示的
default box
如果在SSD中出现anchor box,prior box, 先验框都是一个意思。
对比ground truth 和 default boxes
绿色的GT是ground truth,红色为default box
default box是怎么产生的
每个feature map cell都产生
产生根据不同的比例(different scale) 和 aspect ratio(纵横比),
scale有的地方翻译成尺度,aspect ratio有地方翻译成高宽比
同一个feature map上每个feature map cell的default box的个数是相同的,
不同的feature map上的feature map cell的default box的个数是不同的
关于每个feature map cell的default box个数 按层个数如下
4, 6, 6, 6, 6, 4, 4
也就是38 feature map 对应 4
19 feature map 对应 6,依次向后
图中loc是default box的位置,default box 中心点坐标,宽度,高度,4个值
conf 是预测C个类别的分数,使用VOC数据集,因为是是21个类别,所以这里有21个值
ssd 预测的边框数
38 × 38 × 4 + 19 × 19 × 6 + 10 × 10 × 6 + 5 × 5 × 6 + 3 × 3 × 4 + 1 × 1 × 4 = 8732 38 \times 38 \times 4+19 \times 19 \times 6+10 \times 10 \times 6+5 \times 5 \times 6+3 \times 3 \times 4+1 \times 1 \times 4=8732 38×38×4+19×19×6+10×10×6+5×5×6+3×3×4+1×1×4=8732
参数解释
'feature_maps': [38, 19, 10, 5, 3, 1],
'min_sizes': [30, 60, 111, 162, 213, 264],
'max_sizes': [60, 111, 162, 213, 264, 315],
'aspect_ratios': [[2], [2, 3], [2, 3], [2, 3], [2], [2]],
feature_maps 已经知道了
min_sizes和max_sizes的解释
s m i n s_min smin is 0.2 and s m a x s_max smax is 0.9, meaning the lowest layer has a scale of 0.2 and
the highest layer has a scale of 0.9
为了计算将0.2和0.9扩大100倍
min_ratio = 20
max_ratio = 90
step = int(math.floor((90 - 20) / (6 - 2)))
70/4=17.5 ,因为math.floor所以最后是17
从20-90之间以step=17为间隔产生一组数结果是[20,37,54,71,88]
输入是300 * 300
38 feature map 的 min_size=( 300 * 10 / 100 )=30,max_size =( 300 * 20 / 100) = 60
简化下计算 0.2和0.9扩大100倍,300 缩小100倍,间隔都是17
38 feature map 的 min_size= 3 * 10 = 30, max_size = 3 * 20 = 60
19 feature map 的 min_size= 3 * 20 = 60, max_size = 3 * 37 = 111
10 feature map 的 min_size= 3 * 37 = 111,max_size = 3 * 54 = 162
5 feature map 的 min_size= 3 * 54 = 162,max_size = 3 * 71 = 213
3 feature map 的 min_size= 3 * 71 = 213,max_size = 3 * 88 = 264
1 feature map 的 min_size= 3 * 88 = 264,max_size = 3 * 105 = 315
这也就是下面的数的由来
‘min_sizes’: [30, 60, 111, 162, 213, 264],
‘max_sizes’: [60, 111, 162, 213, 264, 315],
aspect_ratios的解释
‘aspect_ratios’: [[2], [2, 3], [2, 3], [2, 3], [2], [2]]
论文中是这样的
We impose different aspect ratios for the default boxes, and denote them as
a r ∈ { 1 , 2 , 3 , 1 2 , 1 3 } a_{r} \in \left\{1,2,3, \frac{1}{2}, \frac{1}{3}\right\} ar∈{1,2,3,21,31}
实际表达方式如下
正方形的default box,共两个,其边长计算公式为:
小正方形的边长=min_size
大正方形的边长=sqrt(min_size * max_size)
矩形
height=1 / sqrt(aspect_ratio) * min_size,
width=sqrt(aspect_ratio) * min_size
[2]是
1:1 小正方形
1:2
2:1
1:1 大正方形
4种纵横比
[2,3]
1:1 小正方形
2:1
1:2
3:1
1:3
1:1 大正方形
6种纵横比
这也是4、6、6、6、4、4的由来
The model loss is a weighted sum between localization loss ( Smooth L1 ) and confidence loss ( Softmax )
什么是感受野
感受野,Receptive Field,简称RF
输入图像经过1次 k × k 卷积后,输入图像的 k × k 像素会变成输出图像的 1个 像素,
所以输出图像的每一个像素与输入图像的 k × k 有关.这里 k × k卷积 相当于标准卷积 stride=1,dilation=1 ,无padding,groups=1.
A(大小 7 × 7) -》经过卷积(3 × 3)-》B(大小 5 × 5) 感受野 大小是3 × 3
输出图像B的一个像素 和 A图像的 3×3像素 有关
假设B再做1次 3 × 3 卷积后,那么输出图像C的一个像素 又和 B图像的 3×3 有关.
B(大小 5 × 5) -》经过卷积(3 × 3)-》 C(大小 3 × 3)
C的每一个像素与A图像 的 (3 × 2 - 1)×( 3 × 2 - 1)=5 × 5像素有关
简单理解感受野就是 输出图像的每一个像素与输入图像的 N×N 有关
,那么输出图像的感受野就是 N×N
A是输入
B的感受野大小是3 × 3
C的感受野大小是5 × 5
如果还有D,那感受野就是(3 × 3 - 2)×( 3 × 3 - 2)=7 × 7
第一个卷积输出图像的感受野的大小等于卷积核的大小
下图只是把 7 × 7 变成了 7
Hard Negative Mining
其他名字:难例挖掘 难分样本挖掘
样本分为正样本和负样本
正样本
GT box
负样本
检测每一个default box,如果与GT box的IoU 都小于0.5(自定义),认定其为负样本
default box 和 GT box 匹配的时候,有大量的default box 不合格。
将负样本的default box按照置信度从大到小排序,选择那些置信度分数大的作为负样本,调整到正负样本数量的比值为1:3。
就像
老师出了几道题测试题,题目太难,100分满分,全班 8 /9 的学生不及格,都不到60分,
老师一看不及格太多,将学生按分数排一下顺序,将 6 / 9 的学生定为不及格。3/9的学生定义为及格,而不管及格分数是多少。
如果不这样做,后果是
如果负样本过多,假设极端情况99.9 都是负样本,随便拿个什么东西给模型去识别,模型都识别为 负样本,因为即使这样是99.9%的正确率,但我们真正想要的是正样本。这时候就要调整正负样本数量的比值。
熟悉的L2
L 2 = ∣ f ( x ) − Y ∣ 2 L 2 ′ = 2 f ′ ( x ) ( f ( x ) − Y ) \begin{aligned} L_{2} &=|f(x)-Y|^{2} \\ L_{2}^{\prime} &=2 f^{\prime}(x)(f(x)-Y) \end{aligned} L2L2′=∣f(x)−Y∣2=2f′(x)(f(x)−Y)
L1
L 1 = ∣ f ( x ) − Y ∣ L 1 ′ = ± f ′ ( x ) \begin{array}{l}{L_{1}=|f(x)-Y|} \\ {L_{1}^{\prime}=\pm f^{\prime}(x)}\end{array} L1=∣f(x)−Y∣L1′=±f′(x)
Smooth L1
localization loss 使用的
Smooth L 1 ( x ) = { 0.5 x 2 , i f ∣ x ∣ < 1 ∣ x ∣ − 0.5 , otherwise \operatorname{Smooth}_{L 1}(x)=\left\{\begin{array}{ll}{0.5 x^{2},} & {i f|x|<1} \\ {|x|-0.5,} & {\text { otherwise }}\end{array}\right. SmoothL1(x)={0.5x2,∣x∣−0.5,if∣x∣<1 otherwise
otherwise的情况是
x < − 1 or x > 1 x<-1 \text { or } x>1 x<−1 or x>1
它的导数是
d smooth L 1 d x = { x if ∣ x ∣ < 1 ± 1 otherwise \frac{\mathrm{d} \operatorname{smooth}_{L_{1}}}{\mathrm{d} x}=\left\{\begin{array}{ll}{x} & {\text { if }|x|<1} \\ { \pm 1} & {\text { otherwise }}\end{array}\right. dxdsmoothL1={x±1 if ∣x∣<1 otherwise
Softmax
σ ( z ) i = e z i ∑ j = 1 K e z j for i = 1 , … , K and z = ( z 1 , … , z K ) ∈ R K \sigma(\mathbf{z})_{i}=\frac{e^{z_{i}}}{\sum_{j=1}^{K} e^{z_{j}}} \text { for } i=1, \ldots, K \text { and } \mathbf{z}=\left(z_{1}, \ldots, z_{K}\right) \in \mathbb{R}^{K} σ(z)i=∑j=1Kezjezi for i=1,…,K and z=(z1,…,zK)∈RK