深度学习和目标检测系列教程 6-300:目标检测Fast-RCNN架构
@Author:Runsen
使用 R-CNN 進行對象檢測存在一些缺點。
- R-CNN 消耗了大量的時間、存儲和計算能力。
- R-CNN 有一個復雜的多階段訓練管道(3 階段——對數損失、SVM 和 BBox 回歸器的 L2 損失)
上一篇論文的同一作者(R-CNN)解決了 R-CNN 的一些缺點,構建了一個更快的對象檢測算法,被稱為 Fast R-CNN。
Fast R-CNN模型不是將區域候選框提供給 CNN,而是將輸入圖像提供給 CNN 以生成 特征向量。
將它們聚合到整個圖像的一個 CNN 前向傳遞中,并且區域提議共享此特征矩陣。然后將相同的特征矩陣用于學習對象分類器和邊界框回歸器。總之,計算共享加速了 R-CNN。
在 Fast R-CNN 中,圖像只被送入底層 CNN 一次,而選擇性搜索則像往常一樣運行。這些由選擇性搜索生成的區域提議然后被投影到由 CNN 生成的特征圖上。這個過程稱為ROI Projection(感興趣區域)。
RoI Pooling
RoI Pooling一種最大池化,將任意大小的圖像投影區域h x w中的特征轉換為一個小的H x W固定窗口。
讓我們考慮一個小例子來看看RoI Pooling
是如何工作的。我們將在單個 8×8 特征圖、一個感興趣區域和 2×2 的輸出大小上執行感興趣區域池化。輸入特征圖如下所示:
假設我們還有一個區域候選框(左上角,右下角坐標):(0, 3), (7, 8)。在圖片中它看起來像這樣:
通常情況下,每個圖片都會有多個特征圖和多個候選框,在示例中認為輸出大小為 2×2,因此將其分成 (2×2) 個部分。
請注意,感興趣區域的大小不必完全被池化部分的數量整除(在這種情況下,RoI 是 7×5,有 2×2 個池化部分)。
每個部分的最大值是:
這就是區域候選框RoI Pooling的輸出。
上面實例代碼:https://github.com/deepsense-ai/roi-pooling
工作原理
Fast R-CNN 的工作原理總結如下:許多步驟與 R-CNN 相同:
- 首先,在圖像分類任務上預訓練卷積神經網絡。
- 通過選擇性搜索提出區域(每張圖像約 2k 個候選)。
- 改變預訓練的 CNN:
- 用 RoI 池化層替換預訓練 CNN 的最后一個最大池化層。RoI 池化層輸出區域提議的固定長度特征向量。共享 CNN 計算很有意義,因為相同圖像的許多區域提議高度重疊。
- 用全連接層和 K+1 類上的 softmax 替換最后一個全連接層和最后一個 softmax 層(K 個類別)。
- 最后,模型分支為兩個輸出層:
- K + 1 個類別的 softmax 估計器,輸出每個 RoI 的離散概率分布。
- 一個邊界框回歸模型,它預測相對于 K 個類別中每個類別的原始 RoI 的偏移量。
“Fast R-CNN”之所以比 R-CNN 快,是因為不必每次都向卷積神經網絡輸入 2000 個區域候選框。相反,每個圖像只進行一次卷積操作,并從中生成一個特征圖。
附上Fast-RCNN 相關Github代碼:
- https://github.com/rbgirshick/fast-rcnn
總結
以上是生活随笔為你收集整理的深度学习和目标检测系列教程 6-300:目标检测Fast-RCNN架构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 房子只占百分之一份额可以强制执行吗?
- 下一篇: 办公楼卫生间台盆柜安装费多少钱一个?