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