一、SSD损失函数
SSD的损失函数与region proposal方法有个明显的区别,在于SSD并不是针对所有的检测器计算loss。SSD会用一种匹配策略给每个检测器分配一个真实标签(背景为0,前景为对应的物体类别)。指定的标签为前景的预测器称为正样本(正样本全部计算loss)。标签为背景的预测器是负样本,并不是所有的负样本都用来计算loss(原因是每张图片中负样本的数量远远多于正样本,如果全部计算loss,则负样本的loss会主导整个loss)。此时按照预设正负样本比例(论文中为0.3),挑选出一定数量的负样本.
对于负样本的挑选,论文中称之为"困难样本挖掘",其实就是对负样本按照loss大小排序,选择前n个loss大的负样本进行梯度更新。
综上,ssd的最终loss就是挑选的正负样本的总loss。
1.匹配策略
这部分代码在utils.py的match函数中
论文中的说法是分为两步:
- 1是先将真实标签框分配给iou最大的default box,确保每个标签至少有一个default box可以匹配(但是实际上并不能保证,因为可能出现两个物体都和同一个默认框iou最大,此时不可能给一个框匹配两个标签)。
- 匹配默认框与真实标签iou高于阈值(0.5)的默认框,也就是说只要默认框和哪个ground truth的iou大于0.5,就给这个默认框分配该ground truth(实际上中的做法是如果一个默认框和两个ground truth的iou都大于0.5,则选择iou最大的那个ps:选择先碰到的也可以)
2. 损失函数
总体目标损失函数是位置损失(loc)和置信损失(conf)的加权和: