深度學習論文翻譯解析(四):Faster R-CNN: Down the rabbit hole of modern object detection


論文標題:Faster R-CNN: Down the rabbit hole of modern object detection

論文作者:Zhi Tian , Weilin Huang, Tong He , Pan He , and Yu Qiao

論文地址:https://tryolabs.com/blog/2018/01/18/faster-r-cnn-down-the-rabbit-hole-of-modern-object-detection/

論文地址:Object detection: an overview in the age of Deep Learning 已經對基於深度學習的目標檢測進行了概述. 推薦先進行閱讀.

聲明:小編翻譯論文僅為學習,如有侵權請聯系小編刪除博文,謝謝!

            小編是一個機器學習初學者,打算認真研究論文,但是英文水平有限,所以論文翻譯中用到了Google,並自己逐句檢查過,但還是會有顯得晦澀的地方,如有語法/專業名詞翻譯錯誤,還請見諒,並歡迎及時指出。

   在此之前,我們討論了目標檢測,關於它是什么以及最近如何使用深度學習解決它。如果你還沒有閱讀之前的博客,我們建議您先閱讀它,再來看這篇文章。

  去年,我們打算去研究Fast R-CNN,閱讀原始論文和所有參考論文(等等),知道我們清楚地了解它是如何工作的以及如何去實現它。

  我們最終在Luminoth中實施了Fast R-CNN,這是一個基於TensorFlow的計算機視覺工具包,可以輕松訓練,監控和使用這些類型的模型。到目前為止,Luminoth已經引起了我們極大的興趣,並且我們甚至在ODSC Eueope和ODSC West談到了它。

  基於開發Luminoth的所有工作並基於我們所做的演示,我們認為最好有一篇博文,其中包含我們在研究中收集的所有細節和鏈接,作為未來的參考,任何人都對該主題感興趣。

背景

   Faster R-CNN發表於NIPS 2015,其后出現了很多改進的版本,后面會進行介紹。正如我們在之前的博客文章中提到的,Faster R-CNN是R-CNN論文的第三次迭代。其中Ross Girshick是作者兼合並者。

  一切始於2014年的“ 用於精確對象檢測和語義分割的豐富特征層次結構 ”(R-CNN),其使用稱為選擇性搜索的算法來提出可能的感興趣區域和用於分類和調整它們的標准卷積神經網絡(CNN) 。它迅速演變為2015年初發布的Fast R-CNN,其中一種名為Region of Interest Pooling的技術允許共享昂貴的計算並使模型更快。終於推出了Fast R-CNN,其中提出了第一個完全可微分的模型。

網絡結構

  Faster R-CNN 的結構是復雜的,因為其有幾個移動部件. 這里先對整體框架宏觀介紹,然后再對每個部分的細節分析.

問題描述:

針對一張圖片,需要獲得的輸出有:

  • 邊界框(bounding boxes) 列表;
  • 每個邊界框的類別標簽;
  • 每個邊界框和類別標簽的概率.

 

  首先,輸入圖片表示為 Height×Width×DepthHeight×Width×Depth 的張量(多維數組)形式,經過預訓練 CNN 模型的處理,得到卷積特征圖(conv feature map). 即,將 CNN 作為特征提取器,送入下一個部分。

  這種技術在遷移學習(Transfer Learning)中比較普遍,尤其是,采用在大規模數據集訓練的網絡權重,來對小規模數據集訓練分類器. 后面會詳細介紹。

  然后,RPN(Region Propose Network) 對提取的卷積特征圖進行處理. RPN 用於尋找可能包含 objects 的預定義數量的區域(regions,邊界框).

  基於深度學習(DL)的目標檢測中,可能最難的問題就是生成長度不定(variable-length)的邊界框列表. 在構建深度神經網絡時,最后的網絡輸出一般是固定尺寸的張量輸出(采用RNN的除外). 例如,在圖片分類中,網絡輸出是 (N,) 的張量,N是類別標簽數,張量的每個位置的標量值表示圖片是類別 labeli的概率值。

 

 

  在 RPN 中,通過采用 anchors 來解決邊界框列表長度不定的問題,即,在原始圖像中統一放置固定大小的參考邊界框. 不同於直接檢測 objects 的位置,這里將問題轉化為兩部分:

  對每一個 anchor 而言,

  • anchor 是否包含相關的 object?
  • 如何調整 anchor 以更好的擬合相關的 object。

  這里可能不容易理解,后面會深入介紹。

  當獲得了可能的相關objects和其在原始圖像中的對應位置之后,問題就更加直接了,采用CNN提取新的特征和包含相關objects的邊界框,采用Rol Pooling處理,並提取相關object的特征,得到了新的向量。

  最后基於R-CNN模塊,得到:

  • 對邊界框內的內容進行分類(或者丟棄邊界框,采用background作為一個label)
  • 調整邊界框坐標,以更好地使用object

  顯而易見,上面忽略了一些重要的細節信息,但是,包括了Fast R_CNN的大致思想,接下來,我們會對網絡結構和每個部分的訓練及loss進行詳細說明。

基礎網絡

  正如上面所說,Fast R-CNN 第一步是采用基於分類任務(如:使用ImageNet)的CNN模型作為特征提取器,聽起來比較簡單,但是重要的是理解其如何工作和為什么會有效,並可視化中間層,查看其輸出形式。

  網絡結構很難說那種是最好的,Fast R-CNN最早是采用在ImageNet訓練的ZF和VGG,其后出現了很多其他權重不同的網絡,如MobileNet是一種小型效率高的網絡結構,僅有3.3M參數;而ResNet-152的參數量達到了60M,新網絡結構,如DenseNet在提高了結果的同時,降低了參數數量。

 VGG

  在討論網絡結構孰優孰劣之前,這里以VGG16為例。

 

  VGG16是ImageNet ILSVRC 2014競賽的模型,其是基於Karen Simonyan 和Andrew Zisserman發表在論文 Very Deep Convolutional Networks for Large-Scale Image Recognition 上。今天來看,VGG16網絡結構是不算深的,但在當時,其將網絡層比常用的網絡結構擴展了兩倍,開始了 “deeper→more capacity→better”的網絡結構設計方向(在訓練允許的情況)。 

  VGG16 圖片分類時,輸入為 224×224×3的張量(即,一張 224×224 像素的 RGB 圖片)。 網絡結構最后采用 FC 層(而不是 Conv 層)得到固定長度的向量,以進行圖片分類. 對最后一個卷積層的輸出拉伸為 rank 1 的張量,然后送入 FC 層。

   由於 Faster R-CNN 是采用 VGG16 的中間卷積層的輸出,因此,不用關心輸入的尺寸. 而且,該模塊僅利用了卷積層. 進一步去分析模塊所使用的哪一層卷積層. Faster R-CNN 論文中沒有指定所使用的卷積層,但在官方實現中是采用的卷積層 conv5/conv5_1 的輸出。

  每個卷積層利用前面網絡信息來生成抽象描述. 第一層一般學習邊緣edges信息,第二層學習邊緣edges中的圖案patterns,以學習更復雜的形狀等信息. 最終,可以得到卷積特征圖,其空間維度(分辨率)比原圖小了很多,但更深. 特征圖的 width 和 height 由於卷積層間的池化層而降低,而 depth 由於卷積層學習的 filters 數量而增加。

  在其depth上,卷積特征圖對圖片的所有信息進行了編碼,同時保持相對於原始圖片所編碼“things”的位置. 例如,如果在圖片的左上角存在一個紅色正方形,而且卷積層有激活響應,那么該紅色正方形的信息被卷積層編碼后,仍在卷積特征圖的左上角。

VGG vs ResNet

  現在ResNet結構逐漸取代VGG作為基礎網絡,用於提取特征。Faster R-CNN的共同作者也是ResNet網絡結構論文 Deep Residual Learning for Image Recognition 的共同作者。

  ResNet相對於VGG的明顯優勢是,網絡更大,因此具有更強的學習能力,這對於分類任務是重要的,在目標檢測中也應該是如此。

  另外,ResNet采用殘差連接(residual connection) 和 BN (batch normalization) 使得深度模型的訓練比較容易. 這對於 VGG 首次提出的時候沒有出現。

Anchors

  在獲得了處理后的圖片后,需要尋找 proposals,如用於分類的 RoIs(regions of interest). anchors 是用來解決長度不定問題的。目標是,尋找圖片中的邊界框bounding boxes,邊界框是具有不同尺寸sizes和長寬比aspect ratios 的矩形。假設,已經知道圖片中有兩個 objects,首先想到的是,訓練一個網絡,輸出 8 個值:兩對元組Xmin,Ymin,Xmax,Ymax,分別定義了每個 object 的邊界框. 這種方法存在一些基本問題. 例如,當圖片的尺寸和長寬比不一致時,良好訓練模型來預測,會非常復雜. 另一個問題是無效預測:預測Xmin和Xmax時,需要保證Xmin<Xmax。

  事實上,有一種更加簡單的方法來預測objects,即,學習相對於參考boxes的偏移量,假設參考box:Xcenter,Ycenter,Width,Height,待預測量

 ,一般都是很小的值,以調整參考box更好擬合所需要的。

  Anchors是固定尺寸的邊界框,是通過利用不同的尺寸和比例在圖片上放置得到的boxes,並作為第一次預測object位置的參考boxes。

  因為是對提取的卷積特征圖進行處理,因此在的每個點創建anchors,需要理解的是雖然anchors是基於卷積特征圖定義的,但是最終的anchos是相對於原始圖片的。

  由於只有卷積層和池化層,特征圖的維度是原始圖片的尺寸程比例關系的,即數學的表述,如果圖片尺寸W*H,特征圖的尺寸是w/r * h/r,其中r是下采樣率(subsampling ratio)。如果在卷積特征圖空間位置定義anchor,則最終的圖片會是由r像素划分的anchors集,在VGG中 r =16.

  為了選擇anchors集,一般是先定義定義不同尺寸(如,64px,128px,256px等)和boxes長寬比(如,0.5,1,1.5等),並使用所有可能的尺寸和比例組合。

Region Proposal Network

  正如我們之前提到的,RPN獲得所有參考框(錨點)並輸出一組對象的好建議,它通過為每個錨點提供兩個不同的輸出來實現這一點。

  第一個是錨是物體的概率。如果你願意,一個“客觀得分”。注意RPN並不關心它是什么類的對象,只是它實際上看起來像一個對象(而不是背景)。我們將使用這個客觀得分來過濾掉第二階段的糟糕預測,第二個輸出是調整錨的邊界盒回歸,用於調整錨點以更好地擬合它預測的對象。

   RPN以完全卷積的方式高效地實現,使用基礎網絡返回的卷積特征映射作為輸入。首先,我們使用一個包含512個通道和3x3核大小的卷積層,然后使用1x11x1核,我們有兩個平行的卷積層,通道的數量取決於每個點的錨點數量。  

  對於分類層,每個anchor輸出兩個預測值:anchor是背景(background,非object)的score和anchor是前景(foreground ,object)的score。

  對於回歸層,也可以叫邊界框調整層,每個anchor輸出4個預測值:即用於 anchors 來得到最終的 proposals.

根據最終的 proposal 坐標和其對應的 objectness score,即可得到良好的 objects proposals。

訓練,目標和損失函數

  RPN 有兩種類型的預測值輸出:二值分類和邊界框回歸調整。

  訓練時,對所有的 anchors 分類為兩種類別. 與 ground-truth object 邊界框的 Intersection over Union(IoU) 大於 0.5 的 anchors 作為 foreground;小於 0.1 的作為 background。

  然后,隨機采樣 anchors 來生成batchsize=256 的 mini-batch,盡可能的保持 foreground 和 background anchors 的比例平衡。

 

  RPN 對 mini-batch 內的所有 anchors 采用 binary cross entropy 來計算分類 loss. 然后,只對 mini-batch 內標記為 foreground 的 anchros 計算回歸 loss. 為了計算回歸的目標targets,根據 foreground anchor 和其最接近的 groundtruth object,計算將 anchor 變換到 object groundtruth 的偏移值 correctΔ.

  Faster R-CNN 沒有采用簡單的 L1 或 L2 loss 用於回歸誤差,而是采用 Smooth L1 loss. Smooth L1 和 L1 基本相同,但是,當 L1 誤差值非常小時,表示為一個確定值 σσ, 即認為是接近正確的,loss 就會以更快的速度消失.

  采用動態 batches 是很有挑戰性的. 即使已經嘗試保持 background 和 foreground 的 anchors 的平衡比例,也不總是可行的. 根據圖片中 groundtruth objects 和 anchors 的尺度與比例,很有可能得不到 foreground anchors. 這種情況時,將采用與 groundtruth boxes 具有最大 IoU 的 anchors. 這與理想情況相差很遠,但實際中一般總能有 foreground 樣本和要學習目標。

后處理

  非極大值抑制(Non-maximum suppression)

  由於 Anchors 一般是有重疊的overlap,因此,相同 object 的 proposals 也存在重疊.

  為了解決重疊 proposals 問題,采用 NMS 算法處理,丟棄與一個score 更高的 proposal 間 IoU 大於預設閾值的 proposals.

  雖然 NMS 看起來比較簡單,但 IoU 閾值的預設需要謹慎處理. 如果 IoU 值太小,可能丟失 objetcs 的一些 proposals;如果 IoU 值過大,可能會導致 objects 出現很多 proposals. IoU 典型值為 0.6.

  Proposal 選擇

  NMS 處理后,根據 sore 對 topNtopN 個 proposals 排序. 在 Faster R-CNN 論文中 N=2000N=2000,其值也可以小一點,如 50,仍然能的高好的結果.

單獨應用RPN

   RPN 可以獨立使用,不用 2-stage 模型.

  當處理的問題是,單個 object 類時,objectness 概率即可作為最終的類別概率. 此時,“foreground” = “single class”,“background”=“not single class”.

  可以應用於人臉檢測(face detection),文字檢測(text detection),等.

  僅單獨采用 RPN 的優點在於,訓練和測試速度較快. 由於 RPN 是僅有卷積層的簡單網絡,其預測效率比采用分類 base 網絡的效率高.

 

Rol Pooling

  RPN 處理后,可以得到一堆沒有 class score 的 object proposals.

  待處理問題為,如何利用這些邊界框 bounding boxes,並分類.

  一種最簡單的方法是,對每個 porposal,裁剪,並送入pre-trained base 網絡,提取特征;然后,將提取特征來訓練分類器. 但,這就需要對所有的 2000 個 proposals 進行計算,效率低,速度慢.

  Faster R-CNN 則通過重用卷積特征圖(conv feature map) 來加快計算效率. 即,采用 RoI(region of interest) Pooling 對每個 proposal 提取固定尺寸的特征圖. R-CNN 是對固定尺寸的特征圖分類.

 

  目標檢測中,包括 Faster R-CNN,常用一種更簡單的方法,即:采用每個 proposal 來對卷積特征圖裁剪crop,然后利用插值算法(一般為雙線性插值 bilinear)將每個 crop resize 到固定尺寸 。裁剪后,利用2*2 Kernel的Max Pooling得到每個proposal的最終特征圖。

R-CNN-Region-based CNN

  R-CNN 是 Faster R-CNN 框架中的最后一個步驟.

  • 計算圖片的卷積特征圖conv feature map;
  • 然后采用 RPN 對卷積特征圖處理,得到 object proposals;
  • 再利用 RoI Pooling 對每個 proposal 提取特征;
  • 最后,利用提取特征進行分類.

  R-CNN 是模仿分類 CNNs 的最后一個階段,采用全連接層來輸出每個可能的 object 類別class 的score.

  R-CNN 有兩個不同的輸出:

  • 對每個 proposal 分類,其中類別包括一個 background 類(用於去除不良 proposals);
  • 根據預測的類別class,更好的調整 proposal 邊界框.

  在Faster R-CNN論文中,R-CNN 對每個 proposal 的特征圖,拉平flatten,並采用 ReLU 和兩個大小為 4096 維的全連接層進行處理。

  然而,對每個不同objects采用兩個不同的全連接層處理

    • 一個全連接層有 N+1個神經單元,其中 N是類別 class 的總數,包括 background class;
    • 一個全連接層有4N個神經單元,回歸預測輸出,得到N個可能的類別classes分別預測

 

 

訓練和目標

  R-CNN 的目標基本上是與 RPN 目標的計算是一致的,但需要考慮不同的可能的 object 類別 classes.

  根據 proposals 和 ground-truth boxes,計算其 IoU.

  與任何一個 ground-truth box 的 IoU 大於 0.5 的 proposals 被設為正確的 boxes. IoU 在 0.1 到 0.5 之間時設為 background.

  與 RPN 中目標組裝相關,這里忽略沒有任何交叉的 proposals. 這是因為,在此階段,假設已經獲得良好的 proposals,主要關注於解決難例. 當然,所有的這些超參數都是可以用於調整以更好的擬合 objects.

  邊界框回歸的目標計算的是 proposal 與其對應的 ground-truth間的偏移量,只對基於 IoU 閾值設定類別class 后的 proposals 進行計算.

  隨機采用一個平衡化的 mini-batch=64,其中,25% 的 foreground proposals(具有類別class) 和 75% 的background proposals.

  類似於 RPNs 的 losses,對於選定的 proposals,分類 loss 采用 multiclass entropy loss;對於 25% 的 foreground proposals 采用 SmoothL1 loss 計算其與 groundtruth box 的匹配.

  由於 R-CNN 全連接網絡對每個類別class 僅輸出一個預測值,當計算邊框回歸loss 時需謹慎. 當計算 loss 時,只需考慮正確的類別.

 

后處理

   類似於 RPN,R-CNN 最終輸出一堆帶有類別 class 的objects,在返回結果前,再進一步進行處理.

  為了調整邊界框,需要考慮概率最大的類別的 proposals. 忽略概率最大值為 background class 的proposals.

  當得到最終的 objects 時,並忽略被預測為 background 的結果,采用 class-based NMS. 主要是通過對 objects 根據類別class 分組,然后根據概率排序,並對每個獨立的分組采用 NMS 處理,最后再放在一起.

  最終得到的 objects 列表,仍可繼續通過設定概率閾值的方式,來限制每個類的 objects 數量.

 

Faster R-CNN 訓練

  Faster R-CNN 在論文中是采用分步 multi-step 方法,對每個模塊分別訓練再合並訓練的權重. 自此,End-to-end 的聯合訓練被發現能夠得到更好的結果.

  當將完整的模型合並后,得到 4 個不同的 losses,2 個用於 RPN,2 個用於 R-CNN. RPN 和 R-CNN 的base基礎網絡可以是可訓練(fine-tune)的,也可以是不能訓練的.

  base基礎網絡的訓練與否,取決於待學習的objects與可用的計算力. 如果新數據與 base基礎網絡訓練的原始數據集相似,則不必進行訓練,除非是想嘗試其不同的表現. base基礎網絡的訓練是比較時間與硬件消耗較高,需要適應梯度計算.

  4 種不同的 losses 以加權和的形式組織. 可以根據需要對分類 loss 和回歸 loss 設置權重,或者對 R-CNN 和 RPNs 設置不同權重.

  采用 SGD 訓練,momentum=0.9. 學習率初始值為 0.001,50K 次迭代后衰減為 0.0001. 這是一組常用參數設置

  采用 Luminoth 訓練時,直接采用默認值開始。

 評價

  評價准則:指定 IoU 閾值對應的 Mean Average Precision (mAP),如 mAP@0.5.

  mAP 來自信息檢索,常用與計算 ranking 問題的誤差計算,以及評估目標檢測結果.

總結

  至此,對 Faster R-CNN 的處理方式有了清晰的理解,可以根據實際應用場合來做一些應用.

  如果想進一步深入理解,可以參考 Luminoth Faster R-CNN 實現.

  Faster R-CNN 可以用於解決復雜的計算機視覺問題,並取得很好的效果. 雖然這里模型是目標檢測,但對於語義分割,3D目標檢測等,都可以基於以上模型. 或借鑒於 RPN,或借鑒於 R-CNN,或兩者都有. 因此,能夠深度理解其工作原理,對於更好的解決其它問題很有幫助.

 

參考:https://zhuanlan.zhihu.com/p/24916624

https://blog.csdn.net/zziahgf/article/details/79311275


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM