写在前面:本文不详细介绍SSD,只记录一些大体流程,具体细节可见参考1,换用数据集训练SSD可见参考2
参考1:SSD代码细节讲解
参考2:SSD换数据集训练
给定图片如何得到对应的GT
- SSD网络若指定了先验框的minsize和maxsize,则整个图片的所有先验框位置均固定。拿300SSD来说,可以得到8372个位置确定的先验框(存于model_data/prior_boxes_ssd300.pkl)
- 图片所标注的物体位置(真实框)和所属类别(存于2007_train.txt)
- 计算真实框对应的先验框,与这个先验框应当有的预测结果。
【输入:8372先验框和图片标注的信息,输出:assignment(8372, 4+21+8)(4为先验框的位置坐标,21为分类得分,8中4个为偏移量,4个定值[0,0,0,0]为了和SSD的输出形式一致)】
计算图片标注的真实框与所有的先验框的IOU,筛选出比阈值θ1大的先验框,将每个先验框对应的IOU值作为这些具有较大IOU先验框在预测时应该有的得分(即gt),并从中选取出最大的作为真实框的先验框,计算出此先验框与真实框的偏移量,将所有先验框保存至assignment,即为输入进来的这张图片,应该有的预测结果是什么样子的(Groundtruth)
给定图片如何训练网络
- 给定一张图片,输入至SSD网络,输出3个量,所有先验框的位置信息(8372x4),所有先验框对应的偏移量(8372x8,前4个为偏移量,后四个为定值[0.1,0.1,0.2,0.2]),所有先验框对应预测框的分类得分(8372x21)
- 将输出的结果与上一步的assignment存储的gt进行LOSS回归
loss的计算分为三个部分:
1、获取所有正标签的框的预测结果的回归loss。
2、获取所有正标签的种类的预测结果的交叉熵loss。
3、获取一定负标签的种类的预测结果的交叉熵loss。
给定图片通过网络预测
- 同理给定一张图片,输入至SSD网络,输出输出3个量,所有先验框的位置信息(8372x4),所有先验框对应的偏移量(8372x8,前4个为偏移量,后四个为定值[0.1,0.1,0.2,0.2]),所有先验框对应预测框的分类得分(8372x21)。
- 针对每一类别,选出得分大于阈值θ2(0.5)的先验框,再进行NMS去重,保留下较好的先验框,将label、置信度、框的位置进行堆叠存于results,选出topk(200)个先验框作为输出,最后在经过此阈值θ3(0.8)筛选,得到结果
图片标注
推荐使用LabelImg制作