论文名称:Region Proposal by Guided Anchoring
作者: Jiaqi Wang \ Kai Chen \ Shuo Yang \ Chen Change Loy \ Dahua Lin
论文地址:https://arxiv.org/pdf/1901.03278.pdf
代码:目前未公开
发表年份:CVPR 2019
anchor机制是现代目标检测的基石,然而自Faster R-CNN中提出它以来,anchor的生成方式就一直是人为事先设定它的shape(scale/rotio),然后依据卷积生成的特征图在原图上枚举出所有的anchor box。这种传统的anchor生成方式会有两个问题:
F I F_I FI是图像的特征映射(feature map),它的宽高分别是 W , H W,H W,H。本文是对多个feature-map做了所谓的“Guided anchoring”操作。
anchor的目的是找到出现在一张图像中的前景物体,如果从统计学角度来看,可以用条件概率公式来表示__前景物体在一张图像中的出现__: p ( x , y , w , h ∣ I ) = p ( x , y ∣ I ) ∗ p ( w , h ∣ I , x , y ) (1) p(x,y,w,h|I)=p(x,y|I)*p(w,h|I,x,y) \tag{1} p(x,y,w,h∣I)=p(x,y∣I)∗p(w,h∣I,x,y)(1) 这里 I I I表示一张图像, x , y , w , h x,y,w,h x,y,w,h代表前景物体的在图像中出现的空间位置中心点坐标和它的宽高。
(下面所述的“物体”与“前景物体”是一个概念)
并且作者通过观察发现,①物体在图像中并不是均匀分布的,②物体的shape与图像的内容、物体在图像中所处的位置以及它的几何结构密切相关。那么可以用这两种现象来解读公式(1):
这两种解读,翻译到anchor设计上就是:
基于这两种思想,作者设计出Fig1中红框中的“anchor generation”。Anchor的生成由两个分支构成,location分支,用来确定中心点,shape分支用来确定location-dependent的shape。
本文中每个anchor center只预测一个anchor,即对于feature-map上的每个像素位置只有一个anchor box,那么应该一共有 H ∗ W H*W H∗W个,本文使用得分制来确定anchor box的有效(正样本)性,对每个像素位置的 ( x , y ) (x,y) (x,y)有一个得分 S l o c S_{loc} Sloc,按照公式(1)的思想,应该是 ( x , y ) (x,y) (x,y)决定 w , h w,h w,h,在预测anchor box时,首先通过 S l o c > T h r e a s h o l d S_{loc}>Threashold Sloc>Threashold来筛选出正样本,然后这些正样本位置 w , h w,h w,h被确定为有效,其他位置被当做负样本剔除掉。这样每个anchor box的 ( x , y , w , h ) (x,y,w,h) (x,y,w,h)就确定了。
location分支是对公式(1)中 p ( x , y ∣ I ) p(x,y|I) p(x,y∣I)的实现。它的输出是 S l o c S_{loc} Sloc,一个 H ∗ W ∗ 1 H*W*1 H∗W∗1的矩阵块,对应于 F I F_I FI每个像素位置的可能出现有效anchor box的可能性得分。
location分支用一个简单网络 N L N_L NL来实现,它以 F L F_L FL为输入,经过一个conv1x1和sigmod,得到结果 S l o c S_{loc} Sloc,然后通过 S l o c > ϵ L S_{loc}>\epsilon_L Sloc>ϵL筛选有效anchor。虽然更复杂的结构可能使得结果更准确,但是作者认为这种结构可以更好的平衡速度和准确性。
这种网络结构可以看做是一个__二分类__问题,那么在训练时也就可以用二分类的方法做训练,虽然已经剔除了大量负样本,但是正负样本比例仍然差别很大,所以仍然使用Focal Loss。
shape分支是对公式(1) p ( w , h ∣ I , x , y ) p(w,h|I,x,y) p(w,h∣I,x,y)的实现。它的输出是一个 H ∗ W ∗ 2 H*W*2 H∗W∗2的矩阵块, H ∗ W H*W H∗W就是对应于feature-map的每个位置, 2 2 2是对应于参数化anchor box的 w , h w,h w,h,之所以参数化,是因为 w , h w,h w,h的实际值的范围比较大(0-1000),如果直接预测,效果差,所以使用公式(2)把他们参数化: w = σ ∗ s ∗ e d w , h = σ ∗ s ∗ e d h (2) w=\sigma*s*e^{dw},h=\sigma*s*e^{dh} \tag{2} w=σ∗s∗edw,h=σ∗s∗edh(2), σ \sigma σ是个超参数,经验值取8, s s s是anchor box步长。在预测时只要预测 d w , d h dw,dh dw,dh就可以了,这样就把要预测值的范围从[0,1000]转为了[-1,1]。
shape分支用一个更简单网络 N S N_S NS实现,它也以 F I F_I FI为输入,直接用一个conv1x1就得到最终结果,,,,,。
shape分支可以看做是一个回归 w , h w,h w,h值的问题。
虽然用上面的办法生成了anchor box,但是却不能直接使用,原因是上面的办法遵循了anchor生成规则的第一条-feature-map每个像素位置与anchor box的中心严格对齐,但是由于shape分支预测出的每个anchor box w , h w,h w,h的值不一定是一样的,也就导致了feature-map上的不同位置在原图上的映射范围是不一样的,这显然不符合生成规则的第二条。导致这种情况的原因是shape,那么可以借助已经生成的shape对原始 F I F_I FI做一定的处理,使 F I F_I FI满足 规 则 2 规则_2 规则2。
基于这种思路,作者设计出了Fig1中绿框中的“feature adaptation”。
feature adaptation使用网络 N T N_T NT完成,首先把shape分支的输出通过一个conv1x1,然后把conv1x1的结果和 F I F_I FI作为输入,通过一个3x3的空洞卷积,得到结果 F I ′ F'_I FI′,之后分类和回归 F I ′ F'_I FI′取代 F I F_I FI,但是用来计算下一层feature-map的仍然是 F I F_I FI。
本文把RPN的训练看做是多任务的,loss由四部分组成,除了传统分类的 L c l s L_{cls} Lcls、回归的 L r e g L_{reg} Lreg,还有location分支的 L l o c L_{loc} Lloc和shape分支的 L s h a p e L_{shape} Lshape, λ 1 / λ 2 \lambda_1/\lambda_2 λ1/λ2作为loss的权重,本文中分别取1和0.1。
L = λ 1 ∗ L l o c + λ 2 ∗ L s h a p e + L c l s + L r e g . (4) L=\lambda_1*L_{loc}+\lambda_2*L_{shape}+L_{cls}+L_{reg}.\tag{4} L=λ1∗Lloc+λ2∗Lshape+Lcls+Lreg.(4)
Guided anchoring的三个分支各由一个网络来实现,本文使用监督方式来训练网络,监督就需要真值(gt ,ground truth)。
得到 F I ′ F'_I FI′之后就要通过它做region的分类和回归,分类输出是一个m2的矩阵,回归输出是一个m4的矩阵。
按照“location 分支预测”的分析,它可以直接决定anchor box的生死,所以location分支的gt也要格外严谨!
记:
设计者最期望得到的是 以位置 ( x , y ) (x,y) (x,y)为中心且与gt有更大IOU的anchor。如果在gt外部的 ( x , y ) (x,y) (x,y)那肯定不应该分配到有效anchor,即使是在gt内部,为了与gt有更大IOU,那么这些个中心点也应该尽可能的靠近gt的中心点。基于这种思想和Faster RCNN中有效样本的划分规则,本文划分有效样本规则如下(对每一个gt box):
结束了?并没有,从Fig1左半图可知,作者参考FPN使用特征金字塔,对金字塔中的多个feature map做Guided anchoring,然后可以认为是参考SNIP,让特定层级的feature map只预测指定大小范围内的物体,而一旦一个物体在某一层级的feature map被预测的话,那么它在该feature map相邻的两个feature里直接被设定为IR!
比如下图中,黑羊较小,在第2层级的feature map中被预测(指定为CR),那么它在第1,3层级的feature map中直接被置为IR;而白羊较大,就在比较高层级的第4层级中被预测(指定为CR),在第3层级(可能有第5层级的话,就是第3,5层级)直接为置为IR。
对所有测试集图像的所有gt bbox做上述操作,就得到了location 分支的 G T l o c = R ( F f , N , H f , W f , 1 ) GT_{loc}= R^{(F_f,N,H_f,W_f,1)} GTloc=R(Ff,N,Hf,Wf,1),第 F f F_f Ff层feature map, N N N张图像,该层级fea的长宽。。从上图可以看出CR仍然只占整体区域的一小部分,正负样本依然极度不平衡,所以对于location分支的训练使用Focal Loss。
shape分支通过位置预测anchor任意大小的 w , h w,h w,h,个人认为这是本文最大的贡献。
当中心点固定后,设计者希望shape分支可以调整anchor的 w , h w,h w,h,使得anchor可以与gt有更大IOU,这与location分支的意图是一致的。
对于每个gt在每个feature map:
G T s h a p e = R ( H , W , 2 ) GT_{shape}= R^{(H,W,2)} GTshape=R(H,W,2),初始化为0,对其中每个CR中的位置 ( x C R , y C R ) (x_{CR},y_{CR}) (xCR,yCR):
枚举一系列(文中是9) ( w , h ) (w,h) (w,h),然后计算它们与gt的IOU,以最大IOU对应的 ( w , h ) (w,h) (w,h)为该gt在该feature map上该位置的 ( w , h ) (w,h) (w,h)的gt。如果该点有两个或以上gt的CR落在这里,那么以IOU较大的 ( w , h ) (w,h) (w,h)为该位置的gt。
对所有测试集图像的所有gt bbox做上述操作,就得到shape分支的 G T s h a p e = R ( F f , N , H f , W f , 2 ) GT_{shape}= R^{(F_f,N,H_f,W_f,2)} GTshape=R(Ff,N,Hf,Wf,2),第 F f F_f Ff层feature map, N N N张图像,该层级fea的长宽。
训练时使用的是bounded iou loss的变形。原来是用来优化 ( x , y , w , h ) (x,y,w,h) (x,y,w,h),这里只用来优化 ( w , h ) (w,h) (w,h)。
作者说使用GA-RPN可以比RPN生成更高质量的RPs,用GA-RPN替换RPN训练检测时需要把正/负阈值都调高,使用更少的样本。
此外,如果事先训练好了GA-RPN和一个使用RPN的two-stage的检测器,然后使用GA-RPN直接替换掉RPN,对检测器做2-3个epoch的fine-tune之后,检测器的性能会有很大提升。
2.添加feature adaptation的原因到底是什么?在feature adaptation中又实际做了什么操作?
3. A R 1000 AR_{1000} AR1000是什么意思?