旋轉框檢測方法綜述:RotateAnchor系列

2021-02-15 極市平臺

在上回書中我們已經介紹了FasterRCNN面對旋轉框檢測問題時可能遇到的問題:https://zhuanlan.zhihu.com/p/105841613

在本章節中,我將介紹幾種常見的旋轉框檢測方,分析這些方法是如何克服FasterRCNN的問題,從而實現旋轉框檢測的。另外,我也會簡單的分析一下各個方法的優缺點,介紹在實際場景中應用這些方法時可能會遇到的問題。事實上,許多的論文在提出方法的時候會更多的側重於論文在公開數據集上的表現,但在真實場景中反而會表現不佳。

本文將介紹常見的旋轉框檢測方法:

RRPN : 更多的框

R3Det : 暴力破解基礎下的速度優化

ROITransfomer:三階段算法的精度提升

all you need is Boundary :三階段算法的特殊化應用

1 暴力破解派

一、暴力破解代表:RRPN

1.1 RRPN 簡述

在FasterRCNN 的問題當中,我們介紹了使用水平的Anchor 生成水平的Proposal ,進一步預測旋轉框時可能會出現的一系列問題。那麼,當討論到這個問題的解決辦法時,一個最簡單的解決辦法,就是從生成水平的Anchor,轉變成生成各種不同角度的旋轉Anchor:

RRPN ( Arbitrary-Oriented Scene Text Detection via Rotation Proposals ) 的基本思想是,在FasterRCNN 的基礎上,對每個按照原先方法生成的框,都「原地」旋轉6個角度(上圖c),即對每個位置每個尺度(Scale),每個長寬比(Ratio) 的框,都衍生成6個不同角度的框,這樣,我們就能夠更好的貼合旋轉框檢測的任務了。因為這種思考方式簡單粗暴,在這裡我們稱他們為「暴力破解派「,即」通過生成更加密集的旋轉Anchor 來適應旋轉框檢測的任務「。

為了實現這種策略,RRPN 當中創新的提出了兩個關鍵的組件:

1、 pairwise_iou_rotated:用於計算任意一個旋轉矩形和另一個旋轉矩形之間的IoU 的函數

pairwise_iou_rotated:計算各種旋轉矩形交疊情況下的IOU

2、RROIPooling/RROIAlign , 在RPN完成之後,通過輸入一個任意角度的旋轉Proposal,能夠返回一個標準的Pooling/Align 的結果,從而可以接入到一個類似於ROIHeads 的結構當中,進一步對目標旋轉框的

RROIPooling

整體的論文流程圖如下:

介紹RRPN 論文細節的文章有很多,在這裡不多做贅述。在detectron2當中也已經將這些內容進行了很好地集成:

RotatedAnchorGenerator:

https://github.com/facebookresearch/detectron2/blob/634770ed51ce3de969557db143d9a673508635b0/detectron2/modeling/anchor_generator.py#L202github.com

RRPN(rotated proposal 生成器):

https://github.com/facebookresearch/detectron2/blob/master/detectron2/modeling/proposal_generator/rrpn.pygithub.com

RROIHeads:

https://github.com/facebookresearch/detectron2/blob/master/detectron2/modeling/roi_heads/rotated_fast_rcnn.pygithub.com

在這裡,我想按照我們介紹的整體思路,看一下RRPN是如何解決上一篇文章當中提到的三個問題的:

1、通過使用旋轉的Anchor,優化Anchor/Proposal和GT 的匹配問題。

如圖,如果在藍色點生成如圖所示大小的藍框,並將框繞著藍點進行旋轉,每30°生成一個Anchor,可以看到當藍框旋轉至綠色框的位置時,能夠和GT更加的匹配,生成更加合適的Anchor,同理,對應利用綠色區域生成Proposal 信息,Proposal 和GT 的關係會比利用水平框更加貼近

2、使用旋轉的框,能夠生成更多「接近於」GT樣式的框

在上篇文章當中,我們介紹了如果使用水平的Proposal,存在著水平Proposal的高寬和 旋轉GT 的真實高寬「相差很大」,導致回歸困難的問題。而在RRPN當中,如下圖,可以看到旋轉Proposal 和真實GT 的高度和寬度「差異性大大降低」,從而使得回歸「更加容易」

1.2 RRPN 的問題

在最開始學習的時候,我對RRPN 「給予厚望」。我認為這個方法真的能夠很好的解決這一系列的問題,加上detectron2 內置了RRPN 的相關函數,幾乎「改改配置文件」就能夠訓練出一個「精妙的模型」,但是在實際操作中,我發現RRPN 實際存在如下的問題:

1.2.1 如何表示一個旋轉框?

首先,在標籤生成的時候,我們就會直面一個現實的問題?旋轉框應該如何表示?

事實上,雖然我們說了可以使用5個值

總的來說,在帶角度的這種框表示方法當中,有三種不同的"流派":

2. 最長邊表示法:角度定義為圖像的最長邊和x軸的角度

3. 以及比較其實肉眼比較直觀的表示方式

(在文字檢測當中,一般我們會定義文本框左上角的點為x1,順時針遇到的第二個角為x2,則可以視x1 到 x2 的邊為w,對應另一邊為h,角度為 x1->x2射線和x軸的夾角)

表達方式不同,在後期模型的訓練中,對於負責預測角度對FC層的構造有很大的影響,當想要復現RRPN 或者類似的旋轉框檢測算法時,需要特別的小心

1.2.2 如何回歸

在RRPN 原始的論文中,對角度的回歸方法如下:

https://blog.csdn.net/ChuiGeDaQiQiu/article/details/79821576

這裡基本可以視為直接回歸 gt 和 anchor 之間的角度差。

事實上,所有「基於角度的旋轉框表示方法下」,都需要預測Anchor 和GT 的角度差,但是角度回歸結果的一點點偏差對於最後結果的影響很大:

R3Det 論文截圖

上圖是論文R3Det 當中的一個示例圖,比如圖中的藍色曲線表示對於長寬比為1:5的框,當把一個框繞著原點旋轉任意的一個角度後(如下圖從藍框旋轉到綠框的位置),旋轉後的框和原先的框 的IoU值。從圖中我們可以看出,當偏差角度在20°的時候,框和原先的框的IOU就只有0.4了。

事實上,RRPN一類的旋轉框檢測方法,都會有如下的問題:

1、分布在圖中的GT 的旋轉角度是任意的,而生成Anchor 使用的角度是固定的,但是如上所述,如果生成Anchor 時,使用的旋轉角度不足,比如不夠每20°生成一個Anchor,就很容易出現儘管生成了很多的Anchor ,但是還是很難有Anchor 能夠和GT 具有高的IoU


2、對角度回歸出現一點點的偏差,會造成回歸的結果和GT的IoU沒有那麼好,即」角度對學習是很敏感的「,所以計算其Smooth_L1_Loss 並加入到回歸偏差中,會使得回歸相關的參數不容易被學習

3、角度的變化是不連續的,因此可能會難以被學習,且學習成本很大(SCRDet 對此有詳細的介紹和Loss 的設計,這裡不展開討論)

1.2.3 令人崩潰的速度

事實上,上述問題都不是問題,最大的問題在於:慢!

在眾多文字檢測比賽當中,一張圖上其實框很少:

但是在真實應用場景中,一張圖上的GT 的數量可能多達幾百個(比如報表啊,各種單據),然後,然後RRPN 就會慢的不行...這主要是因為你需要在每個位置生成足夠的框(旋轉的角度不夠會導致1.2.2 提到的問題),所以,RRPN 陷入了無盡的自我矛盾:

1、速度不夠,增大旋轉角度的間隔
2、旋轉角度間隔增大,模型的精度一定會下降

介紹完開山之作RRPN, 之後的文章基本就是在此基礎之上的不斷細化,在本篇專欄之中不做進一步細緻的介紹,只是列出大家針對RRPN 提出的一系列的創新,供讀者參考和思考。

2 暴力與速度的結合 R3Det

R3Det( Refined Single-Stage Detector with Feature Refinement for Rotating Object ) 主要解決的是RRPN 過程當中的速度問題:

1、使用RetinaNet 構造單階段目標檢測框架
2、使用RefineDet 思想,對FirstStage 一階段檢測結果細化
3、引入了FRM 模塊,在一階段模型當中實現了類似於 ROIPooling 的操作

簡單來說,算法的創新點在於在RetinaNet + RefineDet 的基礎之上,使用FRM 模塊實現類似ROIPooling 的效果。算法對比與RRPN,主要是實現了OneStage的模型框架,但在基於detectron2的框架進行復現時,感覺速度還是不夠快。  3 重新用上RPN:ROITransfomer

3.1 模型結構

事實上,在DOTA數據集(一個航拍旋轉物體檢測數據集)上,目前得分最高的模型就是這個ROITransfomer模型了,不過基於他復現難度較高,估計大家真正想用起來有點難...

簡單的來說,RRPN一個非常直觀的問題在於,需要生成大量且冗餘的RotateAnchor,所以,一個直觀的解決辦法是:在RPN階段,能不能首先先用RPN 水平的Proposal ,並且對於每個Proposal ,通過和GT 的最小包絡矩形進行IoU計算分配正負樣例,訓練出一個生成水平Anchor 的Proposal:

沒錯,雖然之前我們拋棄了這個思路,但是當時我們說過,其實FasterrRCNN是有能力在最終給出包絡住物體的框的,所以其實這種思路生成RPN也是行的通的,但在當前思路下,如何回歸GT 的旋轉坐標呢?這裡文章的思路其實很類似於R3Det,盜用R3Det的一張圖:

如果GroundTruth(R) 是我們的GT,即最終希望預測的結果,在ROITransfomer這裡的操作其實很類似於CascadeRCNN,即首先從綠框(Anchor) 利用ROIPooling/ROIAlign 的方式回歸到一個旋轉的結果RefinedBbox,在兩階段的網絡結構中,模型推斷到這裡就應該結束,但事實上,我們可以再做一步,通過使用一個RotateROIPooling,輸入黃色的旋轉框,再進一步修正框的坐標信息,獲得最後的預測結果

通過在中間加一層網絡結構,能夠使得模型的預測結果更加精準,具體而言,文章的基本思路如下:

這裡的RROI Learner 就是第一次的ROIPooling,但是文出於對速度的考量,換成了更快速的PSROIPooling,而ROIWarping 就是第二階段的框的精修,文中提出了一種新的pooling方式,但是對於我們想快速嘗試,可以試試使用RotateROIPooling 替代

3.2 復現困難

我曾經試過使用簡單的ROIAign+RROIAlign的策略實現過三階段的算法,不得不說,雖然減少了框的數量,但是實際上如果不類似於原文,替換為PSROIPooling或者類似於LightHeadRcnn 的網絡結構,推斷速度是十分不給力的

同樣,在復現AnchorBased類型論文當中,Matcher 部分的不一致問題始終是一個很難以解決的問題:

1、如果使用RPN 生成水平的Anchor ,則在RPN訓練中,Anchor 和 GT 進行Matcher 匹配的時候,應該是使得Anchor和GT的包絡矩形進行比較。

2、則這樣RPN生成的Proposal,基本都是"包著GT"的,如下圖展示的Proposal,但是在第二輪需要和旋轉GT 進行Matcher 的時候,會發現生成的Proposal 如果是和GT 的旋轉框進行IoU計算的話,實際上就算是最包絡的Proposal , 和 GT 的IoU值都可能很小(如下圖的」單位:人民幣元「)

關於這個問題,我也沒有很好的解決思路,如果有興趣交流的,歡迎交流。
  4 All you need is Boundary:最有技巧的三階段模型

沒啥說的,阿里的文章,技巧極其複雜,復現極其困難.速度嘛,反正用detectron2的話,三階段都不算快, 這篇中心思想和第三篇類似,但做的更加tricky,感興趣的可以去看看。

總的來說,第三篇在三階段仍舊回歸框坐標,但是這篇直接回歸了文本的」邊界點「:

圖a) : 從RPN 回歸至旋轉框

圖c): 從旋轉框回歸到文字邊界

論文的基礎框架和核心如下:

(兩階段的框檢測+一階段的邊界檢測)= 三階段方法


相關焦點

  • ODTK:來自NVIDIA的旋轉框物體檢測工具箱
    軸對齊的ground truth框(a)相互重疊,每個框都是(person和motorcycle)的混合。ODTK (b)檢測到的旋轉框解決了這個問題,並且更好地擬合了目標的輪廓。旋轉物體和特徵的檢測的應用包括遙感(圖1)、 「in the wild」 文本檢測、醫學和工業檢測。
  • anchor free的目標檢測方法--CornerNet
    作者:晟 沚                    目前目標檢測方法中深度方法主要分為one-stage
  • 【目標檢測】Anchor Free —— FCOS
    1 Introduction     FCOS也是一篇anchor free的目標檢測算法,但是其思想跟CornerNet、CenterNet系列有點不太一樣。FCOS在檢測階段需要非極大值抑制的後處理,而CenterNet是不需要NMS的。     作者也把FCOS用到了Two-stage detector中的RPN,並且其結果比anchor-based RPN的結果好。
  • 目標檢測:Anchor-Free時代
    採訪中說道,當年DenseBox其實早在2015年初就已經開發出來了,這比同期的Faster-RCNN系列提前數月,但是論文直到9月才在arxiv上發布。基於anchor的檢測器,根據不同尺寸安排anchor到不同的特徵層,而FCOS直接限制邊界框回歸的範圍(即每個feature map負責一定尺度的回歸框)。Center-ness
  • anchor-free對象檢測網絡CornerNet詳解
    微信公眾號:OpenCV學堂關注獲取更多計算機視覺與深度學習知識主要是兩類對象檢測方法
  • 從錨點到關鍵點:目標檢測方法最新進展(2019)
    過去一年的技術發展趨勢是基於 anchor-free 的目標檢測器(紅色線)和 AutoML 技術(綠色線),這兩項技術可能成為未來重要的研究方向。因為該綜述論文花了近 40 頁篇幅綜述各種解決方案與組成結構,內容覆蓋了這些年主要的研究進展與突破,所以機器之心只介紹部分內容,更詳細的介紹請查閱原論文。
  • ICML 2021 | 上交&華為提出GWD:旋轉目標檢測新方法
    IoU系列的損失函數。由於我不確定旋轉的IoU計算是不是真的不可導不能直接作為損失函數,我還特意在知乎上提了一個問題,希望有知乎大佬能給個比較有說服力的解釋和證明。兩個任意旋轉框的IoU計算過程可導嗎?
  • 深度學習檢測小目標常用方法匯總
    img針對同一張圖片裡面包含小目標數量少的問題,在圖片內用分割的Mask摳出小目標圖片再使用複製粘貼的方法(當然,也加上了一些旋轉和縮放,另外要注意不要遮擋到別的目標)。對[R-FCN](R-FCN: Object Detection via Region-based Fully Convolutional Networks)提出的改進主要有兩個地方,一是多尺寸圖像輸入,針對不同大小的輸入,在經過RPN網絡時需要判斷valid GT和invalid GT,以及valid anchor和invalid anchor,通過這一分類,使得得到的預選框更加的準確;二是在RCN
  • FCOS 經典的一階段Anchor-Free檢測算法
    FCOS詳解總述FCOS是近年來優秀的anchor free目標檢測算法,本文將對論文中的創新點進行儘量詳細的分析。前情提要在anchor free算法出現前,檢測網絡大多採用的是anchor based的算法思路,其主要流程為 backbone提取圖像特徵 -- FPN從backbone提取到的不同解析度的特徵層中構建特徵金字塔 -- 在特徵金字塔的不同層上建立多個anchor來構建規劃正負樣本,並計算損失值回傳進行網絡參數的優化更新。
  • 對象檢測新趨勢anchor-free模型之CenterNet
    對象檢測網絡,克服了one-stage對象檢測依賴anchor boxes的缺點,但是CornerNet本身在對象檢測方面的精度仍然有限,本文作者認真分析了CornerNet網絡的缺陷,提出了新的改進方法。
  • 基於深度學習的三維點雲綜述part2-3D物體檢測與跟蹤
    該文章將每個點與一個球形anchor關聯,然後使用每個點的予以分數去移除冗餘的anchors。該方法相較於IPOD,PointRCNN實現了更高的召回率和更低的計算耗時。此外,該方法還提出了一個PointPool層去學習在提議框內部的點的更加緊湊的特徵,並且引入了一個並行的IOU分支去提升定位精度和檢測性能。
  • FCOS:全卷積一階段Anchor Free物體檢測器,多種視覺任務的統一框架
    之前也有過類似的嘗試,直接再feature map的每個空間位置上回歸出一個4D Vector,外加一個類別,不過這些方法在文本檢測中用的較多,因為當物體間的包圍框重疊比較多的時候,某一個點就不知道去回歸哪一個了。如圖1:
  • 【目標檢測算法50篇速覽】4,Anchor Free及Transformer時代
    那麼如何參考利用目標內的特徵來實現更高精度的anchor free目標檢測就是作者著力解決的問題。創新點:anchor free 方案,通過目標的四個方向的極值點和中心點來實現目標檢測。提出了Online feature selection方法,改善了基於anchor機制和feature pyramids的single-shot檢測器的兩個潛在問題。FSAF在COCO數據集上達到了state-of-art,mAP為44.6%,超過了所有single-shot檢測器。同時額外的計算量很小。
  • AI | FCOS:機器視覺中超越anchor-based完全anchor-free的目標檢測器
    在計算機視覺、目標檢測領域,Anchor-Free旨在不產生anchor,也不利用預測框和真實框的IOU進行優化,而是使用一種segmentation-like的方式直接預測真實框,這當中有什麼困難?如何解決呢?
  • 一篇包羅萬象的場景文本檢測算法綜述
    ),它是在SSD目標檢測方法的基礎上進行改進的,但是不通過矩形框來回歸文本區域的位置.CNN (Rotational Region CNN,R2CNN),用於檢測自然場景圖片中任意方向的文本框,當然這種方法並不局限於斜框文字檢測,也可以用在其他領域。
  • AAAI 2021 | 國科大和上海交大提出RSDet:旋轉目標新網絡
    先檢測水平框,這個是沒有序列問題的,然後學習水平框四個角點的偏移量來達到四邊形檢測的目的,其實這裡的(偏移量,對應的水平框的點)配對就有排序的意思了。最後利用這兩個點構成的向量以及叉乘方法,根據順序的要求(逆時針或者順時針)找點其他兩個點。儘管這兩種方法在一定成都上解決了角點的順序問題,但還是存在各自的邊界問題,下面我們來看一下這兩篇文章各自面臨的問題,以及是怎麼解決的。二、Gliding VertexGliding Vertex提出的定義方法所面臨的問題比較明顯,就是當所要預測是水平框時,則需要
  • FCOS:一階全卷積目標檢測
    ),該算法是一種基於FCN的逐像素目標檢測算法,實現了無錨點(anchor-free)、無提議(proposal free)的解決方案,並且提出了中心度(Center—ness)的思想,同時在召回率等方面表現接近甚至超過目前很多先進主流的基於錨框目標檢測算法。
  • CVPR 2021 | 上交和國科大提出DCL:旋轉目標檢測新方法
    DCL主要從兩方面進行了優化:過於厚重的預測層以及對類正方形目標檢測的不友好。 表示anchor的數量。而使用回歸進行角度預測時的預測層厚度僅為: 。其實使用周期為90的定義方法對類正方形目標來說更加合適(如OpenCV定義法),長邊定義法有明顯的缺陷。
  • YOLO系列綜述:從V1到V4
    如果我們用標準的歐式距離的k-means,尺寸大的框比小框產生更多的錯誤。因為我們的目的是提高IOU分數,這依賴於Box的大小,所以距離度量的使用:訓練期間使用標準的數據擴大方法:隨機裁剪、旋轉、變換顏色(hue)、變換飽和度(saturation), 變換曝光度(exposure shifts)。
  • 目標檢測(二)
    這部分我們將對單次目標檢測器進行綜述,最典型的one-stage檢測算法包括YOLO、SSD、CornerNet、CenterNet等。OverfeatOverFeat是早期經典的one-stage Object Detection的方法,基於AlexNet,實現了識別、定位、檢測共用同一個網絡框架;獲得了2013年ILSVRC定位比賽的冠軍,同時在分類和檢測任務也取得了不錯的結果。