天天看點

OrientedRCNN論文解讀

OrientedRCNN論文解讀

  論文連結

1、出發點

OrientedRCNN論文解讀

 首先Rotate RPN通過撒各個角度比例尺寸的anchor生成OP(Oriented Proposal的縮寫),缺點很明顯:計算量和記憶體占用大。

 于是RoI Transformer提出借助水準anchor來生成OP,由于舍棄了旋轉anchor故計算量下去了。大緻流程就是:Horizental_Anchor --> RPN --> Horizental Proposal -->Roi Align–> FC --> OP。缺點:引入了FC和RoIAlign,導緻網絡heavy且複雜。

 故本文考慮直接Horizental_Anchor --> OP,進而簡化模型降低過拟合風險。

2、模型結構

OrientedRCNN論文解讀

 總體結構比較簡單,就是二階網絡結構。我首先介紹Oriented RPN。

2.1. Oriented RPN

OrientedRCNN論文解讀

 這裡關注下通道次元變化:首先256是特征圖次元,之後在特征圖每個位置撒了A(A=3)個Horizental anchor,經過 1*1 的卷積操作将通道次元變成了6*A = 18。即每個anchor的輸出預測值為6個參數:(x,y,w,h, delta_alpha, delta_belta),分别表示中心,傾斜框的外接矩形的寬和高以及偏移中心位置的兩個量。以下圖為例:

OrientedRCNN論文解讀

 本質上将OP表示方式變成了6個參數表示方式。通過下面公式很容易得到OP的v1-v4四個角點的橫縱坐标。

polys = torch.stack([ga, y1, x2, gb, _ga, y2, x1, _gb], dim=-1) # 平行四邊形四個坐标
    center = torch.stack([gx, gy, gx, gy, gx, gy, gx, gy], dim=-1)  # 堆疊四次中心坐标
    center_polys = polys - center     # 計算每個坐标和中心的相對距離
    diag_len = torch.sqrt(            # 計算對角線長度,就是 勾股定理
        torch.square(center_polys[..., 0::2]) + torch.square(center_polys[..., 1::2]))
    max_diag_len, _ = torch.max(diag_len, dim=-1, keepdim=True)      # 獲得長邊長度
    diag_scale_factor = max_diag_len / diag_len                      # 獲得resize比例
    # 将相對距離進行resize
    center_polys = center_polys * diag_scale_factor.repeat_interleave(2, dim=-1) 
    rectpolys = center_polys + center  # 相對距離在+上中心得到傾斜矩形四個坐标
    obboxes = rectpoly2obb(rectpolys).flatten(-2) # 轉成五點表示法
           

2.2. RRoI Align

總結

繼續閱讀