SSD原理介绍
主要内容:(1)SSD原理介绍(2)kitti数据集介绍(3)SSD代码测试
主要特点:SSD同时使用多个卷积层的输出来做分类和位置回归,下图是SSD和YOLO的对比结果。
整体来看
- 相比Faster RCNN有明显的速度优势,相比YOLO又有明显的mAP优势;
- 基于Faster RCNN中的anchor,提出了相似的prior box;
- 加入基于特征金字塔(Pyramidal Feature Hierarchy)的检测方式;
Prior Box生成
如下图所示,对于每一个feature map,都会生成相应大小的prior box,对于每个默认框,我们预测所有对象类别((c 1,c2,…,cp))的形状偏移和置信度。这里省略公式,直接上各种参数
相关参数-生成default box:SSD使用低层feature map检测小目标,使用高层feature map检测大目标
1,feat_layers=[‘block4’, ‘block7’, ‘block8’, ‘block9’, ‘block10’, ‘block11’],
2,feat_shapes=[(38, 38), (19, 19), (10, 10), (5, 5), (3, 3), (1, 1)],
3,Prior_Box_sizes=[(21., 45.), (45., 99.), (99., 153.), (153., 207.), (207., 261.), (261., 315.)],
4,Prior_Box_ratios=[[2, 0.5], [2, 0.5, 3, 1./3], [2,0.5, 3, 1./3], [2, 0.5, 3, 1./3], [2, 0.5], [2, 0.5]],
5,Prior_Box_num=[38x38x4,19x19x6,10x10x6,5x5x6,3x3x4,1x1x4]总共8732个Prior Box
生成相对应的tensor:[(32, 38, 38, 4), (32, 19, 19, 6), (32, 10, 10, 6), (32, 5, 5, 6) ,(32, 3, 3, 4), (32, 1, 1, 4)]
ground truth预处理
在训练阶段,算法在一开始会先将这些default box和ground truth box进行匹配,比如蓝色的两个虚线框和猫的ground truth box匹配上了,一个红色的虚线框和狗的ground truth box匹配上了。所以一个ground truth可能对应多个default box。两个默认框匹配到猫和狗,这些框为正,其余视为负。 模型损失是位置损失(例如平滑L1 [6])和置信损失(例如Softmax)之间的加权和。
将label信息(ground truth box,ground truth category)进行预处理,将其对应到相应的默认框上。根据默认框和ground truth box的jaccard 重叠来寻找对应的默认框。文章中选取了jaccard重叠超过0.5的默认框为正样本,其它为负样本。
损失计算
总体目标损失函数是位置损失(loc)和置信损失(conf)的加权和
1,Lconf (x,c)是前景的分类loss和背景的分类loss的和
2,Lloc (x,l,g)是所有用于前景分类的anchor的位置坐标的回归loss
3,(cx,cy)为补偿(regress to offsets)后的默认框(d)的中心,(w,h)为默认框的宽和高。
前景分类的loss+背景分类的loss[localization loss(loc) 是 Fast R-CNN 中 Smooth L1 Loss,用在 predict box(l) 与 ground truth box(g) 参数(即中心坐标位置,width、height)中,回归 bounding boxes 的中心位置,以及 width、height]
位置回归的loss[confidence loss(conf) 是 Softmax Loss,输入为每一类的置信度 c; 权重项 α,设置为 1]
Hard negative mining
在匹配步骤之后,大多数默认框都是负样本,特别是当可能的默认框数量很大时。这导致了训练期间正负样本的严重不平衡。使用每个默认框的最高置信度对它们进行排序,并选择前面的那些,使得正负样本之间的比率最多为3:1,以代替使用所有的负样本。这导致更快的优化和更稳定的训练。
预测阶段
1,输入图片输出预测框和分数
predictions, localisations, , = ssd_net.net(image_4d, is_training=False, reuse=reuse)
2,预测框与anchor得到真实框位置,并过滤掉低于select_threshold=0.5的框
3,根据分数排序选择前top_k=400个
4,选择非极大值抑制,去掉nms_threshold=0.45的anchor
非极大值抑制