Overcoming Classifier Imbalance for Long-tail Object Detection with Balanced Group Softmax
https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/2006.10408.pdf
深度学习中的长尾问题一直是很有挑战性的任务,长尾效应本质上就是数据类别不均衡导致少部分类占大多数样本,而大多数类只有小部分样本,在数量分布图上呈现出长长的尾巴的现象。一般的解决办法是人工平衡类别,比如COCO和PASCAL VOC。但是实际情况下,数据的分布往往都是长尾的,所以这是一个需要解决的问题。
现有方法包括:采样、损失函数权重调整以及迁移学习。
这篇文章认为,一般的检测模型都对样本多的类充分建模,而对样本少的类建模不足,甚至会抑制样本少的类的拟合。这篇文章提出了balanced group softmax,调整head(多的)和tail(少的)类的训练,而不需要对少的类上采样。
首先作者将检测框架(Faster RCNN)的特征表示和分类模块进行了解耦,发现不同类别对应的分类器的权值严重失衡,其中低概率类别被激活的机会很少。
具体到Fig1,可以看到,对于COCO这种比较均衡的数据集,除了类别0(也就是背景)比较多以外,其他都是相对均衡的,包括检测出的实例数目和对应的权重都是稳定的(接近水平)。但是在LVIS里面,长尾效应就很明显了,能检测出的实例数随着类别的不同急剧变化,对应的权重也是一路走低。## 合理的创建标题,有助于目录的生成
这篇文章提出了BAGS模块,把实例数相近的类别放在同一组softmax, 单独处理具有不同实例数的类别,可以有效地缓解头类优于尾类的问题。
由于每一组训练缺乏不同的负例,因此产生的模型存在太多的误正(false Positve)。因此,在每一组中又增加了一个类别others,并将背景类别作为一个单独的组引入,可以减轻头类对尾类的抑制。
图中可以看到COCO的每一类都有大概1000到10000个实例,至少也在100的量级,权重参数在(0.75到1.25)平衡。但是LVIS在tail的一些类上,权重到了0,实例数量也在10这个数量级。
所以,在softmax计算中,尾类的预测分数会先天低于头类,并且在与头类的proposal进行竞争后,尾类被选择的可能性较小。这就解释了为什么当前的检测模型在尾类上经常检测不出。
核心就是类别分组,在这篇paper里,分了4组, 大概就是这样:
在每一组再加上一个背景类别,记做
。g0就用sigmod,因为就他自己嘛。对于一个bk(前面说过,就是proposal),他的label是c,那么有两个label会激活,分别是g0和gn,g0看她是不是背景,gn看她是不是第n个group的一类。
但是,在测试期间,对于一个建议,所有组将被用来预测,因为它的类别是未知的。因此,每一组至少有一个类别会得到较高的预测分数,很难决定应该采取哪一组的预测,导致大量的误报。
为了解决这个问题,作者在每个组中添加了一个类别others来校准组之间的预测并抑制假阳性(false positive)。对于g0之外的gi,他的others类别应该是指的非此group内标签的其他标签。g0中的others则表示其他所有前景标签。
这样,在预测的时候,
,也就是C个类别,1个背景,N个组,1个g0。在计算softmax的时候就分开,先算每一组的,再把每一组的加起来。
第n个group中类别 j 对应的概率,注意,类别 j 在N+1个group中都有一个对应的概率,在含 j 的group中是 j ,在其他group中就是others。
我感觉这里是不是打错了,应该是
。
y就是每一个group的GT,在含 j 的group中是 j ,在其他group中就是others。
当加入了上述的others类别后,每组中others类别又会成为一个数量绝对多的类别。对于g0,因为背景样本也很多,所以others就是其他所有前景标签。对于其他的group,会从所有的others里面随机采样m个样本,
,一般β取8。 N(i)表示当前批处理中类别i的实例数目。
也就是说每一个训练的batch里面,others的数量都是差不多的。
这部分存疑,不太理解。
推理阶段:
先生成
,然后分组计算softmax,除了g0,其他组的others都忽略。然后把每一个组softmax得到的概率值按照类别的CID进行排序。对于g0组,p0代表当前的proposal是前景的概率,最后的框的概率就是
(前景概率×分类概率)。这个概率送入下一阶段(一般是NMS吧)进行进一步处理。
简单来说就是分开来softmax,将尾类聚合到一起,直到和头类数量相匹配。