讀論文系列: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,不需要額外磁碟空間,避免重複計算,速度更快,準確率也更高。
Related work
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倍。
但是SPP-net也有缺點,SPP-net的fine-tune不能越過SPP層,因為pyramid BP開銷太大了,只能fine-tune全連接層,tune不到卷積層,所以在一些較深的網路上準確率上不去。
Fast RCNN architecture
- 首先將整個圖片輸入到一個基礎卷積網路,經過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。
- 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的梯度是這樣求的
其中
- ,也就是在 這個區域中做max pooling得到的結果,
- 是一個條件表達式,就是判斷input的 是否是max pooling的結果,如果不是,輸出的梯度就不傳到這個值上面
- r是RoI數量, 是在一個region中,與 對應的輸出個數
- 是第 個跟 對應的輸出
舉例:
也就是說,將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
- : SoftMax多分類Loss,沒啥好說的
- :bounding box regression loss
定義真實的bounding box為(vx, vy, vw, vh),預測的bounding box位置(由第二個fc層輸出,有K個類,每個類分別有4個值,分別為)txk,tyk,twk, thk
即預測位置和真實位置四個值的差值求和,其中
if otherwise
是一個軟化的L1(畫一下圖像可以看出來,在(-1,1)的範圍內是拋物線,沒L1那麼尖銳),如果採用L2 loss,需要仔細調節學習率防止梯度爆炸。
整個模型的Loss就是:
- 代表預測類別, 代表真實類別
- 意味著不算0類(也就是背景類)的bounding box loss,因為背景的bounding box沒啥意義
- λ是超參數,在論文的實驗中設為1
訓練
- ImageNet預訓練
- 最後一層換成RoI pooling層
- FC+sofmax分類層換成兩個FC,分別求softmax分類和bounding box回歸loss,每個類有自己的bounding box regressor
- 用Detection數據BP微調整個神經網路
這就比較厲害了,之前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的前t個右奇異向量,參數數量從 變成 ,當 遠小於 時,參數數量就顯著少於 。
具體實現上,將一個權重為 的全連接層拆成兩個,第一層的權重矩陣為 (並且沒有bias),第二層的權重矩陣為 (帶上 原來的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來分類會不會更好?
S M L是由淺到深的三個網路,可以看到,只用Softmax分類也能達到不錯的效果,在網路比較深的情況下,也有超越SVM的可能。
- 模型泛化能力一個模型如果能夠在更多訓練數據的條件下學到更好的特徵分布,這個模型效果越好,RBG用VOC12去訓練Fast RCNN,然後在VOC07上測試,準確率從66.9%提升到70.0%。在其他組合上也取得了提升。
注意,在訓練更大的數據的時候,需要更多的iteration,更慢的learning rate decay。
- 使用更多的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上略有下降。
推薦閱讀:
※《Detecting and Recognition Human-Object Interactions》論文筆記
※基於深度學習的「目標檢測」演算法綜述
※說一說最近很火的離線跟蹤
※目標檢測入門(二):模型的評測與訓練技巧
※優於MobileNet、YOLOv2:移動設備上的實時目標檢測系統Pelee