【目標檢測算法系列】三、Fast R-CNN算法

​前面我們學習了

【目標檢測算法系列】一、R-CNN算法

【目標檢測算法系列】二、SPP-Net算法

這篇文章我們來介紹下Fast R-CNN.

Fast R-CNN是一種用於目標檢測的快速的基於區域的卷積網絡方法。它參考了SPP-Net的一些思想,對R-CNN算法進行了進一步的改進優化。

作者論文中提到,Fast R-CNN通過VGG16的訓練結果,比R-CNN快9倍,比SPP-Net快3倍,測試時間上,比R-CNN快213倍,比SPP-Net快10倍,並且在PASCAL VOC上得到了更高的精度。

一、RCNN算法存在問題

首先,我們再次說明下R-CNN算法中的缺點

  1. 候選框選擇算法嚴重耗時

  2. 對於每個候選框都需要輸入到CNN網絡中進行特徵提取,存在大量重複操作,不能共享計算

  3. 訓練過程是多級流水線。從而使一些步驟後的輸出結果需要先寫入磁盤,然後再作爲下一步的輸入,空間開銷大

  4. 進行特徵提取時需要固定輸入圖像尺寸,從而導致一些特徵的丟失,改變。

上述問題使得R-CNN在訓練時,時間和空間上的開銷都很大,並且目標檢測的速度也很慢。

二、Fast R-CNN的改進點

針對R-CNN的上述缺點,Fast R-CNN做了如下改進:

1、特徵提取時的參數共享

2、引入ROI pooling層來提取固定長度的特徵向量

3、將特徵提取、目標分類與Bounding-box迴歸使用同一個CNN網絡,採用多任務的方式來同時進行目標類別分類與窗口位置迴歸。從而實現了端到端的多任務訓練(這塊除過候選框的提取)

4、使用SVD對網絡末尾中並行的全連接層進行分解,減少計算複雜度,提高檢測速度

三、Fast R-CNN整體步驟

Fast R-CNN的整體框架如下圖:

1、預訓練CNN網絡模型

和R-CNN一樣,在ImageNet數據集上預訓練CNN網絡模型,作者訓練了多個網絡模型,這塊我們使用VGG16模型。

2、候選區域提取

Fast R-CNN同樣使用選擇性搜索算法來提取出2000個候選框。具體如何提取,之前R-CNN中有介紹(【目標檢測算法系列】一、R-CNN算法

3、使用一個完整的CNN網絡模型來進行特徵提取,目標分類以及Bounding-box迴歸

相對於R-CNN使用流水線的模式, Fast R-CNN則使用了一個完整的CNN網絡模型來進行特徵提取,目標分類以及Bounding-box迴歸,從而實現了端到端的過程。具體模型內部流程圖如下:

首先,看下這個CNN模型的構造,在VGG16的基礎上,將卷積模塊的最後一層最大池化層去掉,替換爲一個ROI池化層。將原始VGG16網絡最後一個全連接層與softmax層替換爲兩個同級層(全連接層和K+1個類別的softmax以及類別特定的Bounding-box迴歸)。

四、具體細節實現

接下來,看下具體實現細節:

  1. 首先,模型接收兩個輸入,原始圖像與對應所有的候選框。先將原始圖片經過多個卷積層和池化層後,提取出feature map。

  2. 通過映射關係,找到對應候選框在feature map中映射的區域。

  3. 將每一個候選框所對應的feature map經過ROI池化層提取出固定長度的特徵向量。

    我們這塊看下ROI池化層的具體實現,ROI池化層,其實就是SPPNet中的空間金字塔池化層的簡化版。在ROI池化層中,將輸入的不同ROI(候選框所對應的feature map)劃分爲H*W的塊,然後在每個塊中使用最大池化層提取出一個特徵,對應池化操作獨立於每個feature map通道,最終輸出H*W*c(c爲通道數)的特徵。將輸入的特徵轉換爲特徵向量餵給後面的全連接層。(對於使用的VGG16爲基礎模型來說,這塊H*W爲7*7)

  4. 在進行全連接層時通過SVD分解來降低計算複雜度。

在圖像分類任務中,主要的計算量是在卷積模塊中,而在目標檢測模塊中,對於一張圖片來說,特徵提取只需要進行一次,但是需要針對每個候選框所對應的feature map,分別進行後續的全連接操作(2000次),從而導致近乎一半的前向計算時間被用於全連接層。所以Fast R-CNN中在進行全連接層時通過SVD分解來降低計算複雜度。具體如何操作?

設某個全連接層的參數爲u*v的矩陣W,將W進行SVD分解,並用前t個特徵值來近似代替,如下:

從而使計算複雜度變爲u*t+v*t,如果t<min(u,v),則這種分解會減少計算量。這個實際意義,相當於把一個參數量比較大的全連接層拆分爲兩個參數量比較小的全連接層,如下圖所示:

論文中作者通過實驗表明,SVD分解全連接層能使mAP只下降0.3%的情況下提升30%的速度,同時該方法也不必再執行額外的微調操作

5. 損失函數的構建

因爲有目標分類和候選框迴歸兩個同級任務,所以對應損失函數也應有分類任務的損失函數和迴歸任務的損失函數構成。

首先看分類任務,設 u 爲真實的類別標籤,u屬於(0,1,...K),背景類別標籤爲0,爲Softmax層對應的K+1個輸出,爲K+1個類別的預測概率。最終,分類任務的損失函數爲:

再看下回歸任務,迴歸任務的輸出爲

,預測的bounding box的中心位置,寬度,高度的轉換值(和R-CNN相同),真實bounding box中心位置,寬度,高度的轉換值(和R-CNN相同)。最終,迴歸任務的損失函數爲:

smooth L1損失函數曲線如下圖所示,相比於L2損失函數,其對離羣點、異常值不敏感

所以最終Fast R-CNN的損失函數爲:

約定u=0爲背景分類,那麼u>=1函數表示背景候選區域即負樣本不參與迴歸損失,不需要對候選區域進行迴歸操作; λ控制分類損失和迴歸損失的平衡,文中所有實驗λ=1.

    這就Fast R-CNN模型的整個流程,雖然,Fast R-CNN改進了R-CNN的一些問題,將檢測速度和精度都得到和很大的提高,但是,Fast R-CNN中,還是有一個可以改進的地方,那就是候選框的提取這塊,不管是R-CNN,SPP-Net,還是Fast R-CNN都是採用的傳統的selective search算法,而selective search算法中因爲用到圖像分割和大量的貪心算法,導致候選框的提取很耗時,另外,因爲候選框的提取是獨立於CNN網絡的一個模塊,所以導致Fast R-CNN並不是真正意義上的端到端的訓練模式。

    所以,我們很自然的會想到,能不能將候選框的提取也加入到CNN網絡中,使用一個CNN網絡來進行候選框的提取,分類,以及迴歸操作,從而實現真正意義上的端到端的學習過程,這就是Faster R-CNN的思想,我們下次介紹。

            歡迎關注我的個人公衆號 AI計算機視覺工坊,本公衆號不定期推送機器學習,深度學           習,計算機視覺等相關文章,歡迎大家和我一起學習,交流。

                                  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章