Posts 2D_Detection-Loss
Post
Cancel

2D_Detection-Loss

前言

本文主要简单谈谈深度学习中常用的Loss函数: 从原理和应用两个方面介绍

参考资料: 深度学习-Loss函数 AI初识境

详细介绍

主要从应用领域维度进行介绍:

  • 分类任务:如交叉熵损失/KL散度/折页损失等
  • 回归任务:如L1/L2损失等
  • 检测任务:主要是由分类损失和回归损失两个部分组成,但是基于检测任务进行了优化

分类任务Loss

Cross Entropy Loss

交叉熵损失为分类任务中最为常用的损失函数,交叉熵的关键定义为:

\[y_i * log(1-p_i)\]

其中,$y_i$ 表示为label值,$p_i$ 表示为预测值概率。对于二分类,$y_i$ 为0/1;对于多分类则为one-hot变量(仅gt值为1),即只会得到预测的gt值的损失。

DL中一般会通过softmax/sigmoid转换为概率分布后通过交叉熵计算损失,如torch.nn.CrossEntropyLoss

KL散度

KL散度的作用在于衡量两个分布的相似度,KL散度定义为:

\[KL散度 = 信息熵 - 交叉熵\]

其中信息熵表述的是正确值(GT)的数据分布:$y^{gt} log(y^{gt})$ , 而交叉熵表述的是正确值和预测值之间的熵分布差异: $y^{gt} log(y^{pre})$ 。对于信息熵来说,其本身可以认为为定值,所以对KL散度的优化问题便可以转化为交叉熵的优化问题。

KL散度最常用的场景是 Distillation 中对 soft-label 使用的 KL divergence ,主要用于衡量两个 Teacher ModelStudent Model 分布的差异。

其展开后第一项为原始预测分布的熵,为固定项,可以消去;第二项为 $-qlog(p)$ ,即 cross_entroy ,区别在于这里得到的是 loggits 输出为连续概率。

Hinge Loss

Hinge Loss分布如下:

img

其公式如下:

img

其核心在于区别简单的0-1损失,hinge loss需要正负例之间要有足够的区分度:margin值要足够大,是更严格的损失函数。

指数损失

指数损失定义如下:

\[L(Y, f(X)) = exp(-Yf(X))\]

其中,$Y$ 为预测结果,$f(X)$​​ 为预测概率值 应用场景: Adaboost

回归任务Loss

MAE Loss

MAE,全称为“Mean Absolute Error”,为平均绝对值误差,即L1 Loss,其定义如下: img

该loss适合 模型输入于真实值误差如何拉普拉斯分布(u=0, b=1) ,拉普拉斯分布结果如下: img

MSE Loss

MSE,全称为“Mean Squared Error”,为均方差误差,即L2 Loss,定义如下:

img

该loss适合 模型输出于真实值误差符合高斯分布情况 ,原理为 最小化均方差损失函数于极大似然估计本质上一致的

Smooth L1 Loss

SmoothL1 Loss相较于L1 Loss在x=0时仍然可导,采用的方式是abs(x)<1时采用二次函数进行过渡,可参考:Smooth_L1_Loss_Pytorch ,定义如下:

img

Faster-RCNN中使用Smooth L1 Loss,作者认为其对smooth L1 loss让loss对于离群点更加鲁棒,即:相比于L2损失函数,其对离群点、异常值(outlier)不敏感,梯度变化相对更小,训练时不容易跑飞。

Huber Loss

Huber Loss为MSE和MAE Loss的组合,其原理是在误差接近0时,使用MSE,保持可导,梯度稳定;在误差较大的情况下使用MAW,降低异常点影响,维持训练稳定。其定义如下: img

检测任务Loss

Focal Loss

Focal Loss出自2017 CVPR:Focal Loss for Dense Object Detection,出自何凯明团队,在目标检测领域应用极广,重点解决了检测任务中 正负例样本不均衡 的现象。其函数定义如下:

img

其中,p表示为预测的置信度。Focal Loss的作用在于能够增大hard case的loss,从而在训练过程中更多得关注困难case,提高模型性能,同时也能加快收敛。Focall Loss是在交叉熵损失上的延伸,两者的区别如下:

img

QFocal Loss

QFocal Loss出自Generalized Focal Loss: Learning Qualified and Distributed Bounding Boxes for Dense Object Detection 其出发点在于:

随着One-Stage检测算法的不断发展,对于检测任务,原始的分类和回归损失分离的方案逐渐显露出一些弊端,同时一些描述定框质量的方法:如centerness/IoU Loss,也带来一些思考:如何将描述框准度和分类损失进行结合,QFocal Loss便是将定框质量和分类损失进行了结合。 QFocal Loss于Focal Loss的区别在于:Focal Loss描述的是离散类别的损失,QFocal Loss描述的是连续Label上的损失(定框质量),其定义如下:

img

IoU Loss

IoU Loss为检测任务中常用的回归Loss,于传统的L1/L2 Loss相比,IoU Loss于检测任务最终的评估方式对应,能够更好的描述预测框的精度,且具备尺度不变性,通常有更好的性能表现,其基本定义如下:

img

其中,A,B分别表示检测框和GT框。但是IoU损失存在一些问题:

  • 无法描述不相交的框的损失
  • 无法精确描述框的交互情况:检测框和GT框在不同位置,其IoU可能是一致的。

在IoU Loss的基础上,后续也有一些优化的Loss:

  • GIoU Loss:引入外接矩形,不仅仅关注了重叠区域,也关注了非重叠区域,添加了不相交的框的loss描述。
  • DIoU/CIoU Loss:DIoU Loss对框间的各点距离进行了更细致的建模,收敛更快。CIoU Loss引入长宽比的相似度。

各Loss应用于YOLOv3上的效果如下:

img

This post is licensed under CC BY 4.0 by the author.