讀論文系列:Object Detection ICCV2015 Fast RCNN

Fast RCNN是對RCNN的性能優化版本,在VGG16上,Fast R-CNN訓練速度是RCNN的9倍, 測試速度是RCNN213倍;訓練速度是SPP-net的3倍,測試速度是SPP-net的3倍,而且達到了更高的準確率,本文爲您解讀Fast RCNN。性能優化

Overview

Fast rcnn直接從單張圖的feature map中提取RoI對應的feature map,用卷積神經網絡作分類,作bounding box regressor,不須要額外磁盤空間,避免重複計算,速度更快,準確率也更高。網絡

RCNN缺點

  • Multi-stage training

須要先預訓練卷積層,而後作region proposal, 而後用SVM對卷積層抽取的特徵作分類,最後訓練bounding-box迴歸器。性能

  • 訓練時間和空間代價很大
    訓練過程當中須要把CNN提取的特徵寫到磁盤,佔用百G級的磁盤空間,GPU訓練時間爲2.5GPU*天(用的是K40,壕,友乎?)學習

  • 目標檢測很慢
    Region proposal很慢,VGG16每張圖須要花47秒的時間測試

總結:RCNN就是慢!最主要的緣由在於不一樣的Region Proposal有着大量的重複區域,致使大量的feature map重複計算。優化

SPP-net

SPP-net中則提出只過一遍圖,從最後的feature map裁剪出須要的特徵,而後由Spatial pyramid pooling層將其轉爲固定尺寸特徵,因爲沒有重複計算feature map,訓練速度提高3倍,測試速度提高了10-100倍。3d

可是SPP-net也有缺點,SPP-net的fine-tune不能越過SPP層,由於pyramid BP開銷太大了,只能fine-tune全鏈接層,tune不到卷積層,因此在一些較深的網絡上準確率上不去。blog

Fast RCNN architecture

Fast RCNN

  • 首先將整個圖片輸入到一個基礎卷積網絡,通過max pooling獲得整張圖的feature map,
  • 而後用一個RoI pooling層爲region proposal從feature map中提取一個固定長度的特徵向量,
  • 每一個特徵會輸入到一系列全鏈接層,獲得一個RoI特徵向量,
  • 再分叉傳入兩個全鏈接層輸出,
    • 其中一個是傳統softmax層進行分類,
    • 另外一個是bounding box regressor,
  • 根據RoI特徵向量(其中包含了原圖中的空間信息)和原來的Region Proposal位置迴歸真實的bounding box位置(如RCNN作的那樣,可是是用神經網絡來實現)。

其餘都是一目瞭然的,接下來主要講RoI pooling圖片

RoI pooling

咱們能夠根據卷積運算的規則,推算出原圖的region對應feature map中的哪一部分。可是由於原圖region的大小不一,這些region對應的feature map尺寸是不固定的,RoI pooling就是爲了獲得固定大小的feature map。input

  • RoI pooling層使用max pooling將不一樣的RoI對應的feature map轉爲固定大小的feature map。
    • 首先將h * w的feature map劃分爲H * W個格子
    • 對每一個格子中的元素作max pooling

因爲多個RoI會有重複區域,因此max pooling時,feature map裏同一個值可能對應pooling output的多個值。因此BP算梯度的時候,從RoI pooling層output y到input x的梯度是這樣求的

RoI gradient

其中

  • i *(r, j) = argmaxi'∈R(r,j) xi',也就是在R(r, j)這個區域中作max pooling獲得的結果,
  • i = i * (r, j) 是一個條件表達式,就是判斷input的xi是不是max pooling的結果,若是不是,輸出的梯度就不傳到這個值上面
  • r是RoI數量,j是在一個region中,與x對應的輸出個數
  • yrj是第j個跟x對應的輸出

舉例:

RoI pooling BP

也就是說,將Loss對輸出的梯度,傳回到max pooling對應的那個feature unit上,再往回傳

其實這是SPPnet的一個特例,是Spatial pooling,沒有pyramid,也所以計算量大大減小,可以實現FC到CNN的梯度反向傳播,而且,實驗發現其實feature pyramid對準確率提高不大。卻是原圖層面的Pyramid做用大些:

  • 訓練時,爲每張訓練圖片隨機選一個尺度,縮放後扔進網絡學
  • 測試時,用image pyramid爲每張測試圖片中的region proposal作尺度歸一化(將它們縮放到224x224)

可是這種Pyramid方法計算代價比較大,因此Fast RCNN中只在小模型上有這樣作

Multi-task loss

  • Lcls: SoftMax多分類Loss,沒啥好說的
  • LIoc:bounding box regression loss

定義真實的bounding box爲(vx, vy, vw, vh),預測的bounding box位置(由第二個fc層輸出,有K個類,每一個類分別有4個值,分別爲)txk,tyk,twk, thk

LIoc(tk, v) = ∑i∈{x,y,w,h} smoothL1(tik - vi)

即預測位置和真實位置四個值的差值求和,其中

smoothL1(x) = 0.5x2 if |x|<1 otherwise |x|-0.5

是一個軟化的L1(畫一下圖像能夠看出來,在(-1,1)的範圍內是拋物線,沒L1那麼尖銳),若是採用L2 loss,須要仔細調節學習率防止梯度爆炸。
smooth L1

整個模型的Loss就是:

L(p, k, tk, v) = Lcls(p, k) + λ|k ≥ 1| LIoc(tu, v)

  • p表明預測類別,k表明真實類別
  • k≥1意味着不算0類(也就是背景類)的bounding box loss,由於背景的bounding box沒啥意義
  • λ是超參數,在論文的實驗中設爲1

訓練

  • ImageNet預訓練
  • 最後一層換成RoI pooling層
  • FC+sofmax分類層換成兩個FC,分別求softmax分類和bounding box迴歸loss,每一個類有本身的bounding box regressor
  • 用Detection數據BP微調整個神經網絡

這就比較厲害了,誰不喜歡end to end,以前RCNN是須要分開微調SVM分類層和bounding box regressor的

前面講了RoI pooling使得梯度反向傳播到卷積層成爲可能,可是這種BP訓練仍然很耗顯存和時間,尤爲是在輸入的ROI屬於不一樣圖片時,由於單張圖的feature map是不存到磁盤的,當一張圖的幾個RoI和其餘圖的幾個RoI混在一塊兒交替輸入時,須要反覆前向傳播計算feature map,再pooling,實際上也就反覆計算了feature map。

在Fast RCNN的訓練中,每次輸入兩張圖(這麼小的batch size),每張圖取64個ROI,單張圖的多個ROI在前向計算和後向傳播過程當中是共享feature map的的,這樣就加快了訓練速度。

然而,這犯了訓練中的一個忌諱,實際上,至關於訓練數據(ROI)沒有充分shuffle,但在Fast RCNN的實驗中效果還行,就先這樣搞了。

樣本篩選

  • 正樣本:與bounding box有超過50%重疊率的
  • 負樣本(背景):與bounding box重疊率位於0.1到0.5之間的。

Truncated SVD加速全鏈接層運算

  • Truncated SVD

W ≈ U∑tVT

將u×v大小的矩陣W分解爲三個矩陣相乘,其中,U是一個u×t的矩陣,包含W的前t個左奇異向量,∑t是一個t×t的對角矩陣,包含W的前t個上奇異向量,VT是一個v×t的矩陣,包含W的錢t個右奇異向量,參數數量從uv變成t(u+v),當t遠小於min(u,v)時,參數數量就顯著少於W。

具體實現上,將一個權重爲W的全鏈接層拆成兩個,第一層的權重矩陣爲∑tVT(而且沒有bias),第二層的權重矩陣爲U(帶上W原來的bias)。

在Fast RCNN中,Truncated SVD減小了30%的訓練時間。

實驗結果

PK現有方法

  • 在VOC12上取得65.7%的mAP,是當時的SOA
  • 在VGG16上,Fast R-CNN訓練速度是RCNN的9倍, 測試速度是RCNN213倍;
  • 訓練速度是SPP-net的3倍,測試速度是SPP-net的3倍

創新點必要性驗證

  • RoI pooling是否比SPP更優?(是否有fine tune卷積層的必要?)
    • 使用VGG16,在Fast RCNN中凍結卷積層,只fine tune全鏈接層:61.4%
    • 使用VGG16,在Fast RCNN中fine tune整個網絡:66.9%
  • Multi Loss(Softmax + bb regressor)是否比Single task(只用Softmax loss)更優?stage-wise和Multi Task同時進行(end2end)哪一個更優?

在VOC07上,end2end + bb regressor > stage-wise+ bb regressor > end2end

  • Image Pyramid是否必須?
    實際上,使用Pyramid在Fast RCNN上只提高了1%左右,因此這個也沒被列爲正式的創新點

  • 若是用SVM來分類會不會更好?

image.png

S M L是由淺到深的三個網絡,能夠看到,只用Softmax分類也能達到不錯的效果,在網絡比較深的狀況下,也有超越SVM的可能。

  • 模型泛化能力
    一個模型若是可以在更多訓練數據的條件下學到更好的特徵分佈,這個模型效果越好,RBG用VOC12去訓練Fast RCNN,而後在VOC07上測試,準確率從66.9%提高到70.0%。在其餘組合上也取得了提高。

注意,在訓練更大的數據的時候,須要更多的iteration,更慢的learning rate decay。

  • 使用更多的Region Proposal效果會不會更好?(不是很想講這方面,太玄學)

More Region Proposal

圖中紅色線表示Average Recall,一般人們用Average Recall來評價Region Proposal的效果,然而,proposals越多,AR這個指標一直往上漲,但實際上的mAP並無上升,因此使用AR這個指標比較各類方法的時候要當心,控制proposal的數量這個變量不變。

圖中藍色線表示mAP(= AVG(AP for each object class)),能夠看到,

  • 太多的Region Proposal反而會損害Fast RCNN的準確度
  • DPM使用滑動窗口+層次金字塔這種方法提供密集的候選區域,用在Fast RCNN上略有降低。
相關文章
相關標籤/搜索