基于区域的CNN(R-CNN)
基于區域的CNN(R-CNN)
Region-based CNNs (R-CNNs)
基于區域的卷積神經網絡或具有CNN特征的區域(R-CNN)是一種將深度模型應用于目標檢測的開創性方法。在本節中,將討論R-CNN及其一系列改進:Fast R-CNN[Girshick,2015]、Faster R-CNN和Mask
R-CNN。由于篇幅的限制,將把討論局限于這些模型的設計上。
- R-CNNs
R-CNN模型首先從一幅圖像中選擇幾個建議的區域(例如,錨框是一種選擇方法),然后標記類別和邊界框(例如偏移量)。然后,使用CNN進行前向計算,從每個提議的區域提取特征。然后,利用每個區域的特征來預測類別和邊界框。圖1顯示了R-CNN模型。
Fig. 1 R-CNN model.
具體而言,R-CNN由四個主要部分組成:
對輸入圖像執行選擇性搜索以選擇多個高質量的建議區域。這些建議的區域通常在多個尺度上選擇,并且具有不同的形狀和大小。對每個建議區域的類別和真實邊界框進行標記。
一個預先訓練的CNN被選擇并以截短的形式放置在輸出層之前。將每個提出的區域轉換成網絡所需的輸入維數,并使用正向計算輸出從該區域提取的特征。
以每個區域的特征和標記類別為例,訓練多個支持向量機進行目標分類。在這里,每個支持向量機被用來確定一個例子是否屬于某個類別。
以每個區域的特征和標記邊界盒為例,訓練了一個用于真實邊界盒預測的線性回歸模型。
雖然R-CNN模型使用預先訓練的CNN來有效地提取圖像特征,但其主要缺點是速度慢。正如所想象的,可以從一張圖像中選擇數千個建議區域,這需要CNN進行數千次前向計算來執行目標檢測。這種巨大的計算負載意味著R-cnn在實際應用中并沒有得到廣泛的應用。
- Fast R-CNN
R-CNN模型的主要性能瓶頸是需要為每個提出的區域獨立提取特征。由于這些區域具有高度的重疊,獨立的特征提取會導致大量的重復計算。快速R-CNN改進了R-CNN,只對圖像進行CNN前向計算。
Fig. 2 Fast R-CNN model.
圖2顯示了快速R-CNN模型。主要計算步驟如下:
與R-CNN模型相比,快速R-CNN模型使用整個圖像作為CNN的輸入進行特征提取,而不是每個區域。此外,該網絡通常被訓練來更新模型參數。由于輸入是一個完整的圖像,CNN的輸出形狀是1×c×h1×w11×c×h1×w1。
假設選擇性搜索生成 n建議的區域,不同形狀表示CNN輸出上不同形狀的感興趣區域(roi)。必須從這些ROI中提取相同形狀的特征(這里假設高度為h2,寬度為w2)。快速R-CNN引入了RoI池,使用CNN輸出和RoI作為輸入,輸出從每個建議區域提取的特征與形狀的連接 n×c×h2×w。
一個全連接的層用于將輸出形狀轉換為n×d,其中d由模型設計決定。
在類別預測期間,完全連接層輸出的形狀再次轉換為n×q。使用softmax回歸(q是類別的數量)。在邊界盒預測期間,全連接層輸出的形狀再次轉換為n×4。這意味著預測每個建議區域的類別和邊界框。
Fast R-CNN中的RoI池層與之前討論過的池化層有些不同。在普通的池層中,設置池化窗口、填充和步幅來控制輸出形狀。在RoI池化層中,可以直接指定每個區域的輸出形狀,例如將每個區域的高度和寬度指定為h2, w2.
假設窗口的寬度h和w,此窗口被劃分為具有形狀的子窗口的網格h2×w2。每個子窗口的大小約為(h/h2)×(w/w2)。子窗口的高度和寬度必須始終為整數,并且將最大元素用作給定子窗口的輸出。這允許RoI池化層從不同形狀的RoI中提取相同形狀的特征。
在圖3中,選擇3×3區域作為投資回報率4×4輸入。對于這個投資回報率,使用2×2 RoI池化層2×2輸出。當將區域劃分為四個子窗口時,分別包含元素0、1、4和5(5是最大的);2和6(6是最大的);8和9(9是最大的);和10。
Fig. 3 2×22×2 RoI pooling layer.
使用ROIPooling函數來演示RoI池層的計算。假設CNN提取的特征X的高度和寬度都是4并且只有一個通道。
from mxnet import np, npx
npx.set_np()
X = np.arange(16).reshape(1, 1, 4, 4)
X
array([[[[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],[ 8., 9., 10., 11.],[12., 13., 14., 15.]]]])
假設圖像的高度和寬度都是40像素,并且選擇性搜索在圖像上生成兩個建議的區域。每個區域用五個元素表示:區域的對象類別和其左上角和右下角的坐標x、 y。
rois = np.array([[0, 0, 0, 20, 20], [0, 0, 10, 30, 30]])
因為X的高度和寬度是圖像的高度和寬度的1/10,將兩個區域的坐標按spatial_scale乘以0.1,然后在X上標記為X[:,:,0:3,0:3]和X[:,:,1:4,0:4]。最后,將兩個ROI劃分為一個子窗口網格,提取高度和寬度為2的特征。
npx.roi_pooling(X, rois, pooled_size=(2, 2), spatial_scale=0.1)
array([[[[ 5., 6.],
[ 9., 10.]]],[[[ 9., 11.],[13., 15.]]]])
- Faster R-CNN
為了獲得精確的目標檢測結果,快速R-CNN通常要求在選擇性搜索中生成多個建議區域。更快的R-CNN用區域建議網絡代替選擇性搜索。這樣可以減少生成的建議區域的數量,同時確保精確的目標檢測。
Fig. 4 Faster R-CNN model.
圖4顯示了一個更快的R-CNN模型。與快速R-CNN相比,更快的R-CNN只改變了生成區域的方法,從選擇性搜索到區域建議網絡。模型的其部分保持不變。詳細的區域方案網絡計算過程如下:
使用3×3卷積層,填充為1,用于轉換CNN輸出并將輸出通道數設置為c。這樣,CNN從圖像中提取的特征映射中的每個元素都是一個長度為c的新特征。使用特征圖中的每個元素作為中心來生成不同大小和高寬比的多個錨框,然后標記。使用長度元素的特征c在錨框的中心位置預測二進制類別(對象或背景)和各自錨框的邊界框。然后,使用非最大值抑制來移除與“對象”類別預測相對應的類似邊界框結果。最后,將預測的邊界框輸出為RoI池層所需的區域。
值得注意的是,作為快速R-CNN模型的一部分,區域提案網絡與模型的其部分一起訓練。此外,快速R-CNN目標函數包括目標檢測中的類別和邊界盒預測,以及區域建議網絡中錨盒的二元類別和邊界盒預測。最后,區域建議網絡可以學習如何生成高質量的建議區域,從而在保持目標檢測精度的同時減少建議區域的數量。
- Mask R-CNN
如果訓練數據被標記為圖像中每個目標的像素級位置,則掩模R-CNN模型可以有效地利用這些細節標簽進一步提高目標檢測的精度。
Fig. 5 Mask R-CNN model.
如圖5所示,掩模R-CNN是對更快的R-CNN模型的改進。掩模R-CNN模型用RoI對齊層代替RoI池化層。這允許使用雙線性插值來保留特征地圖上的空間信息,使掩模R-CNN更適合像素級預測。RoI對齊層為所有RoI輸出相同形狀的特征映射。這不僅可以預測roi的類別和邊界框,而且允許使用額外的完全卷積網絡來預測對象的像素級位置。將在本章后面描述如何使用完全卷積網絡來預測圖像中的像素級語義。
- Summary
An R-CNN model selects several proposed regions and uses a CNN to perform forward computation and extract the features from each proposed region. It then uses these features to predict the categories and bounding boxes of proposed regions.
Fast R-CNN improves on the R-CNN by only performing CNN forward computation on the image as a whole. It introduces an RoI pooling layer to extract features of the same shape from RoIs of different shapes.
Faster R-CNN replaces the selective search used in Fast R-CNN with a region proposal network. This reduces the number of proposed regions generated, while ensuring precise object detection.
Mask R-CNN uses the same basic structure as Faster R-CNN, but adds a fully convolution layer to help locate objects at the pixel level and further improve the precision of object detection.
總結
以上是生活随笔為你收集整理的基于区域的CNN(R-CNN)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于Kaggle的图像分类(CIFAR-
- 下一篇: 图像合成与风格转换实战