![e182fac111ee4d4b6d5f2b3c84b7ffd5.png](https://i-blog.csdnimg.cn/blog_migrate/3b415f7f5eafa7527d1552a72048ad8c.jpeg)
Long-Tailed Classification系列之三:
1. (往期) 长尾分布下分类问题简介与基本方法
2. (往期) 长尾分布下分类问题的最新研究
3. (本期) 长尾分布下的物体检测和实例分割最新研究
4. (后续) 一种崭新的长尾分布下分类问题的通用算法
长尾(不均衡)分布下的物体检测和实例分割的研究主要发展于2019年LVIS(Large Vocabulary Instance Segmentation)数据集发布之后,所以仍然是个非常“年轻”的领域。如果看LVIS的引用的话就会发现,这个数据集目前总共才40引用不到(by 2020.7.23),所以这里我就不对方法分类了,直接列举目前我所知道的所有研究。其中大部分研究都是重加权的相关算法,即通过设计loss来均衡头尾类别,这主要是因为在物体检测和实例分割中,重采样相关的研究往往实现上会更复杂,收益却更微薄。
1. 论文名:Learning to Segment the Tail, CVPR 2020
链接:https://arxiv.org/abs/2004.00900
代码:https://github.com/JoyHuYY1412/LST_LVIS
这是我们实验室学妹今年CVPR的工作,摘要图也被我盗来做这个系列的背景图了,所以我就优先介绍吧。也欢迎大家做长尾分类或实例分割的同学多多引用~ 本文大概也是目前我所知道的唯一一个非重加权的长尾实例分割算法了。
这篇工作的核心亮点有两处:第一是把学习长尾分布的数据看成是一种增量学习(incremental learning),即我们是优先学会常见物体(头部数据),然后再基于对常见类别的知识,去认知少见的尾部类别。这其实是一种非常接近人类思维的学习方法。这个工作的学习流程如下图,将类别根据出现频率依次排列,并划分为不同的学习阶段,依次从易到难的学习所有类别。
![c504f282148bdde9e43352f8228b9293.png](https://i-blog.csdnimg.cn/blog_migrate/967ddc993fe6954ae44d446ed653de21.jpeg)
第二个亮点是高效的实例级别重采样(Efficient Instance-level re-sampling)。作为长尾分类的常用方法,重采样在instance-level的数据上却没有重加权来的易于实现。如果一个图片只采样一个实例的话,虽然可以直接将instance-level重采样退化为image-level重采样,但却不够高效。因此基于对数据的观察,我们发现一个物体出现时,往往图片中会同样出现同一类别的其他实例,所以提出了如下高效的实例重采样:
![48c9bb2f97e677cd0d06b17e041fa9df.png](https://i-blog.csdnimg.cn/blog_migrate/09d0d49fff1eb317b12e1de1b454b9f3.jpeg)
2. 论文名:Focal Loss for Dense Object Detection, ICCV 2017
链接:https://arxiv.org/abs/1708.02002
代码:https://github.com/clcarwin/focal_loss_pytorch
Focal Loss虽然不是专门用来解决长尾分类的,但是因为其Hard-Example Mining的特性刚好和长尾分类对尾部数据的欠拟合所契合,因此也可以作为长尾物体检测和实例分割的baseline。其实现为如下的FL公式:
![61b97de6527616c647297543cb978582.png](https://i-blog.csdnimg.cn/blog_migrate/9799a514a5ede3f6737735f7d6815f1b.jpeg)
3. 论文名:Equalization Loss for Long-Tailed Object Recognition, CVPR 2020
链接:https://arxiv.org/abs/2003.05176
代码:https://github.com/tztztztztz/eql.detectron2
这篇文章是2019年LVIS数据集比赛的冠军。其本质也是一种Re-weighting的算法,通过在计算loss时对尾部类别的加权来实现长尾检测和分割。关于这个研究的详细介绍,可以参考论文原作者的知乎回答:https://www.zhihu.com/question/372070853/answer/1082980270
4. 论文名:Overcoming Classifier Imbalance for Long-tail Object Detection with Balanced Group Softmax, CVPR 2020
链接:https://arxiv.org/abs/2006.10408
代码:https://github.com/FishYuLi/BalancedGroupSoftmax
这篇也是一个我非常喜欢的工作。该作者和Decoupling(参考系列文章之二)的作者同时发现了一个相同的现象,即在长尾分布中分类器参数的模长并不是均匀分布的,而是和类别的出现频率成正相关,即head的类会有更高的模长。这其实也是对头部过拟合的一种体现。但不同于Decoupling作者直接对模长归一化,本文的作者采用了按模长量级分类,仅对同一量级的类别logits计算softmax,而不是所有类别一起计算softmax。同时不忘对background类做个特殊处理,单独算为一类。其示意图如下,详细的解读也可以参考知乎回答:https://zhuanlan.zhihu.com/p/158216159
![c308bd335d389b12afdb27042cedf922.png](https://i-blog.csdnimg.cn/blog_migrate/5ab332e559bd79884f0e22ddc932ab1b.jpeg)
5. 论文名:Large-Scale Object Detection in the Wild from Imbalanced Multi-Labels, CVPR 2020
链接:https://arxiv.org/abs/2005.08455
这篇工作也是对softmax做了改进,提出了concurrent softmax,但不同于上文,该工作主要是基于类别间的并发率对loss做了调整。因为传统softmax会在训练时抑制所有非ground-truth类,而当数据不均衡时,很多时候尾部类别很可能是某个头部类别的子类,或者是非常相近的类别,这时候就不该过多的抑制这些类,即便他们不是ground-truth。为了解决这个问题,作者提出了concurrent softmax,对和ground-truth类别有很高并发率(concurrent rate)的类别,给予更少的抑制。concurrent softmax的定义如下:
![bd7bfbed7df88701aef90e6793e40887.png](https://i-blog.csdnimg.cn/blog_migrate/b30b0d56b80f6ce57178d8766b3caccc.png)
其中
(后续)一种崭新的长尾分布下分类问题的通用算法