區域卷積神經網絡(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主要由如下四步構成:性能
R-CNN雖然經過預訓練的卷積神經網絡有效抽取了圖像特徵,但它的主要缺點是速度慢。想象一下,咱們可能從一張圖像中選出上千個提議區域,對該圖像作目標檢測將致使上千次的卷積神經網絡的前向計算。這個巨大的計算量令R-CNN難以在實際應用中被普遍採用學習
Fast R-CNNspa
R-CNN的主要性能瓶頸在於須要對每一個提議區域獨立抽取特徵。因爲這些區域一般有大量重疊,獨立的特徵抽取會致使大量的重複計算。Fast R-CNN對R-CNN的一個主要改進在於只對整個圖像作卷積神經網絡的前向計算。設計
描述了Fast R-CNN模型。它的主要計算步驟以下: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相比,只有生成提議區域的方法從選擇性搜索變成了區域提議網絡,而其餘部分均保持不變。具體來講,區域提議網絡的計算步驟以下:
值得一提的是,區域提議網絡做爲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基礎上引入一個全卷積網絡,從而藉助目標的像素級位置進一步提高目標檢測的精度。
複製代碼