【目标检测】损失函数:不同损失函数概念及其代码实现

本篇文章介绍目标检测中不同的损失函数概念及其代码实现。目标检测主要任务为实现目标的分类定位,其损失组成如下:

  • 类别/置信度损失(分类任务):BCE,FL,QFL,VFL
  • 位置损失(回归任务):IoU,GIoU,DIoU,CIoU,DFL(分类)

类别/置信度损失

BCE

  二值交叉熵(Binary Cross-Entropy, BCE)是一种应用于二分类任务中的损失函数,用于衡量目标类别预测值实际值之间的差距,其计算公式如下:
B C E ( y , p ) = − y log ⁡ ( p ) − ( 1 − y ) log ⁡ ( 1 − p ) {BCE}(y,p) = - y\log (p) - (1 - y)\log (1 - p) BCE(y,p)=ylog(p)(1y)log(1p)
其中 y y y表示目标的实际类别,值为0或1, p p p为目标的预测类别,值为[0,1],进一步地,BCE Loss可表示为以下形式:
B C E ( p t ) = − l o g ( p t ) {BCE}(p_t) = - log (p_t) BCE(pt)=log(pt)
p t = { p , y = 1 1 − p , o t h e r w i s e   p_t= \begin{cases} p,y=1 \\ 1-p,otherwise\ \end{cases} pt={ py=11potherwise 
针对多类别任务,可通过独热编码将其分解为多个二分类任务的组合再使用BCE Loss。
  BCE在PyTorch中的实现如下所示:

'''
函数实现:
	binary_cross_entropy_with_logits:Sigmoid + BCE
	binary_cross_entropy: BCE
'''
torch.nn.functional.binary_cross_entropy_with_logits(
						input=None,  # 预测值
						target=None,  # 实际标签
						weight=None,  # 对每个样本的损失进行加权
						size_average=None,  # 已弃用
						reduce=None,       # 不使用
						pos_weight=None,  # 正样本的损失加权(长度等于类数)
						reduction='mean'  # 所有样本的损失求平均(mean)或求和(sum)
						)
'''
类实现(调用上面的函数实现损失计算)
'''
torch.nn.BCEWithLogitsLoss(weight,pos_weight,reduction)

Focal Loss

  Focal Loss(FL)由文章Focal Loss for Dense Object Detection提出。Focal Loss在BCE Loss的基础上,通过权重系数实现以下两点目的:

  • 解决正负样本不平衡问题:目标检测任务中存在大量的背景(负样本),实际目标(正样本)占比减少
    B C E ( p t ) = − α t l o g ( p t ) {BCE}(p_t) = - α_tlog (p_t) BCE(pt)=αtlog(pt)
    α t = { α , y = 1 1 − α , o t h e r w i s e   α_t= \begin{cases} α,y=1 \\ 1-α,otherwise\ \end{cases} αt={ αy=11αotherwise 
    其中 α α α用于控制正负样本的权重。
  • 降低易分类样本的权重:使模型训练更加关注于困难样本
    F L ( p t ) = − ( 1 − p t ) γ l o g ( p t ) {FL}(p_t) = -(1-p_t)^γlog (p_t) FL(pt)=(1pt)γlog(pt)
    其中 γ γ γ用于控制难易分类样本的权重, p t p_t pt越大,则该样本越易分类,则对损失的贡献越小。
      结合以上两点,得到最终的Focal Loss公式如下:
    F L ( p t ) = − α t ( 1 − p t ) γ l o g ( p t ) {FL}(p_t) = -α_t(1-p_t)^γlog (p_t) FL(pt)=αt(1pt)γlog(pt)

F L ( y , p ) = − α ( 1 − p ) γ y log ⁡ ( p ) − ( 1 − α ) p γ ( 1 − y ) log

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初初初夏_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值