SSD网络结构图:
SSD其实和faster-rcnn的RPN思想一样,都是将anchor作为初始bbox,将bboxes回归到正确的GT位置上去(相对于feature map的每个cell的anchor的偏移),预测出的定位信息实际上是回归后的bboxes和回归前的anchor的相对坐标。
1.SSD每层都会生成不同个数的边界框个数,遵循大的特征图预测小的样本,小的特征图预测大的样本。(其实就是在原图的尺度上设置anchor,然后下采样以后,anchor的尺度和原图尺度都一起变化。
SSD的不同之处在于,真实边界框需要被分配给特定的检测的输出。同时对多个层级上的 anchor 计算 IOU,就能找到与 ground truth 的尺寸、位置最接近(即 IOU 最大)的一批 anchor,在训练时也就能达到最好的准确
)。
2.每个层级loss由两个loss组成,一个是分类loss(物体类别得分),回归loss是smooth L1(相对于默认框的坐标偏移loss),包括了w,h的误差。(这在后面的检测变成了三个loss,多了一个误差loss)
3.正样本的选取策略:
1.anchor与所有gt的IOU最大的当做positive
2.IOU>0.5定为positive。负样本则根据置信度排序,(误差越大,置信度越小),按照1:3随机选取。
匹配原则(与yolo的区别):
在Yolo中,ground truth的中心落在哪个单元格,该单元格中与其IOU最大的边界框负责预测它
SSD中首先,对于图片中每个ground truth,找到与其IOU最大的先验框,该先验框与其匹配,这样,可以保证每个ground truth一定与某个先验框匹配。通常称与ground truth匹配的先验框为正样本,反之,若一个先验框没有与任何ground truth进行匹配,那么该先验框只能与背景匹配,就是负样本。一个图片中ground truth是非常少的, 而先验框却很多,如果仅按第一个原则匹配,很多先验框会是负样本,正负样本极其不平衡,所以需要第二个原则。第二个原则是:对于剩余的未匹配先验框,若某个ground truth的IOU大于某个阈值(一般是0.5),那么该先验框也与这个ground truth进行匹配。这意味着某个ground truth可能与多个先验框匹配,这是可以的。但是反过来却不可以,因为一个先验框只能匹配一个ground truth,如果多个ground truth与某个先验框IOU大于阈值,那么先验框只与IOU最大的那个先验框进行匹配。第二个原则一定在第一个原则之后进行,仔细考虑一下这种情况,如果某个ground truth所对应最大IOU小于阈值,并且所匹配的先验框却与另外一个ground truth的IOU大于阈值,那么该先验框应该匹配谁,答案应该是前者,首先要确保某个ground truth一定有一个先验框与之匹配。但是,这种情况我觉得基本上是不存在的。由于先验框很多,某个ground truth的最大IOU肯定大于阈值,所以可能只实施第二个原则既可以了,
4.负样本的选择策略:
对所有的负样本,将每一个GT对应anchor,按照confidence loss进行从大到小排序,挑选loss最大的topk个anchor(误差最大的anchor)。正负样本按照1:3的比例进行挑选。
SSD 的 negative mining 的过程为:
0) 生成default bboxes,每个检测器对应特征图生成的default boxes数目为nn6或nn4;
1)匹配anchor,将每个 default box 与 ground truth 匹配,保证每个ground truth 都能对应多个anchor,避免漏检;
2)衡量anchor,当第 i 个 anchor 被匹配到第 j 个 gt_bbox,那么计算其属于背景类别的 softmax loss 或 cross entropy loss 值;
3) 筛选anchor, 计算完所有default boxes 的分类 loss后,按照 loss 排序,选择 loss 较大且与任意 gt_bbox 之间的 iou 小于 阈值neg_overlap 的样本中的前 3*num_positive 个负样本(保证留下的负样本“够坏”,同时保证1:3的正负比例)。
而后,这正负比为1:3的部分default boxes就是筛选全体default box后剩下的prior boxes,用这些prior box作为参考,对所有预测框其进行分类和回归,进行反向传播更新网络参数,即训练。
5.多尺度测试以后怎么选取最后的测试结果?
将所有的结果合并到一起,使用NMS
—————————————————————————————
一直有个疑问,为什么要正负样本,感觉负样本对loss反传没有作用?
其实正样本对定位有绝对的作用,负样本对分类有反传的效果。所以负样本的选择对分类有关系,回归只与正样本的选择有关。
参考博客:https://blog.csdn.net/Gentleman_Qin/article/details/84403313