损失函数改进之Center Loss

本文介绍了CenterLoss的概念及其在深度人脸识别中的应用。通过对比softmaxloss,展示了CenterLoss如何减少类内距离并增加类间距离,从而提高分类性能。

损失函数改进之Center Loss

最近几年网络效果的提升除了改变网络结构外,还有一群人在研究损失层的改进,这篇博文要介绍的就是较为新颖的center loss。center loss来自ECCV2016的一篇论文:A Discriminative Feature Learning Approach for Deep Face Recognition。
论文链接:http://ydwen.github.io/papers/WenECCV16.pdf
代码链接:https://github.com/pangyupo/mxnet_center_loss

对于常见的图像分类问题,我们常常用softmax loss来求损失,关于softmax loss你可以参考这篇博文:softmax,softmax-loss,BP的解释。如果你的损失采用softmax loss,那么最后各个类别学出来的特征分布大概如下图Fig2。这个图是以MNISTt数据集做的实验,一共10个类别,用不同的颜色表示。从Fig2可以看出不管是训练数据集还是测试数据集,都能看出比较清晰的类别界限。

这里写图片描述

如果你是采用softmax loss加上本文提出的center loss的损失,那么最后各个类别的特征分布大概如下图Fig3。和Fig2相比,类间距离变大了,类内距离减少了(主要变化在于类内距离:intra-class),这就是直观的结果。

这里写图片描述

接下来详细介绍center loss。如果你还是不熟悉传统的softmax loss,那么先来看看传统的softmax loss。首先区分softmax和softmax loss的区别,可以看博客:softmax,softmax-loss,BP的解释。下面公式1中log函数的输入就是softmax的结果(是概率),而Ls表示的是softmax loss的结果(是损失)。wx+b是全连接层的输出,因此log的输入就表示xi属于类别yi的概率。

这里写图片描述

那么center loss到底是什么呢?先看看center loss的公式LC。cyi表示第yi个类别的特征中心,xi表示全连接层之前的特征。后面会讲到实际使用的时候,m表示mini-batch的大小。因此这个公式就是希望一个batch中的每个样本的feature离feature 的中心的距离的平方和要越小越好,也就是类内距离要越小越好。这就是center loss。

这里写图片描述

关于LC的梯度和cyi的更新公式如下:

这里写图片描述

这个公式里面有个条件表达式如下式,这里当condition满足的时候,下面这个式子等于1,当不满足的时候,下面这个式子等于0.

这里写图片描述

因此上面关于cyi的更新的公式中,当yi(表示yi类别)和cj的类别j不一样的时候,cj是不需要更新的,只有当yi和j一样才需要更新。

作者文中用的损失L的包含softmax loss和center loss,用参数南木达(打不出这个特殊字符)控制二者的比重,如下式所示。这里的m表示mini-batch的包含的样本数量,n表示类别数。

这里写图片描述

具体的算法描述可以看下面的Algorithm1:

这里写图片描述


### YOLOv11中EIoU Loss和DFL Loss改进详解及实现方式 YOLOv11作为YOLO系列的最新版本之一,在损失函数的设计上引入了EIoU Loss改进的DFL Loss,以进一步提升模型的检测精度和收敛速度。以下是关于这两种损失函数的详细解读。 #### 一、EIoU Loss改进内容及使用方法 EIoU Loss(Extended Intersection over Union Loss)是IoU Loss的一种扩展形式,旨在更精确地度量预测框与真实框之间的差异。相比于传统的IoU Loss,EIoU Loss不仅考虑了重叠区域的比例,还加入了中心点距离和宽高比例的惩罚项[^4]。 - **改进内容**: - EIoU Loss在计算时引入了额外的几何约束,包括中心点偏移和宽高比例偏差。这使得模型能够更快地收敛到正确的边界框位置。 - 其公式可以表示为: \[ EIoU = IoU - \frac{(x_p - x_g)^2 + (y_p - y_g)^2}{(x_p + x_g)^2 + (y_p + y_g)^2} - \frac{(\sqrt{w_p} - \sqrt{w_g})^2 + (\sqrt{h_p} - \sqrt{h_g})^2}{(\sqrt{w_p} + \sqrt{w_g})^2 + (\sqrt{h_p} + \sqrt{h_g})^2} \] 其中,\((x_p, y_p)\) 和 \((x_g, y_g)\) 分别是预测框和真实框的中心坐标;\(w_p, h_p\) 和 \(w_g, h_g\) 分别是预测框和真实框的宽度和高度[^4]。 - **实现方式**: 在YOLOv11中,EIoU Loss的实现主要通过以下代码完成: ```python def e_iou_loss(pred_boxes, target_boxes): cx_p, cy_p, w_p, h_p = pred_boxes.unbind(-1) cx_t, cy_t, w_t, h_t = target_boxes.unbind(-1) # 计算中心点距离 rho2 = ((cx_p - cx_t) ** 2 + (cy_p - cy_t) ** 2) wh_union = (w_p + w_t) ** 2 + (h_p + h_t) ** 2 center_penalty = rho2 / wh_union # 计算宽高比例偏差 w_diff = torch.abs(w_p.sqrt() - w_t.sqrt()) h_diff = torch.abs(h_p.sqrt() - h_t.sqrt()) wh_penalty = (w_diff ** 2 + h_diff ** 2) / (wh_union / 4) # 计算IoU部分 iou = compute_iou(pred_boxes, target_boxes) return 1 - iou + center_penalty + wh_penalty ``` #### 二、DFL Loss改进内容及使用方法 DFL Loss(Distribution Focal Loss)在YOLOv11中得到了进一步优化,主要用于处理目标检测中的分类不平衡问题,并提高小目标检测的性能[^5]。 - **改进内容**: - DFL Loss的核心思想是将边界框的回归问题转化为分布学习问题,即将每个边界框的坐标视为一个离散的概率分布[^5]。 - 在YOLOv11中,DFL Loss通过引入更精细的分布建模,增强了对困难样本的学习能力。具体来说,模型会学习一个分布向量,该向量表示边界框坐标的概率分布,而不是直接回归具体的数值。 - 改进后的DFL Loss公式为: \[ DFL = -\sum_{i=1}^{N} p_i \log(q_i) \] 其中,\(p_i\) 是真实分布,\(q_i\) 是预测分布,\(N\) 是分布的维度[^5]。 - **实现方式**: 在YOLOv11中,DFL Loss的实现如下: ```python def dfl_loss(pred_dist, target_dist): # 将预测分布转换为softmax形式 pred_prob = pred_dist.softmax(dim=-1) # 计算Focal Loss loss = -(target_dist * (pred_prob + 1e-8).log()).sum(dim=-1).mean() return loss ``` #### 结合EIoU Loss和DFL Loss的整体框架 在YOLOv11的目标检测任务中,最终的总损失由分类损失、矩形框回归损失(包括EIoU Loss和DFL Loss)共同组成[^6]。其公式可以表示为: \[ Loss = \lambda_{cls} \cdot BCE_{cls} + \lambda_{box} \cdot (EIoU + DFL) \] 其中,\(\lambda_{cls}\) 和 \(\lambda_{box}\) 分别是分类损失和矩形框回归损失的权重系数[^6]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值