視頻人工智能論文系列:Object Detection ICCV2015 Fast RCNN

ast 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

視頻人工智能論文系列:Object Detection ICCV2015 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。

  • 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的梯度是這樣求的

視頻人工智能論文系列:Object Detection ICCV2015 Fast RCNN

其中

  • 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對應的輸出

舉例:

視頻人工智能論文系列:Object Detection ICCV2015 Fast RCNN

也就是說,將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, v

w, 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,需要仔細調節學習率防止梯度爆炸。

視頻人工智能論文系列:Object Detection ICCV2015 Fast RCNN

整個模型的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來分類會不會更好?
視頻人工智能論文系列:Object Detection ICCV2015 Fast RCNN

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

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

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

  • 使用更多的Region Proposal效果會不會更好?(不是很想講這方面,太玄學)
視頻人工智能論文系列:Object Detection ICCV2015 Fast RCNN

圖中紅色線表示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上略有下降。


分享到:


相關文章: