yolov5的损失函数包括:
classification loss 分类损失
localization loss 定位损失,预测框和真实框之间的误差
confidence loss 置信度损失,框的目标性
总损失函数为三者的和
classification loss + localization loss + confidence loss
也可以在三个损失前乘上不同的权重系数,已达到不同比重的结果。
在yolov5中的置信度损失和分类损失用的是二元交叉熵来做的,而定位损失是用的CIOU Loss来做的
类别预测(Class Prediction)
在传统的多分类任务中,一般使用的是softmax函数,将预测得分转换为综合为1的概率,就有点二极管那种感觉,不是动物,那就是人,再不行就是背景,就会导致有极强的排他性。
而在yolov3/v4/v5当中,在计算分类损失进行训练时,对每个标签使用二元交叉熵,去替换了softmax函数,降低了计算复杂度,以计算输入特定的标签的可能性,可以输出的标签是行人+儿童这种类型,输出的总分可以大于1。
边界框损失(localization loss)
IoU Loss
早先的对于边界框的损失使用的IoU损失去做的,去看真实框和预测框的交并比,来计算损失。但是会出现一个问题,就是当真实框和预测框不重叠时,IoU值将为0,并不会反应两个形状彼此之间的距离,会造成梯度为0并且无法优化。
GIoU Loss
后来在在CVPR2019时,出现了一个叫GIoU的损失他引入了一个最小包围框的概念。如图
将绿色框A和土黄色框B,完全包围起来,这个框我们称为C框
那么GIoU损失就为,两框的交并比IoU — (|C ÷ (A ∪ B)| ÷ |C|)
但是GIoU也有一些问题:
1.当检测框和真实框出现包含现象(一个完全套住了另一个,没有并集了)的时候GIoU退化成IoU
2.两个框相交时,在水平和垂直方向上收敛慢
DIoU Loss
这时候时又出现了一个DIoU Loss
这时候引入了两框中心点的距离d 和 对角线C 的概念
b和 bgt代表预测框的中心点和gt框的中心点。 ρ2() 代表的是欧式距离,c代表包含这两个框的最小矩形的对角线长度。这样的话,对于包含这种情况,中心点的距离也成为了一个评判标准,也能有一个优化的方向。从而解决了两个框相交时,在水平和垂直方向上收敛慢,这个问题。
原论文中作者给出了训练过程
第一排是 GIoU 第二排是DIoU,中心点的绿框是真实框,这图片可以清楚的看出,GIoU的收敛需要400次,而DIoU只需要120次,而且DIoU收敛的效果更好。原因就是DIoU考虑了两框中心点的距离,当两框中心点的距离为0或接近0时,可以判断是拟合的状态
CIoU Loss
CIoU 又加入了一个长宽比这个条件,比较两个框宽高比的吻合度
最后的αv就是相较于 GIoU增加的部分。
总结
DIoU相比于IoU和GIoU有更快的收敛速度。
CIoU考虑的范围更多,包括了重叠的面积,中心点距离,宽高比。这样的话对于框的回归会更充分,所以Yolov5当中默认的矩形框损失是CIoU Loss。
参考:
DIOU-loss - 知乎