Home

Zehui Chen

06 Jan 2020

Paper Reading 2020.1

Is Sampling Heuristics Necessary in Training Deep Object Detectors?

文章读起来给人一种 “啥?这就写完了?”的感觉。简单来说就是感觉,的确切入点很新颖,however,提出的方法让我觉得有些简陋哈哈哈。不过的确work了,这点是无法否认的,当初kaiming不也是改了initlization的方式让训练work的嘛,可能我只是不大适应叭。

首先作者在RetinaNet上做了一个小实验,就是去掉focal loss是否能让模型训练起来。of course not! 那么有没有啥办法呢?首先需要降低cls loss的权重,不然会出现gradient exploding。其次,作者还观察到一个点,就是background loss会突然drop,因为网络发现如果给background全预测0的时候,loss最低,所以网络会直接优化过去。怎么解决这个问题呢?作者提出通过修改initlization最后一层bias的方式。如果提高最后一层网络的bias,那么最后网络的输出就会在0.01附近,这样就可以减少网络对负样本的attention,即$ b = - log \frac{1 - \pi}{\pi}$, 取$\pi = 1e^{-5}$时取得Retina的最优mAP35.6。然后作者又提到,他发现现在整个网络预测的cls score普遍低于之前的score,所以作者降低了min_det_score到0.005,效果提升至36.4。至此,一个sampling free的object detection model训练完成。也就是说,sampling free主要靠换bias。不知道正常imbalance problem有没有人试过这种方法…我觉得是有点神奇。至于作者后面提出的几个mechanism:optimal bias initialization、guided loss、class adaptive threshold都没有给我耳目一新的感觉,尤其是后两个哈哈哈,我感觉有点拍脑袋想出来的方法。为啥呢,因为后两个也没能解释为啥这样设置,那我就算你超参叭…最后能够在cascade RCNN上提1个点,说明的确是有效的。

这篇文章的确发掘出了我们平时没有注意到的问题,OHEM、focal loss的确很有效,但是没有他们真的就train不了了吗?看起来也不是这样。这也算是在imbalance problem in object detection的路上挺有意思的一次探索吧!

Multiple Anchor Learning for Visual Object Detection

一篇把A放到B上work的文章,而且work的很好…比FreeAnchor还高1个点。那么它究竟是怎么work的呢?

在开始之前我们需要了解什么是Multiple Instance Learning。它其实也是一种监督学习,但是和分类不同的是它的分类是不是per sample给一个label,而是一个bag给一个label。举一个🌰来说,我们要判别,一个视频中有没有出现篮球,那么如果这个视频由一万张图组成,那么如果有一张图中有出现篮球,那么这个篮球就有篮球,反之,如果1w张图中都没有出现篮球,那我们就说这个视频中没有出现篮球。所以我们训练数据的时候拿到的是1个视频和1个label(这个视频中有没有篮球)。

那么这篇文章是如何把MIL用到object detection中的呢?

作者首先提出现在的模型大多都没有将cls score和localization联系起来的,即cls score并不表达regression的回归效果,但是实际上我们希望能够表达,因为这样我们的NMS需要根据cls score来remove冗余的预测框。那么这就会存在可能回归出来的框很好,但是cls score较低,或者cls score很高,但是回归出来的框不是很理想,这些情况都对最后的NMS造成了负面影响。解决这个问题存在两种方法,第一种是给更好的score,也就是IoUNet想做的事情,第二种也就是作者想做的,用更适合的anchor来训练网络。当然这个说法就是FreeAnchor(作者解释是因为MLE不适合用来解非凸问题,所以FreeAnchor也不好)。那么怎么才是好的呢?作者提出了学多个anchor,每次选出top-k score的anchor用来回归,也就是从anchor bag中选若干个anchor进行训练,这样就在优化的过程中保证了给出的anchor是高score高reg,不然就不会被选到。但是这就存在一个问题,如果我每次都训练多个anchor回归一个物体,那么最后inference呢?选谁好?所以作者提出了一个selection depression optimization,是啥呢?通俗的说就是一开始会一个bag里有多个anchor,随着iter增加逐渐减少anchor,直到最后只剩一个。当然对于anchor的选择,作者还提出了另外一个方法,也就是anchor depression,好像是对anchor进行重排?这里没有看太懂…总的来说就是把MIL应用到object detection里的文章,长点还是有的,比RetinaNet涨了5个点。。。还是有点猛嗷。。。至于为啥涨,我觉得是因为第一MIL本身就work,第二给的anchor多了学习的能力增强也会带动AP上涨吧,总是看完之后没有太大感觉,倒是觉得之前自己一直想要把cls score和location解藕,我觉得如果真能把这两个东西搞成线性相关,倒是没有啥节藕的必要了吧,那应该也会接着涨点。

同时刚才想到一个点,就是其实神经网络判别物体类别靠的应该是某些关键点,那么roi如果一开始坐落在某些关键点上,那么给出的cls score可能会很大,但是实际上它reg不一定准,所以可能会导致cls score和localization的mismatch。如果我们能够一定程度上解决这个问题,那应该也能涨点。

Learning from Noisy Anchors for One-Stage Object Detection

这篇文章读了两遍,第一遍是在圣诞节看的,只是粗略的扫了一遍,因为之前的一些实验突然想起来这篇文章,跟zz讨论了一下label assignment的问题,就想起来这篇文章。今天跑模型的时候就抽空又把这篇文章重新读了一遍。其实很简单的一篇文章,但是形式的确挺优雅。

出发点就是对于卡IoU来给anchor assign 1/0的方法实际上是不够好的,因为这样会引入noisy,因为明显GT IoU0.55和 GT IoU0.95的anchor不应该是一种anchor。那如何降低这种noisy呢?两种选择:第一种就是不用卡IoU的方式来定义anchor,第二种就是reweight学习的权重,对于有noisy的anchor就少点权重。

那么怎么从这两点来解决noisy的问题呢?这篇文章首先提出了一个cleanliness score,首先它应该能够作为一种表征回归的难易或者这个anchor好坏的东西,其次应该能够作为一种reweight的参考。综合考虑这两点,作者把classification和localization两部分结合生成了cleanliness score: 其中 loc_a 为 location accuracy, 即为与GT的IoU, cls_c为cls分支的score。这里作者提到对于每个GT只取它附近的top k计算cleanliness score。也就是其他地方的anchor的cleanliness都取0。

有了cleanliness score怎么使用呢?首先把它作为一种新的label,而非0/1。那么对于RetinaNet的focal loss就可以改写为 这样cleanliness score实际上被作为一种soft label进入了我们的loss计算中,这在某种程度上其实是算改变了定义label的方式。其次,还需要reweight 我们每个anchor,对于noisy anchor给的权重就小一点。这个reweight的coef呗定义为 然后用 $r$ 去penalize regression分支的smooth l1 loss。所以最后的形式就变成了 最后作者还做了一个实验就是cls和loc是否存在很好的联系,即对于高cls score,它与GT的IoU是不是也比较高。这样就可以保证在NMS阶段能够得到更好的效果,似乎的确是有点效果的。

对于label assignment的问题,因为最近还在做Knowledge distillation的东西,所以其实teacher给出来的label是否也可以作为一种新的label定义方式呢?因为通过teacher给出的label实际上也是一种更适合学习的神经网络的对label的定义方式?

End of Post
at 07:27

scribble