SSD系列算法原理讲解----(2)Prior Box Layer、样本构造、损失函数介绍(笔记)
SSD系列算法原理介绍
Prior Box Layer:
- m *n个cell (每个点都作为一个cell)
- 每个cell上生成固定scale和aspect ratio的box(尺寸和长宽比例)
- 假设一个feature map有m *n个cell,每个cell对应k个default box,每个default box预测c个类别score和4个offset
- ( c +4)* k * m * n个输出
Prior Box Layer:
-
shape数量越多,效果越好
-
Anchor
-
38 *38 *4 + 19 *19 *6 + 5 *5 *6 + 3 *3 *4 + 1 *1 *4 = 8732个prior box
38层提取4个default box,19层6个… -
每一个feature map cell不是k个default box都取
-
prior box 与GT box(真值)做匹配,IOU > 阈值为正样本
-
训练:确保prior box的分类准确且尽可能回归到GT box
构造样本
- 正样本
- 从GT box出发找到最匹配的prior box放入候选正样本集
- 从prior box集出发,寻找与GT box满足IOU>0.5的最大prior box放入候选正样本集
- 负样本
- 难例挖掘
- 正负样本比: 1:3
难例挖掘:
除了单纯使用正负样本构造的方法,还可以采用数据增强的方法。
数据增强
- 随机采样多个path,与物体之间最小的jaccard overlap为0.1,0.3,0.5,0.7与0.9
- 采样的patch比例是[0.3 , 1.0],aspect ratio在0.5或2
- GT box中心在采样patch中且面积大于0
- Resize到固定大小
- 以0.5的概率随机的水平翻转
同时对于每一个prior box,会预测出一个类别以及坐标偏移量。也就是说,对于SSD损失函数包含两个部分,
损失函数:
- 分类loss + 回归loss
- 分类loss:Softmax Loss
- 回归loss:Smooth L1 loss
损失函数计算:
基本思路:
让每一个prior box回归到GT box,这个过程的调控我们需要损失层的帮助,它会计算真实值和预测值之间的误差,从而指导学习的走向。
损失函数计算通常会采用回归loss和分类loss结合来计算最终loss的方式。这样的loss也会用于后续的反向传播。对于每一个prior box 希望它尽可能的回归到GT box中,在计算当前的prior box,是背景还是候选目标,通常会采用IOU方式计算,最终的IOU会通过相应的阈值进行调控。
使用细节
- 数据增强时,Crop采样大小(配置文件)
- 多任务网络的权重
- 正负样本比例(1:3)
- 难挖掘方式默认只取64个最高predictions loss来从中寻找负样本。