目標檢測中 Anchor 的認識及理解
近期好多同學都在糾結Anchor的設定,而且部分同學私信,可不可以把這個基礎知識詳細說一次,今天就單獨開一次小課,一起來學習Faster R-CNN中的RPN及Anchor。
說到RPN和Anchor,應該立馬就能想到Faster R-CNN網路框架,這個我平臺在之前就有詳細的介紹過。
往期回顧
有興趣的可以點選進入看看,當作複習一下。首先我先將幾類經典的目標檢測網路做一個對比,然後開始說說今天要講的知識。
最開始出現的是R-CNN,如下圖:
從上圖可以看出其框架做了很多重複的計算,在第二步之後,如果有2k個proposals,那後面就要執行2k邊,太低效。於是,出現了改進的SSP-Net,如下圖:
SSP-Ne框架組合了Classification和Regression,做成單個網路,並且可以Een-to-End進行訓練,速度上提高許多。但是,SSP-Net還是基於Selective Search產生proposal,之後就出現了Fast R-CNN,其是融合了R-CNN和SPP-Net的創新,並且引入多工損失函式,使整個網路的訓練和測試變得十分方便。
但是Region proposal的提取還是使用了Selective Search,目標檢測時間大多消耗在這上面(大約region proposal需2~3s,而提特徵分類只需0.32s),這種是無法滿足實時應用,而且並沒有實現真正意義上的端到端訓練測試(因為region proposal使用了Selective Search先提取處來)。
於是就有了直接使用CNN產生region proposal並對其分類,這就是Faster R-CNN框架,如下圖:
Faster R-CNN將 proposals 交給了CNN去生成,這樣 Region Proposal Network(RPN) 應運而生。
Faster R-CNN
仔細看看Faster R-CNN框架,其實還保留了Fast R-CNN的框架,其主要就是CNN+RPN。其中 RPN主要就是負責生成proposals,然後與最後一層的feature map一起使用,用ROI Pooling生成固定長度的feature vector。具體如下:
那接下來開始好好的說一下RPN和Anchor!下圖是我從網路copy過來的,應該更加能理解整體的流程及內容。
在上圖中,紅色的3x3紅框是其中一個滑窗的操作過程, 注意 這裡的Anchor是原影象畫素空間中的,而不是feature map上的。這樣的話,就可以很好去知道Anchor的意思,而且Anchor對於RPN非常重要。
現在,我們假設現在的feature map尺寸為W x H x C(13x13x256就是feature map的Width=13,Height=13和Channel=256),在feature map使用滑動視窗的操作方式,當前滑窗的中心在原畫素空間的對映點就稱為Anchor,並且以Anchor為中心去生成K(paper中default K=9,3個尺寸和3個縮放比例)個proposals。
在feature map上滑動一次,得到一個小網路,該網路輸入是3x3x256,經過3x3x256x256的卷積,就可以得到1x1x256的低維特徵向量。
然後就得到上圖的兩個分支。
-
Classification:經過1x1x256x18的卷積核,得到1x1x18的特徵向量,分別代表9個proposals的Object的概率( 是或不是 );
-
Regression:經過1x1x256x36的卷積核,得到1x1x36的 特徵向量, 分別代表9個proposals的(長寬及中心點座標)。
注意,上面只是一個小網路,也就是一個3x3滑窗的過程及結果,在網路整體執行的過程中,要將整個feature map都要滑動一遍,最終就會得到兩個損失函式:
其中就是 Classification(Lcls)和 Regression(L reg)兩個損失。 對於邊界框的迴歸,其是採用以下4個座標的引數化:
綜上,通過滑窗和Anchor機制就可以找到固定比例、一定大小的proposals,這樣RPN就可以完美替代低效的 Selective Search去產生proposals。
最終,在目標檢測領域中,這個框架算是一個里程碑,值得大家學習與深入探索。最後的檢測結果也是不錯的。
如果想加入我們“ 計算機視覺戰隊 ”,請掃二維碼加入學習群。 計算機視覺戰隊 主要涉及 機器學習、深度學習 等領域,由來自於各校的碩博研究生組成的團隊,主要致力於 人臉檢測、人臉識別,多目標檢測、目標跟蹤、影象分割等 研究方向。
如果覺得不錯,請幫忙點一個好看,感謝對我工作的認可,謝謝!