样本不平衡 分类 难分样本 hard example OHEM

本文探讨了样本不平衡问题及其解决方案,包括欠采样、过采样等数据层面的方法,以及阈值移动、代价敏感学习等模型层面的策略。此外,还介绍了处理难分样本的技术,如focal loss及ScreenerNet等。

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

样本不平衡问题

  如在二分类中正负样本比例存在较大差距,导致模型的预测偏向某一类别。如果正样本占据1%,而负样本占据99%,那么模型只需要对所有样本输出预测为负样本,那么模型轻松可以达到99%的正确率。一般此时需使用其他度量标准来判断模型性能。比如召回率ReCall(查全率:样本中所有标记为正样本的有多少被模型预测为正样本)。
从数据层解决办法:
  1、欠采样(undersampling):将模型中类别较多的样例除去一些,使类别样本数量平衡。但此法由于除去一些样本,导致丢失许多信息。一种改进办法是EasyEnsemble,将数量多的类别分成几份,分别与少数类别组合,形成N份数据集。从全局上看信息没有丢失。还有one-sided selection;data decontamination  
  2、过采样(oversampling):增加数量少的类别样本。简单方法使用直接复制、数据增强、添加噪声等。典型算法是SMOTE 算法:通过对少数样本进行插值来获取新样本的。一般过采样的效果要好于前采样。推荐了解:Synthetic Minority Over-sampling Technique(SMOTE:在样本和其相邻的样本之间产生一个样本) ;Ranked Minority Over-sampling (RAMO:通过判断样本周围正负样本的比例来判断其难分程度,根据权重生成少类数据集,再使用SMOTE生成样本);Random Balance (RB:在数据集数量相同的情况下,随机设置正负比例率,生成一堆不平衡数据集);Cluster-based oversampling;DataBoost-IM;class-aware sampling
从模型层解决办法:
  1、阈值移动:在二分类中,若 y/(1-y) > 1,则预测为正例。然而只有当样本中正反比例为1:1时,阈值设置为0.5才是合理的。对于样本不平衡(m+ 代表正例个数, m- 代表负例个数),改进决策规则:若 y/(1-y) > (m+) / (m-) ,则预测为正例。因为训练集是总体样本的无偏采样,观测几率就代表真实几率,决策规则中 ( (m+) / (m-) ) 代表样本中正例的观测几率,只要分类器中的预测几率高于观测几率达到改进判定结果的目标。
  2、代价敏感学习:在医疗中,“将病人误诊为健康人的代价”与“将健康人误诊为病人的代价”不同。通常,不同的代价被表示成为一个N×N的矩阵Cost中,其中N是类别的个数。Cost[i, j]表示将一个i 类的对象错分到j 类中的代价。代价敏感分类就是为不同类型的错误分配不同的代价,使得在分类时,高代价错误产生的数量和错误分类的代价总和最小。
其他方法:
  1、One-class classification单分类,针对极端不平衡分类问题效果不错。
  2、融合上述方法:EasyEnsemble ; BalanceCascade ;SMOTEBoost;two-phase
training(现在平衡数据集上预训练网络,然后在不平衡数据集上fine-tuning最后输出层)
更多信息

难分样本问题

  个人感觉难分样本指的是模型对某个样本学习困难,难以学得其特征。而数据不平衡会导致某一类别在模型中学习迭代次数较少,逐渐成为一种难分样本。
一般解决办法:
  1、focal loss:通过模型预测的概率pt,使用(1-Pt)来代表样本难分程度。可以理解为模型对某个样本预测属于其真实label的概率越高,则说明该样本对此模型比较容易学习,反之则难分。
  2、《ScreenerNet: Learning Self-Paced Curriculum for Deep Neural Networks》论文提出一个附加网络来帮助主网络区分样本难易程度。
  3、《Fine-tuning Convolutional Neural Networks for Biomedical Image Analysis》论文通过对一张图像进行数据增强生成多张图像,然后使用模型预测每张图像的概率。根据多张相同label的增强图像的概率分布区分其样本难易程度。
  4、《OHEM: Training Region-based Object Detectors with Online Hard Example Mining》论文提出先使用模型输出概率,据此选出部分难分样本,然后根据这些样本,更新网络参数。

OHEM:
这里写图片描述
上图绿色和红色分为两个网络但共享权限,通过将提取的RoI传入绿色的只读网络(只进行forward),计算出每个RoI的loss。根据loss排序(可使用NMS)选出部分样本,再输入红色网络(进行forward和backward)学习并进行梯度传播。文中提出另一种办法,在反向传播时,只对选出的样本的梯度/残差回传,而其他的props的梯度/残差设为0。但容易导致显存显著增加,迭代时间增加。

《Fine-tuning Convolutional Neural Networks for Biomedical Image Analysis》中
这里写图片描述
这里写图片描述
提出首先对一张图像做数据增强,生成一个batches图像,由于这些图像同属一个类别,按理模型预测的结果应该近似,但如果模型预测的不理想,则一定程度上说明图像比较难分。上公式R用于计算图像的难分程度。其思想就是对一张图像的多种变化后进行预测,输出loss后计算样本难分度。focal loss其实就是一种简版,直接根据输出概率计算难分。

ScreenerNet:提出附加网络来输出样本权重,使用该权重与主网络输出结合对主网络参数进行更新。同时使用主网络输出和附网络输出来更新附网络参数。(图中数字为算法运行步骤)
这里写图片描述
值得注意是在没有label情况下,对附网络的目标函数的设定:
这里写图片描述

### YOLOv8中的难易样本处理机制 在YOLOv8中,为了有效区分和处理同难度的训练样本,采用了动态分配策略。这种策略能够根据训练过程的同阶段以及样本的具体特点来调整权重。 #### 动态权重调整原则 在训练初期,由于模型尚未充分学习到特征,对于正负样本之间的差异识别能力较弱。此时应给予那些容易被错误分类样本更高的关注度,即赋予更大的损失函数权重[^1]: ```python if epoch < initial_epochs: hard_sample_weight = higher_value else: hard_sample_weight = lower_value ``` 随着训练深入,模型性能逐步提升,对大部分简单样本已经具备较好的判别力。这时应当适当降低困难样本的影响程度,转而更多地强化相对简单的案例的学习效果,从而实现全局优化目标: ```python for sample in training_set: if is_hard_example(sample): loss *= decreasing_factor elif is_easy_example(sample): loss *= increasing_factor ``` #### 基于指标的自适应调节方法 除了基于固定规则外,还可以利用诸如精确度、召回率或是特定层面上的表现作为反馈信号,实时监控并据此微调各类样本所占比例或影响力度。这种方法使得整个系统能更灵活应对各种复杂场景下的需求变化. 通过上述措施,在YOLOv8框架下实现了针对同类型训练实例的有效管理与合理配置资源的目的,进而提高了整体检测精度及泛化能力.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值