cross-entropy for one-stage detecor

本文介绍了一阶段检测器中使用的三种交叉熵损失函数:标准交叉熵、平衡交叉熵和焦点损失。详细讨论了它们如何解决正负样本不均衡及易分类样本主导损失函数的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cross-entropy for one-stage detecor


将讲述三种cross-entropy,分别为standard cross-entropy、 balanced cross-entropy、focal loss。


standard cross-entropy


standard cross-entropy认为各个训练样本的权重是一样的,若用p_t表示样本属于true class的概率,则:

standard_CE = -log(p_t)


下图中,蓝色曲线就表示standard_CE.可以看出,对于well-classified样本(预测正确率大于0.6),他们的loss仍然不小,对于yolo/ssd这类one-stage detector,负样本远远多于正样本,而负样本里面绝大多数又是easy example(即容易分类正确的样本)。因此,相比hard example(较难分类正确的样本),easy example的loss在整个代价函数中具有主导作用,从而使得one-stage detector难以对hard example分类正确。


优快云图标

balanced cross-entropy


由于one-stage detecor训练时正负样本数目相差较大,常见的做法就是给正负样本加上权重,给数量较少的正样本的loss更大的权重,减小负样本loss的权重。

balanced_CE = -α_t*log(p_t)
其中,α_t为样本loss的权重

focal loss


提出这种方法的作者【FAIR. ICCV2017 Oral Kaiming He & RBG】发现,one-stage detector的精度差的原因并不在于正负样本数量相差较大,而在于:
正负样本比例极度不平衡,以及损失函数(loss function)主要被easy negative example(容易分类正确的负样本)主导。
利用focal loss训练出的one-stage detector不仅能保持快速的优点,精确度也可以达到与two-stage detector一样的水平。


focal loss依照各个样本分类的分类难度来给定权重,如果某样本的分类正确率较大(easy example),则赋予较小的权重,相反,若某样本的分类难度较大(hard example),则赋予较大的权重。(类似adaboost:增大分类错误样本的采样概率,减小分类正确样本的采样概率)

FL=−(1−p_t)^γ * log(p_t)


由上式可以看出,预测正确率p_t越大,对应的loss越小。当γ=0时,即为standard cross-entropy。


实验发现γ=2时效果最好。当γ一定时,具有同样预测准确率p_t的 easy example,其 focal loss要比standard cross-entropy小100多倍,对于同样预测准确率p_t的hard example,其focal loss比standard cross-entropy最多小4倍,因此,hard example的权重就大大提高。

### Binary Cross-Entropy Loss (BCELoss) 的定义 Binary Cross-Entropy Loss 是一种用于二分类问题的损失函数,在机器学习领域广泛应用。该损失函数衡量的是预测概率分布与真实标签之间的差异程度。对于单个样本而言,如果 \( y \in {0, 1} \),则 BCE 可表示为: \[ L(y,\hat{y})=-\left[y\log(\hat{y})+(1-y)\log(1-\hat{y})\right] \] 其中 \( y \) 表示真实的类别标签(0 或者 1),\( \hat{y} \) 则代表模型给出的概率估计值。 当处理多个训练样例时,则通常会计算所有样例上的平均损失作为最终的目标函数来优化[^4]。 ### 使用场景 此损失函数特别适用于那些输出可以被解释为某个事件发生的概率的任务中,比如垃圾邮件检测、广告点击率预估等。它能够有效地惩罚错误分类的情况,并且随着预测值接近实际值而逐渐减小。 ### 实现例子 下面是一个简单的 Python 函数实现 binary cross entropy loss 计算过程: ```python import numpy as np def bce_loss(y_true, y_pred): """ Compute the binary cross-entropy loss between true labels and predicted probabilities. Args: y_true: Array-like structure containing actual class labels (either 0 or 1). y_pred: Array-like structure with corresponding probability estimates from model output. Returns: float: The computed average binary cross-entropy across all samples. """ epsilon = 1e-7 # To prevent log(0) y_pred_clipped = np.clip(y_pred, epsilon, 1 - epsilon) losses = -(y_true * np.log(y_pred_clipped) + (1 - y_true) * np.log(1 - y_pred_clipped)) return np.mean(losses) ``` 上述代码实现了对给定的真实标签 `y_true` 和预测概率 `y_pred` 进行 binary cross entropy loss 的计算,并返回这些样本上损失值得均值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值