除了第 14.7 節中描述的單次多框檢測之外,基于區域的 CNN 或具有 CNN 特征的區域 (R-CNN) 也是將深度學習應用于對象檢測的許多開創性方法之一 (Girshick等人,2014 年)。在本節中,我們將介紹 R-CNN 及其一系列改進:fast R-CNN ( Girshick, 2015 )、faster R-CNN ( Ren et al. , 2015 )和掩模 R-CNN ( He等,2017)。由于篇幅有限,我們將只關注這些模型的設計。
14.8.1。R-CNN
R -CNN首先從輸入圖像中提取許多(例如,2000 個)region proposals (例如,anchor boxes 也可以被認為是 region proposals),標記它們的類別和邊界框(例如,offsets)。
然后使用 CNN 對每個候選區域執行前向傳播以提取其特征。接下來,每個區域提案的特征用于預測該區域提案的類別和邊界框。
圖 14.8.1顯示了 R-CNN 模型。更具體地說,R-CNN包括以下四個步驟:
-
執行選擇性搜索以在輸入圖像上提取多個高質量區域建議 (Uijlings等人,2013 年)。這些提議的區域通常是在具有不同形狀和大小的多個尺度上選擇的。每個區域提案都將標有一個類別和一個真實邊界框。
-
選擇一個預訓練的 CNN 并在輸出層之前截斷它。resize每個region proposal到網絡需要的輸入大小,通過前向傳播輸出為region proposal提取的特征。
-
以每個region proposal的提取特征和標注類別為例。訓練多個支持向量機對對象進行分類,其中每個支持向量機單獨確定示例是否包含特定類。
-
以每個region proposal的提取特征和標注bounding box為例。訓練線性回歸模型來預測地面實況邊界框。
盡管 R-CNN 模型使用預訓練的 CNNs 來有效地提取圖像特征,但速度很慢。想象一下,我們從單個輸入圖像中選擇了數千個區域建議:這需要數千個 CNN 前向傳播來執行對象檢測。這種龐大的計算負載使得在實際應用中廣泛使用 R-CNN 變得不可行。
14.8.2。快速 R-CNN
R-CNN 的主要性能瓶頸在于每個 region proposal 的獨立 CNN 前向傳播,沒有共享計算。由于這些區域通常有重疊,獨立的特征提取會導致大量重復計算。Fast R-CNN相比 R-CNN的主要改進之一是 CNN 前向傳播僅在整個圖像上進行 ( Girshick, 2015 )。
圖 14.8.2描述了快速 R-CNN 模型。其主要計算如下:
-
與 R-CNN 相比,在快速 R-CNN 中,CNN 用于特征提取的輸入是整個圖像,而不是單個區域建議。此外,這個 CNN 是可訓練的。給定輸入圖像,讓 CNN 輸出的形狀為 1×c×h1×w1.
-
假設選擇性搜索生成n區域提案。這些區域提議(不同形狀)在 CNN 輸出上標記感興趣區域(不同形狀)。然后這些感興趣的區域進一步提取相同形狀的特征(比如高度 h2和寬度w2指定)以便于連接。為了實現這一點,快速 R-CNN 引入了 感興趣區域 (RoI) 池化層:CNN 輸出和區域提議被輸入到該層,輸出形狀的級聯特征n×c×h2×w2為所有區域提案進一步提取。
-
使用全連接層,將連接的特征轉換為形狀的輸出n×d, 在哪里d取決于模型設計。
-
預測每個類別和邊界框n區域提案。更具體地說,在類和邊界框預測中,將全連接層輸出轉換為形狀的輸出 n×q(q是類的數量)和形狀的輸出n×4, 分別。類別預測使用 softmax 回歸。
fast R-CNN 中提出的感興趣區域池化層與7.5 節中介紹的池化層不同。在池化層中,我們通過指定池化窗口、填充和步幅的大小來間接控制輸出形狀。相反,我們可以直接在感興趣區域池化層中指定輸出形狀。
例如,讓我們將每個區域的輸出高度和寬度指定為h2和w2, 分別。對于形狀的任何感興趣區域窗口h×w, 這個窗口被分為 h2×w2子窗口的網格,其中每個子窗口的形狀大約是(h/h2)×(w/w2). 在實際應用中,任何一個子窗口的高和寬都要向上取整,最大的元素作為子窗口的輸出。因此,即使感興趣區域具有不同的形狀,感興趣區域池化層也可以提取相同形狀的特征。
作為說明性示例,在圖 14.8.3中,左上角 3×3感興趣的區域被選擇在4×4 輸入。對于這個感興趣的區域,我們使用2×2感興趣區域池化層以獲得2×2輸出。請注意,四個劃分的子窗口中的每一個都包含元素 0、1、4 和 5(5 是最大值);2 和 6(6 是最大值);8 和 9(9 是最大值);和 10。
下面我們演示感興趣區域池化層的計算。假設CNN提取的特征的高和寬 X
都是4,并且只有一個通道。
讓我們進一步假設輸入圖像的高度和寬度均為 40 像素,并且選擇性搜索在該圖像上生成兩個區域建議。每個區域建議由五個元素表示:其對象類,后跟(x,y)- 其左上角和右下角的坐標。
rois = torch.Tensor([[0
評論
查看更多