《Gliding vertex on the horizontal bounding box for multi-oriented object detection》算法详解

《Gliding vertex on the horizontal bounding box for
multi-oriented object detection》
是华中科大白翔老师的新作,发表于2019年11月21号。该文章是用来做物体检测的,有意思的是发挥了白翔老师在OCR方面的特长。一般的物体检测都是使用一个非旋转矩形来表示一个物体,文章认为对于长条形的物体(例如斜着的中文句子,航拍的船舶等),如果物体是斜着的,那这种表示方式不能很精确的定位出物体。如果使用旋转矩形来表示物体,旋转矩形的旋转角比较难学。这篇文章是通过学习四个点在非旋转矩形上的偏移来定位出一个四边形来表示一个物体。大致的过程如下图所示:
《Gliding vertex on the horizontal bounding box for multi-oriented object detection》算法详解

下面来具体看一下文章是怎么做的。

一、网络结构

文章采用的就是Fasterrcnn的结构,只是预测的结果稍微不太一样,多了几个。如下图所示。
《Gliding vertex on the horizontal bounding box for multi-oriented object detection》算法详解

网络的输出除了有fasterrcnn有的分类结果,水平框坐标(x,y,w,h)以外,还有求旋转矩形需要的额外信息(α1,α2,α3,α4)(\alpha_1, \alpha_2, \alpha_3, \alpha_4),还有用来表示该矩形是否为水平还是旋转的旋转因子r。

二、标签的生成

要知道标签是怎么生成的,首先需要知道有哪些标签,上面已经提到了,除了和fasterrcnn一样的有类型标签,有水平矩形的坐标标签(x~,y~,w~,h~)(\tilde{x}, \tilde{y}, \tilde{w}, \tilde{h}),还需要有表示旋转框的额外标签(α~1,α~2,α~3,α~4)(\tilde{\alpha}_1, \tilde{\alpha}_2, \tilde{\alpha}_3, \tilde{\alpha}_4), 表示框是否旋转的旋转因子r~\tilde{r}。可以通过看下图清楚的了解这些概念
《Gliding vertex on the horizontal bounding box for multi-oriented object detection》算法详解

上图中,BhB_h为水平矩形,蓝色O为四边形。矩形可以使用Bh=(v1,v2,v3,v4)=(x,y,w,h)B_h=(v'_1, v'_2, v'_3, v'_4)=(x, y, w, h)表示,而O则用(x,y,w,h,α1,α2,α3,α4)(x, y, w, h, \alpha_1, \alpha_2, \alpha_3, \alpha_4)表示。对于一个水平矩形BhB_h来说,它的四个点vi,i{1,2,3,4}v'_i, i \in \{1, 2, 3, 4\}与四边形O四个点,也就是O的上右下左vi,i{1,2,3,4}v_i, i \in \{1, 2, 3, 4\}四点对应。

当然水平矩形也可以使用(x,y,w,h)(x, y, w, h)表示,这里(x, y)表示矩形的中心点,(w, h)表示矩形的宽和高。对于O里面的αi,i{1,2,3,4}\alpha_i, i \in \{1, 2, 3, 4\}通过下面式子计算得到:
α{1,3}=s{1,3}/w\alpha_{\{1, 3\}}=\| s_{\{1, 3\}}\|/w
α{2,4}=s{2,4}/w\alpha_{\{2, 4\}}=\| s_{\{2, 4\}}\|/w
上式中,si=vivi\|s_i\|=\|v_i-v'_i\|表示的是点viv_iviv'_i之间的距离。对于水平矩形框来说,αi\alpha_i都设为1。
为了表示O四边形的旋转信息,文章加入了一个旋转因子r,计算如下
r=O/Bhr=|O|/|B_h|
上式中|\cdot|表示求四边形的面积,O表示四边形,BhB_h表示O对应的外接水平矩形(也就是标注的矩形)。

三、损失函数

因为文章用的网络架构是fasterrcnn,所以也包含rpn部分,rpn部分的损失函数和fasterrcnn一样。

对于rcnn的loss如下式所示:
L=1NclsiLcls+1Nregipi×LregL=\frac{1}{N_{cls}}\sum_i L_{cls} + \frac{1}{N_{reg}}\sum_i p^*_{i} \times L_{reg}
上式中,NclsN_{cls}NregN_{reg}分别表示对于一个minibatch里,所有rpn提议的框的个数和提议框中为正样本的个数,i表示的是提议的框。如果第i个框为正样本,pip^*_i为1否则为0。

上式中的回归loss LregL_{reg}包含三个部分,一个是水平框的loss,一个是四个因子α1,α2,α3,α4\alpha_1, \alpha_2, \alpha_3, \alpha_4的部分,还有一个是旋转因子r,LregL_{reg}的计算如下:
Lreg=λ1×Lh+λ2×Lα+λ3×Lr,L_{reg}=\lambda_1 \times L_h + \lambda_2 \times L_{\alpha} + \lambda_3 \times L_r,
Lα=i4smoothL1(αiα~i),L_{\alpha}=\sum^4_i smooth_{L_1}(\alpha_i-\tilde\alpha_i),
Lr=smoothL1(rr~),L_r = smooth_{L_1}(r-\tilde r),
上式中对于水平矩形部分的loss采用的和fasterrcnn一样,上式中的λ1,λ2,λ3\lambda_1, \lambda_2 , \lambda_3是用来平衡loss的超参数。

四、推断

测试阶段可以得到一个集合(x,y,w,h,α1,α2,α3,α4,r)(x, y, w, h, \alpha_1, \alpha_2, \alpha_3, \alpha_4, r),如果r大于设定的阈值trt_r,认为预测的框是水平的,用(x,y,w,h(x, y, w, h表示,否则用(x,y,w,h,α1,α2,α3,α4)(x, y, w, h, \alpha_1, \alpha_2, \alpha_3, \alpha_4)表示。NMS采用的也是oriented NMS。

文章基本原理就这些,更过实验结果可以查看原文

欢迎加入Object Detection交流,群聊号码:910457072