區域卷積神經網絡(R-CNN)筆記

區域卷積神經網絡(region-based CNN或regions with CNN features,簡稱R-CNN)是將深度模型應用於目標檢測的開創性工做之一 [1]。本節中,咱們將介紹R-CNN和它的一系列改進方法:快速的R-CNN(Fast R-CNN)[3]、更快的R-CNN(Faster R-CNN)[4] 以及掩碼R-CNN(Mask R-CNN)[5]。限於篇幅,這裏只介紹這些模型的設計思路。bash


R-CNN網絡

R-CNN首先對圖像選取若干提議區域(例如錨框也是一種選取方法)並標註它們的類別和邊界框(例如偏移量)。而後,用卷積神經網絡對每一個提議區域作前向計算抽取特徵。以後,咱們用每一個提議區域的特徵預測類別和邊界框函數

具體來講,R-CNN主要由如下四步構成:性能

  • 對輸入圖像使用選擇性搜索(selective search)來選取多個高質量的提議區域。這些提議區域一般是在多個尺度下選取的,並具備不一樣的形狀和大小。每一個提議區域將被標註類別和真實邊界框。
  • 選取一個預訓練的卷積神經網絡,並將其在輸出層以前截斷。將每一個提議區域變形爲網絡須要的輸入尺寸,並經過前向計算輸出抽取的提議區域特徵。
  • 將每一個提議區域的特徵連同其標註的類別做爲一個樣本,訓練多個支持向量機對目標分類。其中每一個支持向量機用來判斷樣本是否屬於某一個類別。
  • 將每一個提議區域的特徵連同其標註的邊界框做爲一個樣本,訓練線性迴歸模型來預測真實邊界框。

R-CNN雖然經過預訓練的卷積神經網絡有效抽取了圖像特徵,但它的主要缺點是速度慢。想象一下,咱們可能從一張圖像中選出上千個提議區域,對該圖像作目標檢測將致使上千次的卷積神經網絡的前向計算。這個巨大的計算量令R-CNN難以在實際應用中被普遍採用學習

Fast R-CNNspa

R-CNN的主要性能瓶頸在於須要對每一個提議區域獨立抽取特徵。因爲這些區域一般有大量重疊,獨立的特徵抽取會致使大量的重複計算。Fast R-CNN對R-CNN的一個主要改進在於只對整個圖像作卷積神經網絡的前向計算。設計

描述了Fast R-CNN模型。它的主要計算步驟以下:

  • 與R-CNN相比,Fast R-CNN用來提取特徵的卷積神經網絡的輸入是整個圖像,而不是各個提議區域。並且,這個網絡一般會參與訓練,即更新模型參數。設輸入爲一張圖像,將卷積神經網絡的輸出的形狀記爲 1×c×h1×w1 。
  • 假設選擇性搜索生成 n 個提議區域。這些形狀各異的提議區域在卷積神經網絡的輸出上分別標出形狀各異的興趣區域。這些興趣區域須要抽取出形狀相同的特徵(假設高和寬均分別指定爲 h2,w2 )。Fast R-CNN引入興趣區域池化層(Region of Interest Pooling,簡稱RoI池化層),將卷積神經網絡的輸出和提議區域做爲輸入,輸出連結後的各個提議區域抽取的特徵,形狀爲 n×c×h2×w2 。
  • 經過全鏈接層將輸出形狀變換爲 n×d ,其中 d 取決於模型設計。
  • 類別預測時,將全鏈接層的輸出的形狀再變換爲 n×q 並使用softmax迴歸( q 爲類別個數)。邊界框預測時,將全鏈接層的輸出的形狀再變換爲 n×4 。也就是說,咱們爲每一個提議區域預測類別和邊界框。

Fast R-CNN中提出的興趣區域池化層跟咱們以前介紹過的池化層有所不一樣。在池化層中,咱們經過設置池化窗口、填充和步幅來控制輸出形狀。而興趣區域池化層對每一個區域的輸出形狀是能夠直接指定的,例如指定每一個區域輸出的高和寬分別爲 h2,w2 。假設某一興趣區域窗口的高和寬分別爲 h 和 w ,該窗口將被劃分爲形狀爲 h2×w2 的子窗口網格,且每一個子窗口的大小大約爲 (h/h2)×(w/w2) 。任一子窗口的高和寬要取整,其中的最大元素做爲該子窗口的輸出。所以,興趣區域池化層可從形狀各異的興趣區域中均抽取出形狀相同的特徵。3d

咱們在 4×4 的輸入上選取了左上角的 3×3 區域做爲興趣區域。對於該興趣區域,咱們經過 2×2 的興趣區域池化層獲得一個 2×2 的輸出。四個劃分後的子窗口分別含有元素0、一、四、5(5最大),二、6(6最大),八、9(9最大),10。rest

咱們使用ROIPooling函數來演示興趣區域池化層的計算。假設卷積神經網絡抽取的特徵X的高和寬均爲4且只有單通道。code

Faster R-CNN

Fast R-CNN一般須要在選擇性搜索中生成較多的提議區域,以得到較精確的目標檢測結果。Faster R-CNN提出將選擇性搜索替換成區域提議網絡(region proposal network),從而減小提議區域的生成數量,並保證目標檢測的精度。

與Fast R-CNN相比,只有生成提議區域的方法從選擇性搜索變成了區域提議網絡,而其餘部分均保持不變。具體來講,區域提議網絡的計算步驟以下:

  • 使用填充爲1的 3×3 卷積層變換卷積神經網絡的輸出,並將輸出通道數記爲 c 。這樣,卷積神經網絡爲圖像抽取的特徵圖中的每一個單元均獲得一個長度爲 c 的新特徵。
  • 以特徵圖每一個單元爲中心,生成多個不一樣大小和寬高比的錨框並標註它們。
  • 用錨框中心單元長度爲 c 的特徵分別預測該錨框的二元類別(含目標仍是背景)和邊界框。
  • 使用非極大值抑制,從預測類別爲目標的預測邊界框中移除類似的結果。最終輸出的預測邊界框即興趣區域池化層所須要的提議區域。

值得一提的是,區域提議網絡做爲Faster R-CNN的一部分,是和整個模型一塊兒訓練獲得的。也就是說,Faster R-CNN的目標函數既包括目標檢測中的類別和邊界框預測,又包括區域提議網絡中錨框的二元類別和邊界框預測。最終,區域提議網絡可以學習到如何生成高質量的提議區域,從而在減小提議區域數量的狀況下也能保證目標檢測的精度。

Mask R-CNN

若是訓練數據還標註了每一個目標在圖像上的像素級位置,那麼Mask R-CNN能有效利用這些詳盡的標註信息進一步提高目標檢測的精度。

Mask R-CNN在Faster R-CNN的基礎上作了修改。Mask R-CNN將興趣區域池化層替換成了興趣區域對齊層,即經過雙線性插值(bilinear interpolation)來保留特徵圖上的空間信息,從而更適於像素級預測。興趣區域對齊層的輸出包含了全部興趣區域的形狀相同的特徵圖。它們既用來預測興趣區域的類別和邊界框,又經過額外的全卷積網絡預測目標的像素級位置。

小結

R-CNN對圖像選取若干提議區域,而後用卷積神經網絡對每一個提議區域作前向計算抽取特徵,再用這些特徵預測提議區域的類別和邊界框。
Fast R-CNN對R-CNN的一個主要改進在於只對整個圖像作卷積神經網絡的前向計算。它引入了興趣區域池化層,從而令興趣區域可以抽取出形狀相同的特徵。
Faster R-CNN將Fast R-CNN中的選擇性搜索替換成區域提議網絡,從而減小提議區域的生成數量,並保證目標檢測的精度。
Mask R-CNN在Faster R-CNN基礎上引入一個全卷積網絡,從而藉助目標的像素級位置進一步提高目標檢測的精度。

複製代碼
相關文章
相關標籤/搜索