深度學習目標檢測模型發展過程:R-CNN Fast R-CNN Faster R-CNN R-FCN

一 R-CNN 模型

如果要擬人化比喻,那 R-CNN 肯定是 Faster R-CNN 的祖父了。換句話說,R-CNN 是一切的開端。

R-CNN,或稱 Region-based Convolutional Neural Network,其工作步驟如下:

1.藉助一個可以生成約 2000 個 region proposal 的「選擇性搜索」(Selective Search)算法,R-CNN 可以對輸入圖像進行掃描,來獲取可能出現的目標。
2.在每個 region proposal 上都運行一個卷積神經網絡(CNN)。
3.將每個 CNN 的輸出都輸入進:
a)一個支持向量機(SVM),以對上述區域進行分類。
b)一個線性迴歸器,以收縮目標周圍的邊界框,前提是這樣的目標存在。

下圖具體描繪了上述 3 個步驟,結構示意圖
這裏寫圖片描述
換句話說,首先,我們給出一些建議區域,然後,從中提取出特徵,之後,再根據這些特徵來對這些區域進行分類。本質而言,我們將目標檢測轉化成了圖像分類問題。R-CNN 模型雖然非常直觀,但是速度很慢。

二 Fast R-CNN

直接承接 R-CNN 的是 Fast R-CNN。Fast R-CNN 在很多方面與 R-CNN 類似,但是,憑藉兩項主要的增強手段,其檢測速度較 R-CNN 有所提高:

在推薦區域之前,先對圖像執行特徵提取工作,通過這種辦法,後面只用對整個圖像使用一個 CNN(之前的 R-CNN 網絡需要在 2000 個重疊的區域上分別運行 2000 個 CNN)。將支持向量機替換成了一個 softmax 層,這種變化並沒有創建新的模型,而是將神經網絡進行了擴展以用於預測工作。

Fast R-CNN 模型結構示意圖
這裏寫圖片描述
如圖所見,現在我們基於網絡最後的特徵圖(而非原始圖像)創建了 region proposals。因此,我們對整幅圖只用訓練一個 CNN 就可以了。此外,我們使用了一個 softmax 層來直接輸出類(class)的概率,而不是像之前一樣訓練很多不同的 SVM 去對每個目標類(object class)進行分類。現在,我們只用訓練一個神經網絡,而之前我們需要訓練一個神經網絡以及很多 SVM。就速度而言,Fast R-CNN 提升了許多。

然而,存在一大未解決的瓶頸:用於生成 region proposal 的選擇搜索算法(selective search algorithm)。

三 FASTER R-CNN

到現在爲止,我們完成了對 Faster R-CNN 兩大早期模型的溯源。下面我們開始研究 Faster R-CNN。Faster R-CNN 的主要創新是,它用一個快速神經網絡代替了之前慢速的選擇搜索算法(selective search algorithm)。具體而言,它引入了一個 region proposal 網絡(RPN)。

RPN 工作原理
1.在最後卷積得到的特徵圖上,使用一個 3x3 的窗口在特徵圖上滑動,然後將其映射到一個更低的維度上(如 256 維),
2.在每個滑動窗口的位置上,RPN 都可以基於 k 個固定比例的 anchor box(默認的邊界框)生成多個可能的區域。
3,。每個 region proposal 都由兩部分組成:a)該區域的 objectness 分數。b)4 個表徵該區域邊界框的座標。

換句話說,我們會觀察我們最後特徵圖上的每個位置,然後關注圍繞它的 k 個不同的 anchor box:一個高的框、一個寬的框、一個大的框等等。對於每個這些框,不管我們是否認爲它包含一個目標,以及不管這個框裏的座標是什麼,我們都會進行輸出。下圖展示了在單個滑動框位置上發生的操作:
這裏寫圖片描述
圖中 2k 分數代表了 k 中每一個邊界框正好覆蓋「目標」的 softmax 概率。這裏注意到,儘管 RPN 輸出了邊界框的座標,然而它並不會去對任何可能的目標進行分類:它惟一的工作仍然是給出對象區域。如果一個 anchor box 在特定閾值之上存在一個「objectness」分數,那麼這個邊界框的座標就會作爲一個 region proposal 被向前傳遞。

一旦我們有了 region proposal,我們就直接把他們輸入一個本質上是 Fast R-CNN 的模型。我們再添加一個池化層、一些全連接層以及最後,一個 softmax 分類層和邊界框迴歸器(bounding box regressor)。所以在某種意義上,Faster R-CNN=RPN+Fast R-CNN。

這裏寫圖片描述
總體而言,Faster R-CNN 較 Fast R-CNN 在速度上有了大幅提升,而且其精確性也達到了最尖端的水平。值得一提的是,儘管未來的模型能夠在檢測速度上有所提升,但是幾乎沒有模型的表現能顯著超越 Faster R-CNN。換句話說,Faster R-CNN 也許不是目標檢測最簡單、最快的方法,但是其表現還是目前最佳的。例如,Tensorflow 應用 Inception ResNet 打造的 Faster R-CNN 就是他們速度最慢,但卻最精準的模型。

也許 Faster R-CNN 看起來可能會非常複雜,但是它的核心設計還是與最初的 R-CNN 一致:先假設對象區域,然後對其進行分類。目前,這是很多目標檢測模型使用的主要思路,包括我們接下來將要提到的這個模型。

四 R-FCN

還記得 Fast R-CNN 是如何通過在所有 region proposal 上共享同一個 CNN,來改善檢測速度的嗎?這也是設計 R-FCN 的一個動機:通過最大化共享計算來提升速度。

R-FCN,或稱 Region-based Fully Convolutional Net(基於區域的全卷積網絡),可以在每個輸出之間完全共享計算。作爲全卷積網絡,它在模型設計過程中遇到了一個特殊的問題。

一方面,當對一個目標進行分類任務時,我們希望學到模型中的位置不變性(location invariance):無論這隻貓出現在圖中的哪個位置,我們都想將它分類成一隻貓。另一方面,當進行目標檢測任務時,我們希望學習到位置可變性(location variance):如果這隻貓在左上角,那麼我們希望在圖像左上角這個位置畫一個框。所以,問題出現了,如果想在網絡中 100% 共享卷積計算的話,我們應該如何在位置不變性(location invariance)和位置可變性(location variance)之間做出權衡呢?

R-FCN 的解決方案:位置敏感分數圖

每個位置敏感分數圖都代表了一個目標類(object class)的一個相關位置。例如,只要是在圖像右上角檢測到一隻貓,就會激活一個分數圖(score map)。而當系統看見左下角出現一輛車時,另一個分數圖也將會被激活。本質上來講,這些分數圖都是卷積特徵圖,它們被訓練來識別每個目標的特定部位。

以下是 R-FCN 的工作方式

1、在輸入圖像上運行一個 CNN(本例中使用的是 ResNet)。
2、添加一個全卷積層,以生成位置敏感分數圖的 score bank。這裏應該有 k²(C+1) 個分數圖,其中,k²代表切分一個目標的相關位置的數量(比如,3²代表一個 3x3 的空間網格),C+1 代表 C 個類外加一個背景。
3、運行一個全卷積 region proposal 網絡(RPN),以生成感興趣區域(regions of interest,RoI)。
4、對於每個 RoI,我們都將其切分成同樣的 k²個子區域,然後將這些子區域作爲分數圖。
5、對每個子區域,我們檢查其 score bank,以判斷這個子區域是否匹配具體目標的對應位置。比如,如果我們處在「上-左」子區域,那我們就會獲取與這個目標「上-左」子區域對應的分數圖,並且在感興趣區域(RoI region)裏對那些值取平均。對每個類我們都要進行這個過程。
6、一旦每個 k²子區域都具備每個類的「目標匹配」值,那麼我們就可以對這些子區域求平均值,得到每個類的分數。
7、通過對剩下 C+1 個維度向量進行 softmax 迴歸,來對 RoI 進行分類。

下面是 R-FCN 的示意圖,用 RPN 生成 RoI:

這裏寫圖片描述
當然,即便有上述文字以及圖片的解釋,你可能仍然不太明白這個模型的工作方式。老實說,當你可以實際看到 R-FCN 的工作過程時,你會發現理解起來會更加簡單。下面就是一個在實踐中應用的 R-FCN,它正在從圖中檢測一個嬰兒:
這裏寫圖片描述
我們只用簡單地讓 R-FCN 去處理每個 region proposal,然後將其切分成子區域,在子區域上反覆詢問系統:「這看起來像是嬰兒的『上-左』部分嗎?」,「這看起來像是嬰兒的『上-中』部分嗎?」,「這看起來像是嬰兒的『上-右』部分嗎?」等等。系統會對所有類重複這個過程。如果有足夠的子區域表示「是的,我的確匹配嬰兒的這個部分!」那麼 RoI 就會通過對所有類進行 softmax 迴歸的方式被分類成一個嬰兒。」

藉助這種設置,R-FCN 便能同時處理位置可變性(location variance)與位置不變性(location invariance)。它給出不同的目標區域來處理位置可變性,讓每個 region proposal 都參考同一個分數圖 score bank 來處理位置不變形。這些分數圖應該去學習將一隻貓分類成貓,而不用管這隻貓在在那個位置。最好的是,由於它是全卷積的,所以這意味着網絡中所有的計算都是共享的。

因此,R-FCN 比 Faster R-CNN 快了好幾倍,並且可以達到類似的準確率。

五 結論

Faster R-CNN、R-FCN是目前最優且應用最廣泛的目標檢測模型。其他流行的模型通常與這三者類似,都依賴於深度 CNN(如 ResNet、Inception 等)來進行網絡初始化,且大部分遵循同樣的 proposal/分類 pipeline。

參考
http://www.99lt.com/ai/deep-learning/27282.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章