官术网_书友最值得收藏!

第1章 雙階段檢測

1.4.1 區域候選網絡

1.提出動機

由于CNN具有強大的擬合能力,很自然地我們可以想到使用CNN提取候選區域,因此,便產生了Faster R-CNN最核心的模塊:區域候選網絡(region proposal network,RPN)。通過SPP-Net的實驗得知,CNN可以很好地提取圖像語義信息,例如圖像的形狀、邊緣等。所以,這些特征理論上也應該能夠用于提取候選區域(這也符合深度學習解決一切圖像問題的思想)。在Faster R-CNN的論文中給RPN的定義如下:RPN是一種可以進行端到端訓練的全卷積網絡,主要用來生成候選區域。

2.RPN與Fast R-CNN

RPN最核心的結構是一個叫作錨點(anchor)的模塊。錨點是通過在Conv5上使用大小為3×3、步長為1的滑窗,在輸入圖像上取得的一系列檢測框。在取錨點時,同一個中心點取3個尺度、3個比例,共9個錨點。Faster R-CNN使用的候選區域便是用RPN標注了標簽為正的錨點。從另一個角度講,RPN的思想類似于注意力機制,注意力機制中“where to look”要看的地方便是錨點。

在Faster R-CNN中,RPN用來生成候選區域,Fast R-CNN使用RPN生成的候選區域進行目標檢測,且二者共享CNN的參數,這便是Faster R-CNN的核心框架(見圖1.12)。由此可見,RPN和Fast R-CNN是相輔相成的,在Faster R-CNN的論文中使用了交叉訓練的方法訓練該網絡,RPN和Fast R-CNN兩個模塊互相用對方優化好的參數,具體內容會在1.4.2節介紹。

圖1.12 Faster R-CNN的核心框架

Faster R-CNN分成兩個核心部分:

使用RPN生成候選區域;

使用這些候選區域的Fast R-CNN。

首先我們要確定RPN的輸入與輸出,RPN的輸入是任意尺寸的圖像,輸出是候選區域的坐標和它們的置信度得分。當然,由于RPN是一個多任務的監督學習,因此我們也需要圖像的真值框。RPN是一個多任務模塊,它的任務有兩個,任務一是計算當前錨點是前景的概率和是背景的概率,所以是兩個二分類問題;任務二是預測錨點中前景區域的坐標(x, y, w, h),所以是一個回歸任務,該回歸任務預測4個值。RPN對每一組不同尺度的錨點區域,都會單獨訓練一組多任務損失,且這些任務參數不共享。這么做是為了避免多個錨點無法和單一的真值框對應的問題。所以,如果有k個錨點,那么RPN是一個有6×k個輸出的模型。

3.RPN的錨點

首先,RPN的滑窗(步長為1)是在特征層(Conv5層)進行的,通過3×3卷積將該窗口內容映射為特征向量(圖1.13中的256維的特征向量)。根據卷積的位移不變性,要將Conv5層特征映射到輸入圖像感受野的中心點只需要乘降采樣尺度即可。由于VGG使用的都是same卷積,降采樣尺度等于所有池化的步長的積,如式(1.10)所示。相對位移便是特征圖上的位移除以降采樣尺度。

圖1.13 RPN的滑窗

(1.10)

因此,在特征層上的步長為1的滑窗也可以理解為在輸入圖像上步長為_feat_stride的滑窗。例如,一個最短邊縮放到600的4 : 3的輸入圖像,經過4次降采樣后,特征圖的大小為pg30a。進行步長為1的滑窗后,得到了W×H×k個錨點。由于部分錨點邊界超過了圖像,這部分錨點會被忽略,因此并不是所有錨點都參與采樣。

特征圖上的一個點可以對應輸入圖像上的一個區域,這個區域便是感受野。在感受野的每個中心取9個錨點,這9個錨點有3個尺度,分別是1282、2562和5122,每個尺度有3個比例,分別是1 : 1、1 : 2和2 : 1。代碼中錨點的坐標為:

[[?-84.??-40.???99.???55.]
?[-176.??-88.??191.??103.]
?[-360.?-184.??375.??199.]
?[?-56.??-56.???71.???71.]
?[-120.?-120.??135.??135.]
?[-248.?-248.??263.??263.]
?[?-36.??-80.???51.???95.]
?[?-80.?-168.???95.??183.]
?[-168.?-344.??183.??359.]]

可視化該錨點,得到圖1.14,其中黃色部分代表中心點的感受野。在這個錨點列表中,會有很多數值為負的錨點,在實際的實現過程中,錨點的值會被向上/向下進行截斷,因此不會有超出圖像邊界的問題。

圖1.14 Faster R-CNN的錨點可視化

根據SPP-Net所介紹的感受野的知識,我們知道特征圖上的一個點對應的感受野是輸入圖像的一個區域,該區域可以根據CNN結構反向遞推得出。我們可以計算出VGG-16的感受野的大小是228,遞推過程總結如圖1.15所示,圖中Convi-j表示的是第i個網絡塊的第j個卷積,箭頭上方的數字表示該層的感受野的大小[14]。雖然Faster R-CNN的論文中說這種錨點并沒有經過精心設計,但我認為這批錨點表現好不是沒有原因的。這些錨點分別覆蓋被感受野包圍、和感受野大小類似以及完全將感受野覆蓋3種情況,可見這樣設計錨點覆蓋的情況還是非常全面的。


[14] 由于RPN的特征向量是從Conv5層經過大小為3×3的卷積核獲得的,因此應該從3開始向前遞推。

圖1.15 RPN的滑窗

在輸出特征圖中,每個中心對應了9個不同的錨點,進而會產生9種不同的預測結果。Faster R-CNN根據9種不同尺寸和比例的錨點,獨立地訓練9個不同的回歸模型,這些模型的參數是不共享的,這就是RPN的模型有6k個輸出的原因,如圖1.16所示。

圖1.16 RPN的輸出層

4.損失函數

對接近2000個錨點都進行分類是不太現實的。一個原因是這2000個錨點的數量過于龐大,會影響訓練速度;另一個原因是這2000個錨點絕大多數都是負樣本錨點,正負樣本的分布極其不均衡。RPN的分類任務使用的是名為“Image-centric”的采樣方法,即每次采樣少量的圖像,然后從圖像中隨機采樣錨點正負樣本。具體來講,RPN每次隨機采樣一幅圖像,然后在每幅圖像中采樣256個錨點,并盡量保證正負樣本的比例是1 : 1。由于負樣本的數量超過128,因此當正樣本數量不夠時,將使用負樣本補充。在回歸任務中,RPN使用的是全部錨點。

RPN的損失函數是一個多任務的損失函數,其中分類任務Lcls用來判斷該錨點是正樣本還是負樣本,回歸任務用來檢測目標的檢測框,表示為式(1.11):

(1.11)

式(1.11)中,NclsNreg分別是參與分類和檢測的樣本數,其中Ncls=256,Nreg=2000。是樣本的標簽值(對于正樣本,值為1;對于負樣本,值為0),它乘Lreg表明只有正樣本參與檢測框的計算,λ是用來平衡兩個任務的參數,因為NclsNreg的差距過大,在Faster R-CNN的實驗中,λ的值為

在檢測任務中,Faster R-CNN采用的是R-CNN提出的針對錨點(候選區域)的相對位置的預測。假設模型預測框的坐標為(x, y, w, h),真值框的坐標為(x*, y*, w*, h*),錨點的坐標為(xa, ya, wa, ha),那么預測框關于錨點的相對位置的計算方式如式(1.12)。同理,真值框相對于錨點的相對位置的計算方式如式(1.13)。

(1.12)

(1.13)

因為在RPN中只有正負兩類樣本,所以Lcls使用的是二類交叉熵損失函數,而Lreg使用的是Fast R-CNN中采用的Smooth L1損失。

主站蜘蛛池模板: 麻栗坡县| 来宾市| 大庆市| 汝城县| 双辽市| 鄂尔多斯市| 广西| 内乡县| 南投市| 招远市| 大竹县| 天气| 洞头县| 武胜县| 灵武市| 湖口县| 晴隆县| 正定县| 锡林郭勒盟| 南宫市| 万安县| 德兴市| 贵州省| 来宾市| 福州市| 安国市| 油尖旺区| 丰原市| 姚安县| 商洛市| 隆子县| 樟树市| 循化| 茌平县| 百色市| 宁德市| 乌什县| 海伦市| 岳池县| 西盟| 怀化市|