损失计算

YOLOv5的损失主要由三个部分组成:

Classes loss,分类损失,采用的是BCE loss,注意只计算正样本的分类损失。 

Objectness loss,obj损失,采用的依然是BCE loss,注意这里的obj指的是网络预测的目标边界框与GT Box的CIoU。这里计算的是所有样本的obj损失。 

Location loss,定位损失,采用的是CIoU loss,注意只计算正样本的定位损失。
image.png

在源码中,针对预测小目标的预测特征层(P3)采用的权重是4.0,针对预测中等目标的预测特征层(P4)采用的权重是1.0,针对预测大目标的预测特征层(P5)采用的权重是0.4,作者说这是针对COCO数据集设置的超参数。

image.png

对应在loss.py文件中的class ComputeLoss类找到下面代码,修改相应的数值

[loss]
1
self.balance = {3: [4.0, 1.0, 0.4]}.get(m.nl, [4.0, 1.0, 0.25, 0.06, 0.02])  # P3-P7