深度学习 数据长尾问题

文章目录

  • 前言
  • 基本方法
    • 重采样
    • 重加权
    • 更多工作参考
  • 参考

前言

最近忙着工作,上班下班放假时间都被工作沾满了,都没什么时间写博客。今天看了一篇文章万字综述:如何打造自动驾驶的数据闭环?,刚好在跟最近在做的目标检测有关系,在目标检测中常常困扰我一个问题,假设当前我有一万个样本的训练集,训练集中每个样本数量都很均衡,假设有5类,每一类就有2000张样本。现在领导让我添加一类识别,可是只有几百张,如果将新类别的几百张样本加入一万张训练集里面,会不会对原有的类别有影响,或者是会影响新类别的识别。这个问题就是长尾问题。

在传统的的分类和识别任务中,训练数据的分布往往都收到了人工的均衡,即不同类别的样本数量无明显差异。一个均衡的训练样本有很多好处,不仅可以简化了对算法鲁棒性的要求,也一定程度上保障了所得模型的可靠性。但是随着样本中的类别增强,维持各个类别之间均衡就将带来指数增长的采集成本。那如果不刻意地对样本进行人工均衡干预,那么这些数据类别的分布往往如下图所示。如果直接利用长尾数据来训练的分类和识别系统,往往会对头部数据过拟合,从而在预测时忽略尾部的类别。如何有效的利用不均衡的长尾数据,来训练出均衡的分类器就是我们所关心的问题,从工业需求上来说,该研究也将大大地提升数据采集的速度并显著降低采集成本。
深度学习 数据长尾问题_第1张图片

基本方法

重采样

重采样主要是对头部类别的欠采样和尾部类别的过采样。本质都是对不同类别的图像采样频率根据样本数量进行反向加权。其中最常用的策略是类别均衡采样。类别均衡的概念主要是区别传统学习过程中的样本均衡,也就是每个图像都有相同的概率被选中,不论其类别。而类别均衡的核心是根据不同类别的样本数量,对每个图像的采样频率进行加权。

重采样就是已有数据不均衡的情况下,人为地让模型学习时接触到的训练样本时类别均衡的,从而在一定程度上减少对头部数据的拟合。不过由于尾部的少量数据往往被反复学习,缺少足够多的样本差异,不够鲁棒,而头部拥有足够差异的大量数据又往往得不到充分学习,所以重采样也并非是真正完美的解决方案。

关于重采样的方法可以参考:

  1. Decoupling Representation and Classifier for Long-Tailed Recognition, ICLR 2020(代码:classifier balancing)

  2. BBN: Bilateral-Branch Network with Cumulative Learning for Long-Tailed Visual Recognition,CVPR 2020(代码:BBN)
    深度学习 数据长尾问题_第2张图片
    这个图说明,长尾分类的最佳组合来自于:利用Cross-Entropy Loss和原始数据学出来的backbone + 利用Re-sampling学出来的分类器。

  3. Dynamic Curriculum Learning for Imbalanced Data Classification,ICCV 2019

重加权

重加权主要体现在分类的loss上,不同于采样,因为loss计算的灵活性和方便性,很多比较复杂的任务比如物体检测和实例分割等,都更倾向于使用重加权loss来解决长尾分布问题,如weighted loss、focal loss等。

相关文章参考:

  1. Class-Balanced Loss Based on Effective Number of Samples,CVPR 2019(代码:class-balanced-loss)
  2. Learning Imbalanced Datasets with Label-Distribution-Aware Margin Loss,NIPS 2019(代码:https://github.com/kaidic/LDAM-DRW)
  3. Rethinking Class-Balanced Methods for Long-Tailed Visual Recognition from a Domain Adaptation Perspective, CVPR 2020
  4. Remix: Rebalanced Mixup, Arxiv Preprint 2020

更多工作参考

  1. Learning to Segment the Tail, CVPR 2020(代码:https://github.com/JoyHuYY1412/LST_LVIS)
    这篇工作的核心亮点有两处:第一是把学习长尾分布的数据看成是一种增量学习(incremental learning),即我们是优先学会常见物体(头部数据),然后再基于对常见类别的知识,去认知少见的尾部类别。这其实是一种非常接近人类思维的学习方法。这个工作的学习流程如下图,将类别根据出现频率依次排列,并划分为不同的学习阶段,依次从易到难的学习所有类别。
    深度学习 数据长尾问题_第3张图片
    第二个亮点是高效的实例级别重采样(Efficient Instance-level re-sampling)。作为长尾分类的常用方法,重采样在instance-level的数据上却没有重加权来的易于实现。如果一个图片只采样一个实例的话,虽然可以直接将instance-level重采样退化为image-level重采样,但却不够高效。因此基于对数据的观察,我们发现一个物体出现时,往往图片中会同样出现同一类别的其他实例,所以提出了如下高效的实例重采样:
    深度学习 数据长尾问题_第4张图片

  2. Focal Loss for Dense Object Detection, ICCV 2017(代码:https://github.com/clcarwin/focal_loss_pytorch)
    深度学习 数据长尾问题_第5张图片

  3. Equalization Loss for Long-Tailed Object Recognition, CVPR 2020(代码:https://github.com/tztztztztz/eql.detectron2)

  4. Overcoming Classifier Imbalance for Long-tail Object Detection with Balanced Group Softmax, CVPR 2020(代码:https://github.com/FishYuLi/BalancedGroupSoftmax)

  5. Large-Scale Object Detection in the Wild from Imbalanced Multi-Labels, CVPR 2020

参考

  1. Long-Tailed Classification (1) 长尾(不均衡)分布下的分类问题简介

你可能感兴趣的:(#,深度学习,深度学习,机器学习,人工智能)