fast rcnn 論文解讀(附代碼鏈接)
要解決的問題
1、RCNN和SPPnet分多步訓練,先要fine tuning一個預訓練的網絡,然后針對每個類別都訓練一個SVM分類器,最后還要用regressors對bounding-box進行回歸,另外region proposal也要單獨用selective search的方式獲得,步驟比較繁瑣。
2、時間和內存消耗比較大。在訓練SVM和回歸的時候需要用網絡訓練的特征作為輸入,特征保存在磁盤上再讀入的時間消耗還是比較大的。
3、測試的時候也比較慢,每張圖片的每個region proposal都要做卷積,重復操作太多。
1、高精度檢測,訓練是單步訓練,而loss是multi-task loss。
2、訓練可以更新所有網絡層,且內存不需要太大。
網絡架構
fast rcnn的架構流程如下:網絡有兩個輸入:圖像和對應的已框出來的region proposal。其中region proposal由selective search方法得到,沒有表示在流程圖中。對每個類別都訓練一個回歸器,且只有非背景的region proposal才需要進行回歸。架構是端到端多任務訓練。
下面是網絡的一般通用架構
架構實施具體細節
1、ROI polling layer:ROI Pooling的作用是對不同大小的region proposal,從最后卷積層輸出的feature map提取大小固定的feature map。因為全連接層的輸入需要尺寸大小一樣,所以不能直接將不同大小的region proposal映射到feature map作為輸出,需要做尺寸變換。即將一個hw的region proposal分割成HW大小的網格,然后將這個region proposal映射到最后一個卷積層輸出的feature map,最后計算每個網格里的最大值作為該網格的輸出,所以不管ROI pooling之前的feature map大小是多少,ROI pooling后得到的feature map大小都是H*W。
2、從預訓練網絡進行初始化:使用三個經過預訓練的ImageNet網絡進行實驗,每個網絡具有五個最大池化層以及五個到十三個conv層。當預訓練的網絡初始化Fast R-CNN網絡時,它將經歷三個轉換。首先,最后一個最大池化層被RoI池化層代替,該RoI池化層通過將H和W設置為與網絡的第一個完全連接層兼容(例如,對于VGG16,H = W = 7)進行配置。其次,將網絡的最后一個完全連接層和softmax替換為先前描述的兩個同級層(K + 1類的完全連接層和softmax以及特定于類別的bounding-box regressors)。第三,修改網絡以獲取兩個數據輸入:圖像和這些圖像的RoI。
3、multi-task loss:損失函數的定義是將分類的loss和回歸的loss整合在一起,其中分類采用log loss,即對真實分類(下圖中的pu)的概率取負log,而回歸的loss和R-CNN基本一樣。分類層輸出K+1維,表示K個類和1個背景類。
這是回歸的loss,其中t^u表示預測的結果,u表示類別。v表示真實的結果,即bounding box regression target。
4、采用SVD分解改進全連接層:truncate svd可以簡化全連接層的計算,加快檢測時間,且無需在模型壓縮后執行其他微調。
訓練
算法的主網絡還是VGG16,輸入是224* 224* 3,經過5個卷積層和2個降采樣層(這兩個降采樣層分別跟在第一和第二個卷積層后面)后,進入ROI Pooling層,該層的輸入是conv5層的輸出和region proposal,region proposal的個數差不多2000。然后再經過兩個都是output是4096的全連接層。最后分別經過output個數是21和84的兩個全連接層(這兩個全連接層是并列的,不是前后關系),前者是分類的輸出,代表每個region proposal屬于每個類別(21類)的得分,后者是回歸的輸出,代表每個region proposal的四個坐標。最后是兩個損失層,分類的是softmaxWithLoss,輸入是label和分類層輸出的得分;回歸的是SmoothL1Loss,輸入是回歸層的輸出和target坐標及weight。
測試
與訓練基本相同,最后兩個loss層要改成一個softma層,輸入是分類的score,輸出概率。最后對每個類別采用NMS(non-maximun suppression)。
實驗結果
fast rcnn在常用的數據集上表現出的性能都比SOTA要好。除了算法提升外,數據集越大算法的精度越高,所以數據是信息時代的“石油”。
fast rcnn在速度上的提升
更多細節
該論文還闡述了其他細節:
1、在遷移學習基礎上更新哪些層的參數實驗
2、SVM V.S. softmax,是否svm更有效
3、輸入多種規格的圖片,更多訓練數據
4、multi-task training有助于提高精度嗎
5、比較實現尺度不變的目標檢測的兩種策略:蠻力匹配(brute-force learning)和圖像金字塔。
結論
Fast RCNN不僅大大提高了檢測速度,也提高了檢測準確率。其中,其是對整張圖像卷積而不是對每個region proposal卷積。ROI Pooling,分類和回歸都放在網絡一起訓練、multi-task loss是算法的三個核心。當然Fast RCNN的主要缺點在于region proposal的提取使用selective search,目標檢測時間大多消耗在這上面(提region proposal 2~3s,而提特征分類只需0.32s),這也是后續Faster RCNN的改進方向之一。
代碼鏈接
論文最后把代碼開源,github鏈接:https://github.com/rbgirshick/py-faster-rcnn
機器學習 深度學習 神經網絡
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。