YOLOv4使用的完整损失函数是什么?
YOLOv4 完整损失函数说明
YOLOv4的损失函数在YOLOv3的基础上优化了定位损失分支,整体由3个独立分支的损失加权求和组成,具体如下:
1. 定位损失(边界框回归损失)
使用CIoU损失替代了原有YOLOv3的均方误差损失,同时考虑了预测框与真实框的重叠度、中心点距离、宽高比一致性三个核心维度,解决了传统IoU损失在框无重叠时梯度消失、回归方向不精准的问题:
- 计算公式:
L_ciou = 1 - IoU + ρ²(b, b_gt)/c² + αv - 参数说明:
- ρ:预测框中心点
b与真实框中心点b_gt的欧氏距离 - c:可同时包裹预测框和真实框的最小外接矩形的对角线长度
- α:权重平衡参数
- v:预测框与真实框的宽高比一致性度量值
- ρ:预测框中心点
2. 置信度损失
使用二元交叉熵损失计算,用于判断锚框内是否存在目标,训练过程中会对负样本做难例挖掘,将正负样本比例控制在1:3左右避免样本失衡:
- 计算公式:
L_obj = -λ_obj * [y_gt * log(y_pred) + (1 - y_gt) * log(1 - y_pred)] - 参数说明:
λ_obj:置信度损失的预设权重系数y_gt:真实置信度标签,锚框内有目标为1,无目标为0y_pred:网络输出的置信度预测值
3. 分类损失
同样使用二元交叉熵损失计算,每个类别独立做二分类判断,无需使用softmax归一化,支持单框多标签的检测场景:
- 计算公式:
L_cls = -λ_cls * Σ [y_cls_gt * log(y_cls_pred) + (1 - y_cls_gt) * log(1 - y_cls_pred)] - 参数说明:
λ_cls:分类损失的预设权重系数- 求和范围覆盖所有检测类别
y_cls_gt:对应类别的真实标签,存在该类目标为1,否则为0y_cls_pred:网络输出的对应类别预测概率
总损失
最终模型训练的整体损失为三个分支损失之和:L_total = L_ciou + L_obj + L_cls
实际训练时可根据数据集的具体场景调整三个分支损失的权重系数,官方默认配置下定位损失权重最高,其次为置信度损失,分类损失权重最低。
内容的提问来源于stack exchange,提问作者Gaurav Sharma
相关产品推荐
相关产品推荐

