作者:Ross Girshick
ICCV 2015
概要
FastRCNN是RCNN和SPPnet的改進版。Fast RCNN在訓練的時候比RCNN快9倍,比SPPnet快3倍;測試的時候比RCNN快213倍,比SPPnet快10倍。最後在PASCAL VOC 2012上達到66%的mAP。
RCNN與SPPnet存在的缺點
1. 訓練是多階段的。先提proposal,然後CNN提取特徵,之後用SVM分類器,最後再做bounding-box regression。
2. 訓練非常耗費時間和空間(存儲)。在訓練SVM和bbox regression的時候,需要先將之前提取出來的特徵寫入磁盤中,這些特徵需要花費的空間很大;這個過程也非常耗費時間。
3. 物體檢測非常慢。測試的時候,特徵需要從每個圖片中的每個proposal提取,使用VGG16網絡大概每張圖片耗費47s(在一個GPU上)。
Fast RCNN的優點
1. 比RCNN,SPPnet有更高的準確率(mAP)。
2. 訓練是單階段的,使用多任務的loss。
3. 訓練可以更新所有的網絡層(SPPnet只能更新fc層)。
4. 特徵緩存的時候不需要硬盤存儲。
Fast RCNN結構與訓練
第一步,將這個完整的圖片經過若干卷積層與max pooling層,得到一個feature map。
第二步,用selective search算法從這完整的圖片中提取出object proposals,即RoI。
第三步,根據映射關係,可以得到每個object proposal對應的feature map。
第四步,將第三步得到的feature map經過RoI pooling layer得到固定大小的feature map(變小了)。
第五步,經過2層全連接層(fc),得到固定大小的RoI特徵向量。
第六步,特徵向量經由各自的FC層,得到兩個輸出向量:第一個是分類,使用softmax,第二個是每一類的bounding box迴歸。
簡要流程圖如下:
說明:在訓練的時候,分類與迴歸是一起訓練的,總的loss是分類的loss加上回歸的loss。計算公式如下:
在本文中λ取1,詳細情況可以查看論文。
關於RoI pooling layer
這是SPP pooling層的一個簡化版,只有一級“金字塔”,輸入是N個特徵映射和一組R個RoI,R>>N。N個特徵映射來自於最後一個卷積層,每個特徵映射都是Hx W x C的大小。每個RoI是一個元組(n, r, c, h, w),n是特徵映射的索引,n∈{0, ... ,N-1},(r, c)是RoI左上角的座標,(h, w)是高與寬。輸出是max-pool過的特徵映射,H' * W' * C的大小,H'≤H,W'≤W。對於RoI,bin-size = h/H' * w/W',這樣就有H'*W'個輸出bin,bin的大小是自適應的,取決於RoI的大小。
下圖中,H'=W'=3
參考文章: