Home

Zehui Chen

09 Dec 2019

Paper Reading 2019.12

Bridging the Gap between Anchor-based and Anchor-free Detection via Adaptive Training Sample Selection

这篇文章主要argue的一个点就是其实anchor-based和anchor-free本质上是没啥区别的,当然有一个前提条件,就是how to define positive and negative training samples。

这篇文章给了一个实验,也就是RetinaNet和FCOS的先导试验,就是它先把FCOS上的东西基本上都加到RetinaNet上,结果从32.5涨到了37.0。然后现在的RetinaNet和FCOS只有两个区别,一个是如何生成训练样本,一个是是否p redefine anchor。然后当作者把RetinaNet的sampling methods从IoU-based改成Spatial and scale constraints后,FCOS和RetinaNet的表现结果一致了。这就表明其实有没有anchor是不重要的,你从点开始回归还是从框回归,最后并不影响。我觉得这个点发现的挺有意思的。

然后就是作者提出的ATSS了,具体想法就是先找到所有level的possible candidates的positive,然后计算他们与GT的IOU,接着计算mean和var得到对应IoU threshold。最后select对应满足条件的anchor。结果还是挺感人的,retina涨了2个点左右,FCOS涨了一个点多。

最后discussion的时候作者还提到一点,就是每个点有几个anchor在用ATSS的时候并不重要,但是在用IoU的时候还是很重要的。至于原因我觉得可能是IoU定义sample的时候真的就只有IoU作为标准,所以此时多几个准的框会好很多,但是ATSS的时候,是用center来定义的,所以对于同样的center,你出几个anchor结果都是一样的。

Shape-aware Feature Extraction for Instance Segmentation

个人感觉出发点很好的一篇文章,可惜做法实在太水了。。。

其实本质上算是 segmentation-based ROIAlign,因为很多时候我们align feature的时候,因为物体畸形很多地方的feature是无效甚至会 deteriorates后面的分类和regression效果,文中举了一只猫和一只狗在一起的例子,普通的ROI Align把他们两都分成了猫(还是狗)。所以作者觉得在ROIAlign的时候如果能够知道segmentation同时进行ROIAlign,效果肯定会变好(废话)。所以作者的做法真的就是把segmentation的prediction合并到ROIAlign时候的feature map上了… 真xx简单….当然因为我们第一次ROIAlign的时候是没有segmentation的,所以作者说那我们可以像Cascade一样再来一个refine module,把第一次生成的segmentation接给第二次reg和seg的feature map,然后万事大吉。最后结果提了1.5个点左右吧,然后 casscade本来就会再涨0.5个点,所以最后也就1个点…

但是讲道理,那个intuition还是挺好的…

Region Proposal by Guided Anchoring

之前看过一篇Cascade RPN,是将cascade的思想从RCNN放到了RPN中,通过两次iterative的预测RPN的regression,从而得到更好的proposal。这篇GA-RPN实际上是比Cascade RPN更早的一篇文章,主要思想其实也是十分直观的的,首先预测出可能出anchor的点,也就是物体的中心,这部分实际上跟FCOS的centerness有点相似,但是使用这个centerness的方法不一样吧…然后再根据可能出anchor的点预测它的h和w。当然直接预测形状实际上是不合理的,因为他们用的都是同一个CNN得到的feature,而这个时候每个点的感受野都是一样的,为啥能够预测出来不同的anchor的shape呢?所以作者提出了一个Feature Adaption模块,用来根据得到的anchor shape接一个1x1的conv得到offset然后重新过一遍deformable的卷积,这使得得到的proposal考虑到了anchor的shape,也就是feature和anchor的consistancy(feature的形状要和anchor的形状一致)。这里陈恺dalao提到了设计anchor的两条准则,一是alignment,即anchor的中心应该与feature的中心对齐,其次是consistency,即anchor的shape与feature的shape也要对齐。其实这点一直是one stage算法的问题,即one stage一直会存在misalign的问题,因为每个点出的proposal必然会离开生成的proposal,从而降低了生成的proposal的质量。而FCOS之所以使用centerness也是因为只在centerness出anchor避免了feature misalignment的问题。

Feature Selective Anchor-Free Module for Single-Shot Object Detection

首席在一次paper reading让我看的一篇文章,打算最近把anchor free的文章都看一遍,看看能不能对这个方向有点自己的见解。很久很久之前在上Ng的课的时候他就说one-stage会是未来,那个时候我也不懂object detection是个啥,现在想想one-stage的确有超过two-stage的势头,从FCOS到之前那篇ATSS,现在大家都开始在思考two stage的这个宝贝anchor到底有没有必要。FCOS的centerness的确是个好东西,我觉得它从另外一个角度避免了feature misalignment的问题,而并非像two stage通过ROI Align来解决。但是它的感受野依然是一个局限,因为FCOS每个点的感受野,或者说feature的大小都一样,那么为啥有的点可以出大proposal,有的点可以出小propsoal呢?这个就是之前GA-RPN中提到的consisitency的问题。突然想到TridentNet里面用不同的dialated ratio来解决不同size的object检测问题。那么能不能在one-stage中也糅合Tridentnet的思想呢?话说TridentNet还是我刚来的时候看的,待会重新去看看,看看能不能有啥想法。

好了,上面都是废话,现在说一下这篇文章。其实就是点出框,然后回归点到边框的距离。但是实际上这个做法是有挺多问题的,首先是有效范围,FSAF中没有centerness来指导框的回归和分类,所以作者自己定义了只在0.2原始框大小的范围内进行梯度回传,这其实就是在一定程度上避免回归出较远的框。其次由于丢失了anchor这个东西,所以对于instance分配在FPN的哪一个level上就是一个问题,原来大家都是用IoU来进行instance分配到哪个level上的,现在没有了anchor自然就没有办法计算IoU了,那怎么分配呢?作者提出了在FPN上用loss来决定。也即如果容易在那个level回归的话,那么loss肯定比其他level小,那么我们就回传loss比较小的那个分支的loss。不过有一个问题我一直没有搞清楚,就是对于不同level的回归target肯定不一样啊,高level的target肯定要比低level的target要小?那么loss相对来说应该从一开始就低一点?那这样不是所有的都跑去回归高level的target了?还是说都是project到原来size去算loss的?其实我觉得这个选择与初始化有关,应该一开始大家都train,train到后面选择loss最小的那个分支继续训练~ 所以感觉应该还是理解有所偏差,所以之后估计还要自己看看或者问问别人…

RDSNet: A New Deep Architecture for Reciprocal Object Detection and Instance Segmentation

也是出发点很reasonable的一篇文章,考虑的是bbox的regression其实是不合理的,用l1回归这个框不是最直接的方式,因为框本身是根据mask定义出来的,所以reg和cls分支应该结合起来。但是之前像cascade/HTC虽然探索了这部分的问题,但是计算量相当大,本文则是以一种相对较小的开销达到了比较好的效果。

其实结构还是挺好懂的,但是那个metric learning的图画的我看懵了,重读了好几遍才算理清楚…理清楚后发现想法真的很直接,如果你有这个intuition,你也会选择这样做…

首先作者将FPN的object stream和pixel stream给分开了,两边单独管理object和mask。那么这两者如何交流呢?就有了第一个Instance-agnositc to Instance-aware module。主要就是,object分支还多出一个2k x d的representation。干嘛呢?用来做卷积核,来卷pixel stream的图,对于每一个object都卷一次,这样就能train出每一个object的mask了。所以作者认为这是把object level的信息给了mask…emmm 勉强吧 谁知道你object多出的是个啥…然后再根据object level出的框来裁剪我们的mask。为啥要裁呢?不然你train的时候那么大一片区域结果只有那么一小块有效面积,就很难被train好,所以作者就想用bbox出的框把想要的框给裁出来单独训练。但是你一开始的框可能不那么准,所以我们多裁不如少裁,顺便还能带点noisy增加分割的鲁棒性。。。但是我觉得这步真的有点挫…名字起的倒挺好听的,叫from translation-invariant to translation-variant。然后最后一步是通过已有的mask获得新的bbox,即Mask assisted Object Detection模块。然后作者发现直接根据mask来重新裁出bbox效果并不好,尤其是在小物体上表现很差。所以作者把这个问题转化为用贝叶斯来搞,即

这里的$M$就是之前的mask logits,然后作者用一个discrete Gaussian distribution来近似 $ P(X=i)$ , 然后用一个2s+1的卷积核来预测 $ P(m^x_{i-s,…i+s}\vert X=i) $ ,从而保证端到端的训练。

最后的结果也还可以,因为本身这个问题我估计就不是太大。但是我觉得做的还是不够优雅,虽然的确做到了我们想要做的东西…不过我觉得应该还能找到更好的方法来做这个问题,以至于我一直觉得AdaptIS是非常优雅的,可惜单纯的segmentation想要达到好的instance level还是有点难呀~

Revisiting Feature Alignment for One-stage Object Detection

&&

RepPoints: Point Set Representation for Object Detection

两篇放在一起写吧,都是今天看的。之所以一起写是因为两篇的实现非常相似,虽然出发点不同,但是实际上最后结构都差不多,除了一个用点一个用的box,但是最后都变成了使用deformable conv。不过还是觉得知乎上RepPoint也太不友好了…毕竟我觉得AlignDet里的insight Repoint文章提都没提,一口就是一个你是我baseline比的方法,但是实际上不是结构问题,个人觉得AlignDet是从One-stage出发考虑feature alignment的问题,而Reppoints明显是在表达点比bbox好…好了个人吐槽完毕,总的说一下两篇文章。

在说AlignDet之前先讲一下之前提到的Misalignment的问题,其实object detection两个问题,一个是中心点的misalign,一个是shape的misalign。中心点的misalign我觉得centerness应该解决的差不多了,不然FCOS也不会涨那么多..第二个点就是shape的misalign。什么事shape的misalign呢?就是说大物体和小物体的感受野不应该是一样的,这也是one-stage和two-stage的一个区别之一。AlignDet在文章中做了一个实验就是去掉FPN后RetinaNet疯狂掉点但是FasterRCNN只掉了1,2个点。这也体现出One-stage Detector的确需要不同的感受野。为了克服这个问题,AlignDet提出可以先出一个offset来align shape,通过Deformable Conv来进行所谓的ROIAlign,之后就是one-stage的标准步骤了。那么RepPoint呢?主要argue的点在于bbox不是最自然表现物体的方式,虽然它是最简单的,所以他们提出要用点来表示物体。怎么做呢?还是学一个offset,用9个点来表示一个物体,同时把物体的中心作为该物体的预测点。但是很巧合的是,RepPoint也是先出一次Offset之后Align再过one-stage,跟AlignDet里面的做法完全一样,所以RepPoint中的baseline(即跟bbox比)是AlignDet也的确没错啦~但是怎么说呢,我觉得他们两的确是两个出发点,但是最后得到了同样的结构…写到最后,我自己也觉得,好像没啥意思…hhh

End of Post
at 07:27

scribble