昨天看了一下篇关于长尾问题的文章A Simple and Effective Use of Object-Centric Images for Long-Tailed Object Detection arXiv:2102.08884v1。对于长尾目标问题的处理方法有
- re-weighting, re-sampling,当做类别不平衡问题对待
- 弱监督,半监督方法
这篇文章的方法也可以看做是针对长尾目标的弱监督方法,更多地从数据方向思考。LVIS数据集是scene-centric的,ImageNet是object-centric的。场景中心的数据存在很多长尾目标,而目标中心的数据目标几乎是均衡的,这2个数据集有1025类别重叠,该文就讨论怎么用目标中心数据中相同类别的图片去提高模型在场景中心数据中的精度。
他们的方法
他们要面对这些问题
- 两个数据集的domain gap
- 缺失标注框
- 如何整合两个数据集的训练
他们方法的框架如下
首先,在场景中心数据上训练出一个基础模型,用于在目标中心的数据上产生伪标签; 拼接这些目标中心图片,成为伪场景中心图片,然后在这些图片上finetuun检测器,最后再在场景中心图片上finetune检测器。
这里的拼接生成伪场景标签的操作就是为了应对问题1。拼接就是做mosaic,可以使目标更小,背景更复杂,单图的目标多样。他们尝试了单图中只有单一类别和单图中有多个类别,后者要稍微好一点。
这里的finetune都是所有层都训练,主干也在学习。很重要的一点是用伪场景中心图片finetune时,仅计算分类loss. 他们对比了几种产生伪标签的方法
- (a) 固定框:从中心,四个角 80%面积的区域做框,这5个框都赋予图片的类别
- (b) 新人检测器:使用检测器预测的坐标的类别
- © 检测框+图片类比:使用检测器预测的坐标,但仅留分数最好的那个,并赋予它图片的类别,即ImageNet分类数据中的图片类别
- (d) Localization by region removal (LORE):这个方法很巧妙,是为了解决图片中有多个目标用的。每次遮住一个检测框,看分类模型(Resnet50)该类别分数降低了多少,按这个分数损失从大到小对检测框排序。再按这个顺序遮住检测框,先遮一个再遮,2个,3个,直到分类模型判断这张图片的类别错了。为这些遮住的框赋予图片类别。
不过他们实验结果是固定框效果最好,比LORE好一点点。一来是ImageNet绝大多数是只有一个目标的图片,二来在长尾数据上初识的检测器的定位精度并没有多精确,这也说在伪场景中心数据上finetune只用分类loss的一个原因,另一个原因为了使上述4种方法使用统一的loss训练,可比较。
实验结果
主要的实验结果如下
上表中AP下标r,c,f分别表示rare(1-10images), common(11-100images)和frequent(>100images).主要关注是APr提高而APf不降低,即模型在长尾目标上精度提高,同时不牺牲常见目标的精度。
有个细节值得学习,由于LVIS数据集有的类别在ImageNet上没有,他们写了个爬虫在google上按类别名称和释义搜索为每类爬取了100张图片。按关键词搜索的图片一般是目标中心的。
我的收获
- 面对实际算法项目时,如何运用数据,应当注意数据源的domain gap
- 考虑伪标签的可靠性,可以有选择地使用loss,减少伪标签噪声的影响
- LORE方法在单图多目标的情况下不失为一种稳妥的方法
- 对于长期迭代的项目,弱监督更有实用价值
看不太懂的地方
该文为了证明精度的提高不是简单来自于使用了更多目标中心图片,而是使用它们的方法,用ImageNet中和LVIS验证集重叠的176个类别的精度来比较。没看懂这里的逻辑。