Fast R-CNN 簡單梳理

Fast R-CNN 簡單梳理

作者:xg123321123

出處:http://blog.csdn.net/xg123321123/article/details/53067518

聲明:版權所有,轉載請聯繫作者並註明出處

Fast R-CNN是R-CNN的改進版。

1 亮點

  • Fast R-CNN將整張整張圖片歸一化之後直接送入深度網絡,鄰接時才加入候選框信息,只有末尾的少數幾層才處理每個候選框;相比之下,R-CNN框架中,一張圖像內候選框之間大量重疊,需要重複地提取特徵,耗時間。

  • Fast R-CNN把類別判斷和位置精修統一到一個深度網絡中,不需要額外存儲;相比之下,RCNN中獨立的分類器和迴歸器需要大量特徵作爲訓練樣本,耗空間。

2 大致流程

  • Selective Search在一張圖片中得到約2k個候選框(這裏稱爲RoI);
  • 使用卷積網絡提取圖片特徵;
  • 在conv5出來的feature map上,根據之前RoI框crop出對應的patch(也就是所謂的映射回了原圖),再用Rol pooling layer(好像也就是一個單層的SPP layer)來統一到一樣的尺度;
  • 繼續經過兩個全連接層得到特徵,然後分別經過一個新的全連接層,最後連接上各自的損失函數:
    • 一個是分類,使用softmax函數;
    • 一個是迴歸,使用smooth的L1-loss範式。
      這裏寫圖片描述

3 RoI Pooling操作

做圖片分類時,一般都是先將圖片crop和resize到固定尺寸,然後輸入網絡,提取特徵,最後進行分類。
對於檢測來說,這個方法不太適合,因爲原始圖像如果縮小到224這種分辨率,那麼感興趣對象可能都會變的太小無法辨認。
而Fast R-CNN的數據輸入並不對圖片大小進行限制,實現這一點的關鍵所在,就是ROI Pooling層,它可以在任意大小的圖片feature map上針對輸入的每一個ROI區域提取出固定維度的特徵表示,保證後續對每個區域的後續分類能夠正常進行。

作用

  • 將原圖中的RoI定位到feature map中對應的patch;
  • 將這個feature map中的patch下采樣爲大小固定的feature,方便傳入後面的全連接層。

RoI Pooling層的測試(forward)

RoI Pooling層將每個候選區域均勻分成M×N塊,對每塊進行max pooling,這樣一來將feature map上大小不一的候選區域轉變爲了大小統一的特徵向量,然後送入下一層。
儘管ROI Pooling可以看做是針對ROI區域的feature map的Pooling操作,但因爲不是固定尺寸的輸入,因此每次的pooling網格大小得手動計算。
舉例來說,某個ROI區域座標爲 (x1,y1,x2,y2) ,那麼輸入size爲 (y2−y1)∗(x2−x1) ;如果pooling後輸出的size爲pooledheightpooledwidth ,那麼每個網格的size爲y2y1pooledheightx2x1pooledwidth
這裏寫圖片描述

RoI Pooling層的訓練(backward)

考慮普通max pooling層:設xi 爲輸入層的節點,yj 爲輸出層的節點。

Lxi=0,δ(i,j)=falseLyj,δ(i,j)=true

其中判決函數δ(i,j) 表示i 節點是否被j 節點選爲最大值輸出。
不被選中有兩種可能:xi 不在yj 範圍內,或者xi 不是最大值。

對於RoI max Pooling,一個輸入節點可能和多個輸出節點相連。
xi 爲輸入層的節點,yrj 爲第r個候選區域的第j個輸出節點。

Lxi=r,jδ(i,r,j)Lyrj

判決函數δ(i,r,j) 表示i 節點是否被候選區域r 的第j 個節點選爲最大值輸出。
也就是說,代價對於xi 的梯度等於所有相關的後一層梯度之和。

另外,實際實現時採用的是Max Pooling,具體每個網格中哪個點的值最大,在Forward過程中就已經記錄,存儲在了argmax_data變量裏。
這裏寫圖片描述

4 Regression操作

ROI Pooling層的橫空出世,已經可以完成比較簡陋的檢測了。
先用Selective Search等proposal提取算法得到一批候選框座標,然後輸入網絡對每個候選框包含的對象進行預測。
以上,神經網絡仍然僅僅是圖片分類的工具,只不過不是整圖分類,而是ROI區域的分類。

如果能讓神經網絡完成迴歸的操作,那樣不僅顯得優雅,同時可能也會提升效果。

所以經過大神們的努力,有了迴歸層:輸出爲4*K維數組t ,表示當屬於K類時,應該平移縮放的參數,這是針對每個ROI區域座標的偏移優化,tk=(tkx,tky,tkw,tkh)0kK 是多類檢測的類別序號。

假設對於類別k ,在圖片中標註了一個Ground Truth座標:

t=(tx,ty,tw,th)

而預測值爲
t=(tx,ty,tw,th)

這二者理論上越接近越好,這裏定義損失函數:
Lloc(t,t)=ix,y,w,hsmoothL1(ti,ti)

其中

smoothL1(x)=(0.5x2,|x|1|x|0.5,|x|>1)

這裏smoothL1(x) 中的xtiti ,即對應座標的差距。
該函數在 (−1,1) 之間爲二次函數,而其他區域爲線性函數,據說這種形式可以增強模型對異常數據的魯棒性,函數曲線如下。
這裏寫圖片描述

注意
這裏的迴歸操作和R-CNN裏一樣,也是隻對特定的候選框(即和Ground Truth的IoU大於特定thresh)進行。

5 classification操作

不再像R-CNN需要通過SVM等分類器來分類,Fast R-CNN使用神經網絡來進行分類操作:輸出K+1維數組p ,表示屬於K類和背景的概率,這是針對每個ROI區域的分類概率預測,p=(p0,p1,,pK)

分類代價由真實分類u 對應的概率決定,損失函數定義如下:

Lcls=log(pu)

本篇博客主要參考自

《Fast RCNN算法詳解 》
《RCNN,Fast-RCNN,Faster-RCNN》
《RCNN, Fast-RCNN, Faster-RCNN的一些事》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章