Fast R-CNN(理解)
0 - 背景
經(jīng)典的R-CNN存在以下幾個問題:
- 訓(xùn)練分多步驟(先在分類數(shù)據(jù)集上預(yù)訓(xùn)練,再進行fine-tune訓(xùn)練,然后再針對每個類別都訓(xùn)練一個線性SVM分類器,最后再用regressors對bounding box進行回歸,并且bounding box還需要通過selective search生成)
- 時間和空間開銷大(在訓(xùn)練SVM和回歸的時候需要用網(wǎng)絡(luò)訓(xùn)練的特征作為輸入,特征保存在磁盤上再讀入的時間開銷較大)
- 測試比較慢(每張圖片的每個region proposal都要做卷積,重復(fù)操作太多)
在Fast RCNN之前提出過SPPnet來解決R-CNN中重復(fù)卷積問題,但SPPnet仍然存在與R-CNN類似的缺陷:
- 訓(xùn)練分多步驟(需要SVM分類器,額外的regressors)
- 空間開銷大
因此,該文提出的Fast RCNN便是解決上述不足,在保證效果的同時提高效率。基于VGG16的Fast RCNN模型在訓(xùn)練速度上比R-CNN快大約9倍,比SPPnet快大約3倍;測試速度比R-CNN快大約213倍,比SPPnet快大約10倍,在VOC2012數(shù)據(jù)集上的mAP大約為66%。
1 - 整體思路
1.1 - 訓(xùn)練
- 輸入是$224 \times 224$的固定大小圖片
- 經(jīng)過5個卷積層+2個降采樣層(分別跟在第一和第二個卷積層后面)
- 進入ROIPooling層(其輸入是conv5層的輸出和region proposal,region proposal個數(shù)大約為2000個)
- 再經(jīng)過兩個output都為4096維的全連接層
- 分別經(jīng)過output各為21和84維的全連接層(并列的,前者是分類輸出,后者是回歸輸出)
- 最后接上兩個損失層(分類是softmax,回歸是smoothL1)
fast R-CNN模型的流程圖如下:
1.1.1 - ROIPooling
由于region proposal的尺度各不相同,而期望提取出來的特征向量維度相同,因此需要某種特殊的技術(shù)來做保證。ROIPooling的提出便是為了解決這一問題的。其思路如下:
- 將region proposal劃分為$H \times W$大小的網(wǎng)格
- 對每一個網(wǎng)格做MaxPooling(即每一個網(wǎng)格對應(yīng)一個輸出值)
- 將所有輸出值組合起來便形成固定大小為$H \times W$的feature map
1.1.2 - 訓(xùn)練樣本
訓(xùn)練過程中每個mini-batch包含2張圖像和128個region proposal(即ROI,64個ROI/張),其中大約25%的ROI和ground truth的IOU值大于0.5(即正樣本),且只通過隨機水平翻轉(zhuǎn)進行數(shù)據(jù)增強。
1.1.3 - 損失函數(shù)
多損失融合(分類損失和回歸損失融合),分類采用log loss(即對真實分類的概率取負log,分類輸出K+1維),回歸的loss和R-CNN基本一樣。
總的損失函數(shù)如下:
$$L(p,u,t^u,v)=L_{cls}(p,u)+\lambda [u\geqslant 1]L_{loc}(t^u,v)$$
分類損失函數(shù)如下:
$$L_{cls}(p,u)=-log\ p_u$$
回歸損失函數(shù)如下:
$$L_{loc}(t^u,v)=\sum_{i\epsilon \{x,y,w,h\}}smooth_{L_1}(t_i^u-v_i)$$
其中有:
$$smooth_{L_1}(x)=\left\{\begin{matrix}0.5x^2\ \ \ \ \ \ if\ |x|< 1\\|x|-0.5\ \ otherwise\end{matrix}\right.$$
1.1.4 - 改進全連接層
由于卷積層計算針對的是一整張圖片,而全連接層需要對每一個region proposal都作用一次,所以全連接層的計算占網(wǎng)絡(luò)計算的將近一半(如下圖)。作者采用SVD來簡化全連接層計算。
?1.1.5 - 訓(xùn)練整體架構(gòu)總結(jié)
圖片引用自博客。
?
1.2 - 測試
1.2.1 - 測試整體架構(gòu)總結(jié)
圖片引用自博客。
?
2 - 思考
2.1 - 改進
- 卷積不再是重復(fù)對每一個region proposal,而是對于整張圖像先提取了泛化特征,這樣子減少了大量的計算量(注意到,R-CNN中對于每一個region proposal做卷積會有很多重復(fù)計算)
- ROIPooling的提出,巧妙的解決了尺度放縮的問題
- 將regressor放進網(wǎng)絡(luò)一起訓(xùn)練,同時用softmax代替SVM分類器,更加簡單高效
2.2 - 不足
region proposal的提取仍然采用selective search,整個檢測流程時間大多消耗在這上面(生成region proposal大約2~3s,而特征提取+分類只需要0.32s),之后的Faster RCNN的改進之一便是此點。
3 - 結(jié)果
3.1 - mAP
FRCN相比其他算法表現(xiàn)更好,且注意到,VOC12由于數(shù)據(jù)集更大而使得模型效果提高很多。(這一角度也說明了數(shù)據(jù)對于當(dāng)前深度學(xué)習(xí)的重要性不容忽視!)
3.2 - 速度
3.3 - 多任務(wù)訓(xùn)練(multi-task)
由于本文提出的模型是基于R-CNN通過multi-task訓(xùn)練方式進行改進的,因此要說明multi-task的有效性。一共分為S/M/L三組,每組對應(yīng)四列,分別為:
- 僅采用分類訓(xùn)練,測試也沒有回歸
- 采用論文中的分類+回歸訓(xùn)練,測試沒有回歸
- 采用分段訓(xùn)練,測試沒有回歸
- 采用論文中的分類+回歸訓(xùn)練,測試有回歸
3.4 - 單尺度vs多尺度
多尺度表示輸入圖像采用多種尺度輸入,在測試的時候發(fā)現(xiàn)多尺度雖然能在mAP上得到些許提升但也增加了時間開銷(作者給出原因:深度卷積網(wǎng)絡(luò)可以學(xué)習(xí)尺度不變性)。
4 - 參考資料
https://blog.csdn.net/u014380165/article/details/72851319
https://www.cnblogs.com/CZiFan/p/9901729.html
https://www.cnblogs.com/CZiFan/p/9901000.html
轉(zhuǎn)載于:https://www.cnblogs.com/CZiFan/p/9903518.html
總結(jié)
以上是生活随笔為你收集整理的Fast R-CNN(理解)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++: internal compil
- 下一篇: centos 账号安全设置