一看我的博客,已经整整两年没写文章啦。这几天跑着实验也有些无聊,不如来总结一下整个检测领域的进展,还有我的科研进展
首先,什么是Accurate object detection 呢,顾名思义哈,这里的accurate肯定指的是提高检测框的精准度。可是话又说回来,咱们对这个课题最直接的理解是提高检测框质量,那么这个课题就只能局限于定位子网络了? 非也非也,在我们用localization分支去预测这个物体的box时,咱们还有一个分支,在负责给预测的物体分类,也就是classification分支。可以在图1中看到,前面的backbone和FPN万年不变,后端的网络分为了两个分支,一个做定位,一个做分类,两个分支的结果合二为一,才得到了instance detection的结果。
那么其中存在什么问题呢,最关键的就是两个任务的结果不一致。题外话,在某些综述中编了个名字,把不一致统统叫imbalance问题,俺觉得不妥。这种结果不一致可以用论文中的一幅图展示一下,其中,定位结果很不错的框对应的分类分数很低,有些定位结果都歪了的框嘛,分类分数反而很高。这种不一致会导致一个问题,NMS选框的失败。
NMS之于dense object detection。NMS使dense detector变得可能,一群框挤在一起,我们只要想要的那个。可是NMS并非是一个完美的空间聚类+中心选择算法,它是一个依靠额外的样本分数来对样本进行排序和删减的算法。这里的额外样本分数也是这个算法的输入,也就是咱除了输入localization预测的一堆box,也要输入classification分支预测的分类置信度(是一个probability,是一个(0,1)的值)。
一句话,NMS期望所有的classification预测分类置信度的数值本身代表着localization box样本的好坏。。而传统方法的两个子任务的结果不一致,就导致NMS选出垃圾框。
问题定性分析已经到位,那么定量的展示呢?我们来设计一个实验,让它cover掉所有结果不一致导致的错误,从而看出解决子任务结果不一致问题的理论上线。大白话就是看看这个方向能提多少点呢,值不值得做。首先,我们选择一个训练好的SOTA目标检测器(FCOS+PAA+FOCAl LOSS),然后,我们在测试时引入样本的标签,计算与预测的框之间的IOU,然后给它们排个序,用这个顺序,我们给对应的分类分数进行重分配。这样一套操作下来,分类分数与定位分数的不一致错误已经被人工cover掉了,并且只从标签中引入了顺序信息,同时没有对分类分数的数值分布造成了任何改变,有点类似于一次分数的transport。
我们可以看到,随着排序的框的增多,cover掉的结果不一致越来越多,我们的AP从40.5上升到了70.0,提升了越75%的性能。由此得出第一条结论,结果不一致是一个很大很大很大的坑。
解决途径0:额外分支
比如2018 ECCV的IOU branch,FCOS原文中的centerness
解决途径1:Association Loss
本文的作者认为两个网络之间没有任何的信息交流就是结果不一致的原因,所以我们直接在结果上加入一个L2损失函数,拉近两者之间的差距就行了,结果在FCOS上提升了2.8的AP,但是很遗憾,这个思路是对的,但是性能比centerness branch还差一些
解决途径1+:Warpage Loss\QFL\VFL
这三篇文章并没有将两个分数拉出来训练,反而,将它们融合到了分类损失中去,现在看来,仅仅是定位信息传输进了分类损失中,但并没有利用分类分数去融合定位结果
解决途径2:AP Loss\ Fast AP Loss
解决途径2其实是1的一种好兄弟,在机器学习的推荐领域,有一个叫learning 2 rank的领域,其中的point-wise方法就是解决途径1,而pair-wise的方法就是解决途径2. 可以做的一个事情就是,将整个分类任务看作是一个排序任务,其中解决途径1和途径2是完成排序任务的两种方式。
解决途径3:List-wise Ranking
这是一个还没人做的领域