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

​前面咱們學習了算法

【目標檢測算法系列】1、R-CNN算法網絡

【目標檢測算法系列】2、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上獲得了更高的精度。post

1、RCNN算法存在問題

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

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

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

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

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

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

2、Fast R-CNN的改進點

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

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

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

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

四、使用SVD對網絡末尾中並行的全鏈接層進行分解,減小計算複雜度,提升檢測速度

3、Fast R-CNN總體步驟

Fast R-CNN的總體框架以下圖:

一、預訓練CNN網絡模型

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

二、候選區域提取

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

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

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

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

4、具體細節實現

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

  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分解來下降計算複雜度。

  5. 在圖像分類任務中,主要的計算量是在卷積模塊中,而在目標檢測模塊中,對於一張圖片來講,特徵提取只須要進行一次,可是須要針對每一個候選框所對應的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計算機視覺工坊,本公衆號不按期推送機器學習,深度學           習,計算機視覺等相關文章,歡迎你們和我一塊兒學習,交流。

                                  

相關文章
相關標籤/搜索