Xingxing Xie, Gong Cheng, Jiabao Wang, Xiwen Yao, Junwei Han
西北工业大学
ICCV2021
paper: http://arxiv.org/abs/2108.05699
code: https://github.com/jbwang1997/OBBDetection
当前的SOTA两阶段检测器生成旋转候选框很费时。本文提出Oriented RCNN(oRPN),实现具有高效率和良好精度的旋转检测。
具体来说,第一阶段中提出了oRPN,可以几乎不费时地生成oriented proposals;第二阶段oriented RoI。
DOTA: 75.87% mAP
HRSC: 96.50% mAP
早期的rotated RPN铺3scales × 3ratios × 6 angles
个anchor。anchor-based提高了召回率,在稀疏角度有较好表现,但是计算量大、内存占用高。
RoI Transformer为这一问题,从水平RoI中学习OBB,包括RRoR learner、RRoRI wrapper。RoI Transformer大大降低了oriented anchor的数量,降低了计算量和内存占用。但是其资源消耗仍然很大。
作者通过研究发现限制基于区域建议的Oriented Object Detection是第一阶段旋转候选区域提取。因此作者希望设计一个***通用的、简单的旋转候选框提取网络***,因此设计了Oriented RCNN。
Oriented RPN(oRPN)是一个轻量的全卷积网络,参数量比oRPN和RoI Trans都少。Oriented RPN通过将RPN的输出由4个改为6个实现。Oriented RPN得益于中点偏移(Midpoint offset)旋转框表示。
第二部分是oriented RCNN detection head(ORH):从每个oriented proposal中通过rotated RoI alignment提取特征并进行分类和回归。
RoI Align是为解决RoI Pooling中像素映射时坐标取整导致的误差而出现的。
由于包含太多背景信息或多个目标,HBB不能紧凑地定位遥感图像中的旋转目标。基于two-stage算法,一个自然的结局方案就是引入OBB,比如oriented RPN。这种方式大大提高了摇杆目标检测的精度。但是由于引入了全连接层和RoI Alignment,这种方式十分复杂。为解决这一问题,有人提出了基于Faster RCNN的SCRDet和Gliding Vertex,用Faster RCNN预测四个顶点的offset。但这两种方法都是用HBB来进行分类,仍然存在特征和目标对不齐的问题。
此外,R3Det等探究了one-stage或者是anchor-free方式的算法。其中R3Det用特征精细化和逐步回归来解决特征对不齐问题。Pan在CenterNet的基础上,设计了一种面向目标的动态精细化网络(DRN)。
与上述方法相比,本文的工作属于proposal-based目标检测方法。作者设计了一种高效的oriented RPN,以突破面向目标的建议生成的计算瓶颈。
Oriented RCNN是two-stage检测器,包含oriented RPN和oriented RCNN head两部分。其中oriented RPN用于生成高质量的oriented proposal,oriented rcnn head用于分类和回归。FPN采用 { P 2 , P 3 , P 4 , P 5 , P 6 } \{P_2, P_3, P_4, P_5, P_6\} {P2,P3,P4,P5,P6},
Oriented RPN对输入的任意大小的图像提取oriented proposal。整个结构是一个轻量化的全卷积网络。
具体来说,oriented RPN输入FPN的 { P 2 , P 3 , P 4 , P 5 , P 6 } \{P_2, P_3, P_4, P_5, P_6\} {P2,P3,P4,P5,P6}五层特征,然后对每一层都有一个 3 × 3 3\times{3} 3×3的卷积层和两个sibling(兄弟)的 1 × 1 1\times1 1×1的卷积层,一个用作分类一个用作回归。在所有的特征层中,每个位置放置三个anchor分别具有三种长宽比 { 1 : 2 , 1 : 1 , 2 : 1 } \{1:2, 1:1, 2:1\} {1:2,1:1,2:1}。每层特征上的anchor的面积分别是 { 3 2 2 , 6 4 2 , 12 8 2 , 25 6 2 , 51 2 2 } \{32^2, 64^2, 128^2, 256^2, 512^2\} {322,642,1282,2562,5122}。每一个anchor用中心和长宽表示。回归分支输出6维: δ = ( δ x , δ y , δ w , δ h , δ α , δ β ) \delta=(\delta_x, \delta_y, \delta_w, \delta_h, \delta_{\alpha}, \delta_{\beta}) δ=(δx,δy,δw,δh,δα,δβ)。如前面所述,本文中每个位置处的anchor数量 A = 3 A=3 A=3。综上,回归分支共有 6 A = 18 6A=18 6A=18维的输出。根据输出可得oriented proposals:
{ Δ α = δ a ⋅ w , Δ β = δ β ⋅ h w = a w ⋅ e δ w , h = a h ⋅ e δ h x = δ x ⋅ a w + a x , y = δ y ⋅ a h + a y \left\{ \begin{aligned} \Delta{\alpha}=\delta_a\cdot{w},\Delta{\beta}=\delta_\beta\cdot{h} \\ w=a_w\cdot{e^{\delta_w}},h=a_h\cdot{e^{\delta_h}} \\ x=\delta_x\cdot{a_w}+a_x,y=\delta_y\cdot{a_h}+a_y \end{aligned} \right. ⎩⎪⎨⎪⎧Δα=δa⋅w,Δβ=δβ⋅hw=aw⋅eδw,h=ah⋅eδhx=δx⋅aw+ax,y=δy⋅ah+ay
其中 ( x , y ) (x,y) (x,y)是proposal的中心坐标, w w w和 h h h分别是oriented proposal外接矩形的宽和高, Δ α \Delta{\alpha} Δα和 Δ β \Delta{\beta} Δβ分别是oriented proposal相对于外接矩形中点的长和高。Oriented RPN很自然的源于RPN,但是其关键在于OBB的表示方法即Midpoint Offset Representation。
作者提出了一种新的OBB表示方式,称之为中点偏移表示法MOR。如图所示(oriented proposal简称为O),oriented proposal的外接矩形的中点为 ( x , y ) (x,y) (x,y),黑点为外接矩形的四条边的中点,橙色点为O的顶点。一个O可以由六个参数表示: O = ( x , y , w , h , Δ α , Δ β ) O=(x,y,w,h,\Delta{\alpha},\Delta{\beta}) O=(x,y,w,h,Δα,Δβ)。通过这种表示方法可以得到O的四个顶点的坐标:
{ v 1 = ( x , y − h 2 ) + ( Δ α , 0 ) = ( x + Δ α , y − h 2 ) v 2 = ( x + w 2 , y ) + ( 0 , Δ β ) = ( x + w 2 , y + Δ β ) v 3 = ( x , y + h 2 ) + ( − Δ α , 0 ) = ( x − Δ α , y + h 2 ) v 4 = ( x − w 2 , y ) + ( 0 , − Δ β ) = ( x − w 2 , y − Δ β ) \left\{ \begin{aligned} v_1 &=& (x,y-\frac{h}{2})+(\Delta{\alpha},0) &=& (x+\Delta{\alpha},y-\frac{h}{2})\\ v_2 &=& (x+\frac{w}{2},y)+(0,\Delta{\beta}) &=& (x+\frac{w}{2},y+\Delta{\beta})\\ v_3 &=& (x,y+\frac{h}{2})+(-\Delta{\alpha},0) &=& (x-\Delta{\alpha},y+\frac{h}{2})\\ v_4 &=& (x-\frac{w}{2},y)+(0,-\Delta{\beta}) &=& (x-\frac{w}{2},y-\Delta{\beta})\\ \end{aligned} \right. ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧v1v2v3v4====(x,y−2h)+(Δα,0)(x+2w,y)+(0,Δβ)(x,y+2h)+(−Δα,0)(x−2w,y)+(0,−Δβ)====(x+Δα,y−2h)(x+2w,y+Δβ)(x−Δα,y+2h)(x−2w,y−Δβ)
因此,在Oriented RCNN中,oriented RPN输出六个参数来确定oriented proposal。
在训练时,对每一个anchor给定一个binary label,0为负样本,1为正样本。以下2种情况:
不为正或负样本的anchor训练时被忽略。上述均值的是oriented proposal的外接矩形。
因此损失函数 L 1 L_1 L1定义如下:
L 1 = 1 N ∑ i = 1 N F c l s ( p i , p i ∗ ) + 1 N p i ∗ ∑ i = 1 N F r e g ( δ i , t i ∗ ) L_1=\frac{1}{N}\sum_{i=1}^{N}{F_{cls}(p_i,p_i^*)}+\frac{1}{N}p_i^*\sum_{i=1}^{N}{F_{reg}(\delta_i,t_i^*)} L1=N1i=1∑NFcls(pi,pi∗)+N1pi∗i=1∑NFreg(δi,ti∗)
其中 i i i是anchor的索引, N N N是mini-batch中的样本总数,默认为256。 p i ∗ p_i^* pi∗是真值标签, p i p_i pi是分类分支的输出,表示anchor为前景的概率。 t i ∗ t_i^* ti∗是anchor的真值偏移监督量 t i ∗ = ( t x ∗ , t y ∗ , t w ∗ , t h ∗ , t α ∗ , t β ∗ ) t_i^*=(t_x^*,t_y^*,t_w^*,t_h^*,t_{\alpha}^*,t_{\beta}^*) ti∗=(tx∗,ty∗,tw∗,th∗,tα∗,tβ∗),由下式得出:
{ δ α = Δ α w , δ β = Δ β h δ w = log w w a , δ h = log h h a δ x = ( x − x a ) w a , δ y = ( y − y a ) h a t α ∗ = Δ α g w g , t β ∗ = Δ β g h g t w ∗ = log w g w a , t h ∗ = log h g h a t x ∗ = ( x g − x a ) w a , t y ∗ = ( y g − y a ) h a \left\{ \begin{aligned} \delta_{\alpha} = \frac{\Delta{\alpha}}{w}, && \delta_{\beta} = \frac{\Delta{\beta}}{h} \\ \delta_{w} = \log{\frac{w}{w_a}}, && \delta_{h} = \log{\frac{h}{h_a}} \\ \delta_{x} = \frac{(x-x_a)}{w_a}, && \delta_{y} = \frac{(y-y_a)}{h_a} \\ t_{\alpha}^* = \frac{\Delta{\alpha_g}}{w_g}, && t_{\beta}^* = \frac{\Delta{\beta_g}}{h_g} \\ t_{w}^* = \log{\frac{w_g}{w_a}}, && t_{h}^* = \log{\frac{h_g}{h_a}} \\ t_{x}^* = \frac{(x_g-x_a)}{w_a}, && t_{y}^* = \frac{(y_g-y_a)}{h_a} \end{aligned} \right. ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧δα=wΔα,δw=logwaw,δx=wa(x−xa),tα∗=wgΔαg,tw∗=logwawg,tx∗=wa(xg−xa),δβ=hΔβδh=loghahδy=ha(y−ya)tβ∗=hgΔβgth∗=loghahgty∗=ha(yg−ya)
其中,不带下标的量为网络输出,下标为g为真值,下标为a为anchor。 F c l s F_{cls} Fcls是交叉熵损失, F r e g F_{reg} Freg是Smooth L1损失。
网络输出 ——> 计算输出的oriented proposal ——> 根据anchor计算输出偏移量 ——> 计算损失
真值 ——> 根据anchor计算监督量 ——> 计算损失
ORH的输入为 { P 2 , P 3 , P 4 , P 5 , P 6 } \{P_2, P_3, P_4, P_5, P_6\} {P2,P3,P4,P5,P6}。在每个oriented proposal进行oriented RoIAlign从相应层特征中提取固定维度的特征向量,之后经过两个全连接层,在经过两个sibling的全连接层,得到分类输出和回归输出。
RRoI Align用于提取oriented proposal的旋转不变特征。如图所示,oRPN的输出一般是平行四边形(蓝色框)。为便于计算,需要将平行四边形调整为矩形,该步骤通过延长较短的对角线至与另一对角线相等实现。之后得到图中红色框所示的矩形 ( x , y , w , h , θ ) (x,y,w,h,\theta) (x,y,w,h,θ),其中 θ ∈ [ − π / 2 , π / 2 ] \theta\in[-\pi/2,\pi/2] θ∈[−π/2,π/2],是矩形长边与x轴的夹角(锐角)。
接下来将oriented rectangle映射到特征图F上,按照步长s,来获得RRoI: ( x r , y r , w r , h r , θ ) (x_r,y_r,w_r,h_r,\theta) (xr,yr,wr,hr,θ):
{ w r = w / s , h r = h / s x r = ⌊ x / s ⌋ , y r = ⌊ y / s ⌋ \left\{ \begin{aligned} w_r=w/s, && h_r=h/s \\ x_r=\lfloor{x/s}\rfloor, &&y_r=\lfloor{y/s}\rfloor \end{aligned} \right. {wr=w/s,xr=⌊x/s⌋,hr=h/syr=⌊y/s⌋
然后每一个RRoI被划分为 m × m m\times{m} m×m的网格(文中m=7)来获取固定尺寸的特征 F ′ = m × m × C F'=m\times{m}\times{C} F′=m×m×C,在通道c中的个网格 ( i , j ) (i,j) (i,j)中,其特征值为:
F c ′ ( i , j ) = ∑ ( x , y ) ∈ a r e a ( i , j ) F c ( R ( x , y , θ ) ) / n F'_c(i,j)=\sum_{(x,y)\in{area(i,j)}}{F_c(R(x,y,\theta))/n} Fc′(i,j)=(x,y)∈area(i,j)∑Fc(R(x,y,θ))/n
其中 F c F_c Fc是输入特征的第c个通道, a r e a ( i , j ) area(i,j) area(i,j)是网格中的点的坐标集, R R R是旋转变换,与RoI Transformer一致。
通过oRPN和oRH的联合优化进行端到端的训练。Inference阶段中oRPN的输出往往重叠较高,因此在FPN的每一层中保留最多2000个proposal,然后进行NMS。为了提高Inference的速度,NMS对HBB进行,IoU阈值取0.3。再将剩下的不同层特征中的proposal进行合并,最后根据其score排序选择前1000作为stage2的输入。
在stage2中,对每一个score大于0.05的预测结果进行类内poly NMS,阈值为0.1。
DOTA和HRSC2016
用1张2080Ti进行训练,batch size取2。test也在一块2080Ti上。在mmdetection平台上进行实现,backbone为ResNet50和ResNet101,在ImageNet上进行了预训练。训练时采用了水平翻转和竖直反转作为数据增强策略。采用SGD对整个网络进行优化, m o m e n t u m = 0.9 , w e i g h t d e c a y = 0.0001 momentum=0.9, weight_decay=0.0001 momentum=0.9,weightdecay=0.0001。
针对DOTA数据集,文中将原始图像才建成 1024 × 1024 1024\times{1024} 1024×1024的patch,裁剪步长为824,因此相邻两个patch之间重叠200像素。多尺度训练时,首先将图像调整为原始尺寸的 { 0.5 , 1.0 , 1.5 } \{0.5,1.0,1.5\} {0.5,1.0,1.5},然后再以524为步长,裁剪成 1024 × 1024 1024\times{1024} 1024×1024的patch。一共训练12 epoch,初始的学习率设为0.005,在第8和第11个epoch中衰减为原来的0.1。合并patch时poly NMS的阈值为0.1。
针对HRSC数据集,不改变图像的长宽比。短边被缩放到800,长边小于等于1333。共训练36个epoch,初始学习率0.005,在第24和第33个epoch中衰减为原来的0.1。
从召回率角度评价了oRPN,采用了DOTA的validation set,backbone采用了ResNet-50-FPN。为简化流程,作者只在裁剪的patch上计算召回率,而进行合并。与ground-truth的IoU阈值为0.5。在每个patch中分别选择前300、前1000、前2000个proposal,记为 R 300 R_{300} R300、 R 1000 R_{1000} R1000和 R 2000 R_{2000} R2000。如图所示,按 R 2000 R_{2000} R2000计算oRPN可以达到92.80%的召回率。 R 1000 R_{1000} R1000仅比 R 2000 R_{2000} R2000下降了0.6%,但是 R 300 R_{300} R300的召回率急剧下降。
因此,为了速度和精度,作者在两个数据集上测试时都采用1000个proposal的ORH的输入。本文提出的oRPN可以很好地定位对象,无论其大小、纵横比、方向和密度。
在相同的设定条件下,作者比较了不同方法的速度和准确度。对比结果如表4所示。所有方法均采用ResNet-50-FPN作为backbone。测试的硬件平台均为1张2080Ti,batch size为1。在测试时,输入图像的大小为 1024 × 1024 1024\times{1024} 1024×1024。如表所示,Oriented RCNN比其他方法有更高的检测准确率(75.87% mAP),但运行速度相当(15.1 FPS)。Oriented RCNN的速度几乎接近于one-stage检测器,但精度远高于one-stage检测器。
本文提出了一种实用的two-stage检测器Oriented RCNN,用于图像中任意方向的目标检测。本文在两个具有挑战性的benchm上进行了广泛的实验。实验结果表明,该方法与目前先进的两级探测器相比具有相当的精度,同时与one-stage检测器相比具有相当的效率。