YOLOv8官方将各类任务(目标检测,关键点检测,实例分割,旋转目标框检测,图像分类)的损失函数封装了在ultralytics\utils\loss.py中,本文主要梳理一下各类任务Loss的大致组成,不涉及到具体的原理。
一、目标检测任务
1.1 class v8DetectionLoss
YOLOv8目标检测任务主要由分类损失
,和矩形框回归损失
(iou loss,DFL loss)组成。
1.2 分类损失
YOLOv8用的多分类损失是N个目标的二元交叉熵损失,而不是一般我们认为的多目标的softmax交叉熵损失。
这里的BECWithLogitsLoss=BCELoss(二元交叉熵)+Sigmoid(激活函数)
这里的分类损失是把N个目标的二元交叉熵损失求和,再取平均
二分类,多分类损失可以参考http://t.csdnimg.cn/y89vH
1.3 矩形框回归损失
YOLOv8用的矩形框损失主要由iou loss和DFL loss组成。
1.3.1 iou loss
iou loss有CIoU,DIoU,GIoU
三种loss可选择
1.3.2 DFL loss
论文:https://ieeexplore.ieee.org/document/9792391
Distribution Focal Loss (DFL)
是在 Generalized Focal Loss(GLF)
中提出,用来让网络快速聚焦到标签附近的数值,使标签处的概率密度尽量大。思想是使用交叉熵函数,来优化标签y附近左右两个位置的概率,使网络分布聚焦到标签值附近。
1.4 loss加权
二、关键点检测任务(姿态估计)
2.1 class v8PoseLoss(v8DetectionLoss)
YOLOv8关键点检测任务主要由关键点相关的回归损失
和obj损失
和通过继承了目标检测任务的分类损失
,和矩形框回归损失
(iou loss,DFL loss)组成。
2.2 关键点损失
关键点的损失主要由各个关键点的obj loss
和pose loss
组成。
2.2.1 obj loss
obj loss也是使用的N个关键点的二元交叉熵之和,表示当前关键点是否存在(可见)。
2.2.2 pose loss
pose loss由每个关键点的预测坐标与gt坐标的L2损失,再除以gt矩形框面积,再除以比例系数计算而得。
2.3 分类损失
参考目标检测任务的分类损失1.2小节,继承的目标检测任务中的分类损失。
2.4 矩形框回归损失
参考目标检测任务的矩形框回归损失1.3小节,继承的目标检测任务中的矩形框回归损失。
2.4 loss加权
三、实例分割任务
3.1 class v8SegmentationLoss(v8DetectionLoss)
YOLOv8关键点检测任务主要由分割相关的损失
和通过继承了目标检测任务的分类损失
,和矩形框回归损失
(iou loss,DFL loss)组成。
3.2 分割损失
分割损失主要是预测分割区域与gt分割区域进行逐像素的计算二元交叉熵损失。
F.binary_cross_entropy_with_logits()
对应的类是torch.nn.BCEWithLogitsLoss,在使用时会自动添加sigmoid,然后计算loss。(其实就是nn.sigmoid和nn.BCELoss的合体)
3.3 分类损失
参考目标检测任务的分类损失1.2小节,继承的目标检测任务中的分类损失。
3.4 矩形框回归损失
参考目标检测任务的矩形框回归损失1.3小节,继承的目标检测任务中的矩形框回归损失。