目标检测中的不平衡问题 open issues:Imbalance Problems in Object Detection: A Review

主要是四类不平衡,知乎介绍的很清楚。

https://zhuanlan.zhihu.com/p/82371629

现在说下open issues:

这里作者并没有提出方法,只是跑出来一些疑问,这些疑问是待解决的问题。
在这里插入图片描述

9.1 一般问题:

在这里插入图片描述
先说a: 有两个正样本边界框(与类别不平衡相关),不同尺度(与尺度不平衡相关),损失值(与目标不平衡相关)和IoU(与BB,bounder box 不平衡相关)。
再说b:将a的框稍微向右挪一点,成为b中的另外两个正样本边界框,但是IoU和Loss都改变了。这就导致:1,会有更多的负样本产生(因为离正样本远了一点),这里可以考虑样本类别不平衡的影响,即样本不平衡力的前景后景不平衡;2,scale imbalance,即放缩大小不平衡的影响;3,objective imbalance,个别bounder box会造成较大的loss,这些loss会反过来对整体loss又较大影响,这种错误的影响是不好的;4,这个便宜会导致预测框的分布和真实框的分布不一致。
最后c:再稍微向右移动预测框,预测的标签会发生变化,这就导致:1,更少的正样本和更多的负样本,这就涉及到了困难正样本和困难负样本挖掘,当这个预测框是负样本的时候,就不会受到关注。因为,就会收到类别不平衡(正负样本,前景后景)的影响;2,会导致从相似规模的正样本RoI集合中去除一个的RoI。因此,规模不平衡可能会受到影响;3,同b,objective imbalance,会对loss值造成影响,进而影响边框回归。

9.1.2 如何量化和识别出不平衡

1:一些属性的分布情况。这可能是许多属性的均匀分布,例如类分布。然而,不同的模式可能意味着不同的平衡概念。如OHEM将阈值设置为0.5,小的是负样本,大的是正样本。
2:对于一个任务,他预期的分布是怎样的?注意,期望的分布可能与平衡分布不同,因为以某种方式倾斜分布可能有利于更快的收敛和更好的泛化。
3:如何量化?

9.1.3 正负标签

目前,对象检测器使用基于iou的阈值(可能有不同的值)来标记示例为正或负,对此没有共识。然而,这一点很关键,它对于决定一个样本是否是一个困难样本非常重要。
在这里插入图片描述
如图,蓝色是gt,绿色是bb,如果iou设置成0.5,那么对人和自行车的训练都是误导;其次,因为这绿色框内的人基本都是黑色的,这是很难区分的样本。

9.2 类别不平衡

9.2.1抽样更多有用的样本

最近的研究显示:1、软采样(soft sample)比硬采用(hard sample)要表现的好;2、设置高的IOU有可能比困难正样本挖掘表现更好;3、没考虑到前景与前景的平衡。

9.2.3 Batch-Level上的不平衡

在这里插入图片描述
同一个batchsize里,类别的比例可能与整体数据集的类别比例差别很大。.

9.2.4 Ranking-Based Loss Functions

按照预测框的置信度进行排序,与类别置信度产生了冲突。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是从文件夹读取数据、划分类别和处理不平衡的多类别数据集的 Python 代码示例: ```python import os import random import shutil def make_imbalanced_multiclass_dataset(src_folder, dest_folder, imbalance_ratio): classes = os.listdir(src_folder) for cls in classes: os.makedirs(os.path.join(dest_folder, cls), exist_ok=True) for cls in classes: src_path = os.path.join(src_folder, cls) dest_path = os.path.join(dest_folder, cls) files = os.listdir(src_path) num_samples = len(files) num_samples_to_keep = int(num_samples / len(classes) + imbalance_ratio * num_samples / (len(classes) - 1)) indices_to_keep = set() for i in range(num_samples): if i < num_samples_to_keep or random.random() < num_samples_to_keep / (num_samples - i): indices_to_keep.add(i) for i, file in enumerate(files): if i in indices_to_keep: shutil.copy(os.path.join(src_path, file), os.path.join(dest_path, file)) ``` 这个函数接受三个参数:源文件夹、目标文件夹和不平衡比例。源文件夹包含多个子文件夹,每个子文件夹代表一个类别,其包含该类别的样本文件。函数首先创建目标文件夹的子文件夹,然后根据不平衡比例计算需要保留的样本数量。对于每个子文件夹的样本文件,函数会按上述规则决定是否将该文件复制到目标文件夹的相应子文件夹。 注意,这个函数并没有考虑到数据集的划分,你可能需要在使用时再进行划分。另外,这个函数对于每个类别都是独立处理的,如果你需要处理跨类别的不平衡数据集,可能需要实现一些额外的逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值