當前位置:
首頁 > 最新 > 目標檢測技術之Faster R-CNN詳解

目標檢測技術之Faster R-CNN詳解

來源:tryo.labs

編譯:Bing

編者按:tryo.labs是一家專註於機器學習和自然語言處理的技術支持公司,在本篇文章中,公司的研究人員介紹了他們在研究過程中所使用的先進目標檢測工具Faster R-CNN,包括它的構造及實現原理。以下是論智對原文的編譯。

之前,我們介紹了目標物體檢測(object detection)是什麼以及它是如何用於深度學習的。去年,我們決定研究Faster R-CNN。通過閱讀原論文以及相關的參考文獻,我們對其工作原理及如何部署已經有了清晰的了解。

最終,我們將Faster R-CNN安裝到Luminoth上,Luminoth是基於TensorFlow的計算機視覺工具包,我們在公開數據科學大會(ODSC)的歐洲和西部會場上分享了這一成果,並收到了很多關注。

基於我們研發Luminoth中的收穫以及分享成果,我們認為應當把研究所得記錄到博客中,以饗讀者。

背景

Faster R-CNN最初是在NIPS 2015上發表的,後來又經過多次修改。Faster R-CNN是Ross Girshick團隊推出的R-CNN的第三次迭代版本。

2014年,在第一篇R-CNN的論文Rich feature hierarchies for accurate object detection and semantic segmentation中,研究人員利用一種名為選擇性搜索(selective search)的演算法提出一種可能的感興趣區域(RoI)和一個標準的卷積神經網路來區分和調整它們。2015年初,R-CNN進化成為Fast R-CNN,其中一種名為興趣區域池化(RoI Pooling)的技術能夠共享耗能巨大的計算力,並且讓模型變得更快。最後他們提出了Faster R-CNN,是第一個完全可微分的模型。

結構

Faster R-CNN的結構十分複雜,因為它有好幾個移動部分。我們首先對Faster R-CNN做大致介紹,然後對每個組成部分進行詳細解讀。

問題是圍繞一幅圖像,從中我們想要得到:

Faster R-CNN完整示意圖

輸入的圖像用高度×寬度×深度的張量(多維數組)表示,在傳輸到中間層之前,先經過一個預訓練的CNN,最終生成卷積特徵映射。我們將這一映射作為下一部分的特徵提取器。

這一技術在遷移學習中還是很常見的,尤其是利用在大規模資料庫上訓練的網路權重,來訓練小規模資料庫上的分類器。

接著,我們得到了Region Proposal Network(RPN),利用CNN計算出的特徵,使用RPN找到既定數量的區域(邊框線),其中可能包含目標對象。

也許用深度學習做目標檢測最難的部分就是生成一個長度可變的邊界框列表。對深度神經網路進行建模時,最後一個block通常是一個固定大小的張量輸出(除使用循環神經網路以外)。例如,在圖像分類中,輸出的是一個(N,)的張量,N代表類別的數量,其中的位置i處的每個標量包含該圖像被標位labeli的概率。

在RPN中可以使用anchors解決可變長度的問題:在原始圖像中統一放置固定大小的參考邊界框,與直接檢測物體的位置不同,我們將問題分為兩部分。對每個anchor,我們會想:

聽起來可能有點迷惑,接下來我們將深入探討這個問題。

在原始圖像中得到可能的相關對象及其位置的列表後,問題就更直接了。利用CNN提取的特徵和包含相關對象的邊界框,應用RoI pooling,將與相關對象對應的特徵提取出一個新的向量。

最後是R-CNN模塊,它利用這些信息來:

雖然描述得比較粗略,但這基本上是Faster R-CNN的工作流程。接下來,我們將詳細介紹每一部分的架構、損失函數以及訓練過程。

基本網路(Base Network)

就像我們之前提到的,第一步是利用一個為分類任務預先訓練過的CNN(比如ImageNet)和中間層的輸出。對於有機器學習背景的人來說,這聽上去挺簡單的。但是關鍵一點是要理解它是如何工作的,以及為什麼會這樣工作。同時還要讓中間層的輸出可視化。

目前沒有公認的最好的網路架構。最早的R-CNN使用了在ImageNet上預訓練的ZF和VGG,但從那以後,有許多權重不同的網路。例如,MobileNet是一種小型網路,優化後高效的網路體系結構能加快運行速度,它有將近3.3M的參數,而152層的ResNet(對,你沒看錯就是152層)有大約60M參數。最近,像DenseNet這樣的新架構既改善了結果,又減少了參數數量。

VGG

在比較孰優孰劣之前,讓我們先用標準的VGG-16為例來理解他們都是怎樣工作的。

VGG架構

VGG這個名字來源於2014年ImageNet ILSVRC比賽中的一組選手,其中的Karen Simonyan和Andrew Zisserman發表了一篇名為Very Deep Convolutional Networks for Large-Scale Image Recognition的論文。若以現在的標準來看,這已經不是「very deep」的網路了,但在當時,它比通常使用的網路層數增加了一倍多,並且開始了「deepermore capacitybetter」的波動(當可以訓練的時候)。

使用VGG分類時,輸入的是224×224×3的張量(即224×224像素的RGB圖像)。由於網路的最後一個模塊使用完全連接層(FC)而不是卷積,這需要一個固定長度的輸入。通常將最後一個卷積層的輸出平坦化,在使用FC層之前得到第一次命中的張量。

由於我們要使用中間卷積層的輸出,所以輸入的大小不用特別考慮。至少,在這個模塊中不用擔心,因為只使用了卷積層。讓我們繼續詳細介紹,決定到底要使用哪個卷積層。論文中並未指明要使用的圖層,但在實際安裝過程中,你可以看到它們用了conv5/conv5_1的輸出。

每個卷積層都會從之前的信息中生成抽象的東西。第一層圖層通常學習圖像中的邊緣線,第二層找出邊緣內的圖形,以學習更複雜的形狀等。最終我們得到了卷積特徵向量,它的空間維度比原始圖像小得多,但是更深。特徵映射的寬度和高度由於卷積層之間的池化而降低,同時由於卷積層學習的過濾器數量增多導致映射的深度增加。

圖像到卷積特徵映射

在深度上,卷積特徵映射已經對圖像的所有信息進行編碼,同時保持其相對於原始圖像編碼的「物體」的位置。例如,如果圖像的左上角有一個紅色正方形,並且卷積層激活了它,那麼該紅色正方形的信息仍然位於卷積特徵映射的左上角。

VGG vs ResNet

目前,ResNet架構大多已經取代了VGG作為特徵提取的基礎網路,Faster R-CNN的三位合作者(Kaiming He,Shaoqing Ren和Jian Sun)也是ResNet原始論文Deep Residual Learning for Image Recognition的共同作者。

相對於VGG,ResNet的明顯優勢在與它更大,因此它有更大能力去了解需要什麼。這對分類任務來說是正確的,同時對目標物體檢測也是如此。

此外,ResNet讓使用殘差網路和批量歸一化來訓練深度模型變得簡單,這在VGG發布之初並未出現。

Anchors

既然我們有了處理過的圖像,則需要找到proposals,即用於分類的興趣區域(RoI)。上文中提到,anchors是解決可變長度問題的方法,但是沒有詳細講解。

我們的目標是在圖像中找到邊界框,它們呈矩形,有不同的尺寸和長寬比。想像一下,我們事先知道圖像中有兩個對象,若要解決的話,第一個立即想到的方案是訓練一個返回八個值的網路:xmin、ymin、xmax、ymax元組各兩個,以確定每個目標物體的邊界框位置。這種方法有一些非常基礎的問題。例如,圖像的尺寸和長寬比可能不同,訓練預測原始坐標的良好模型可能會變得非常複雜。另外,模型可能會生成無效的預測:當預測xmin和xmax的值時,我們需要保證xmin<xmax。

最終,事實證明通過學習預測參考框的偏移量,可以更簡單地預測邊界框的位置。我們取xcenter,ycenter,寬度,高度,學習預測Δxcenter、Δycenter、Δwidth、Δheight,這些值可以將參考框調整得符合我們的需要。

Anchors是固定的邊界框,它們遍布整個圖像,具有不同的大小和比例,這些尺寸在第一次預測目標對象位置的時候用作參考。

由於我們是用的是尺寸為convwidth×convheight×convdepth的卷積特徵映射,於是可以在convwidth×convheight中的每個點創造一組anchors。即使anchors是基於卷積特徵映射,理解這一點也是非常重要的,最終的anchors可以顯示原始圖像。

由於我們只有卷積層和池化層,特徵映射的維度在原始圖像中是成比例的。用數學方法表示,即如果圖像是w×h,特徵映射就是w/r×h/r,這裡的r被稱為subsampling ratio。如果我們把特徵映射的每個空間位置定義一個anchor,那麼最終的圖像將會是由分散的r像素組成的一群anchors。在VGG中,r=16.

原始圖像的anchor中心

為了更好的選擇anchors,我們通常會定義一組尺寸(例如64px,128px,256px)和一組邊框的寬高比(例如0.5,1,1.5),並且將所有可能的尺寸和比例加以組合。

左:anchors,中:單點的anchor,右:所有anchors

Region Proposal Network

輸入卷積特徵映射,RPN在圖像上生成proposals

正如之前所提到的,將所有參考框(anchors)輸入RPN中,輸出一組目標的proposals,每個anchors會有兩個不同的輸出。

第一個輸出是anchor中是目標對象的概率,可稱為「目標性分數」(objectness score)。注意,RPN不關心目標物體的類別,它只能分辨目標與背景。我們將用這個分數過濾掉不佳的預測,為第二階段做準備。第二個輸出是邊界框回歸,它的作用是調整anchors,讓它們更好地圈住目標物體。

在完全卷積的環境中,RPN的安裝十分高效,利用基礎網路返回的卷積特徵映射作為輸入。首先,我們有一個擁有512個通道和3×3大小的核的卷積層,然後利用1×1的核及一個帶有兩平行通道的卷積層,其中它的通道數量取決於每個點的anchors數量。

RPN中卷積的安裝,k是anchors的數量

對於分類層,每個anchor輸出兩個預測:它為背景的分數(不是目標物)以及它為前景的分數(實際的目標物)。

對於回歸函數,或者邊界框的調整層,我們輸出四個預測值:Δxcenter、Δycenter、Δwidth、Δheight,這些會應用到anchors上生成最終的proposals。

利用最終的proposals坐標和它們的「目標性分數」,就能得到目標物體最佳的proposals。

訓練,目標和損失函數

RPN能做出兩種預測:二元分類問題和邊界框回歸調整。

在訓練時,我們將所有的anchors分成兩類。其中交並比(Intersection over Union,IoU)的值大於0.5、與標準目標物體重合的anchors被認為是「前景」(foreground),那些不與目標物體重合、或者IoU的值小於0.1的被認為是「背景」(background)。

然後,我們對anchors隨機採樣256個樣本,同時保證前景和背景anchors的比例不變。

接著,RPN用上述樣本進行計算,利用二元交叉熵計算出分類器的損失函數。然後用樣本中的前景anchors計算回歸函數。在計算回歸函數的目標時,我們用前景的anchor和最近的目標物體計算能將anchor變為目標物體的正確的Δ。

除了用簡單的L1或者L2損失函數糾正回歸函數的錯誤,論文中還建議用Smooth L1損失函數。Smooth L1與L1基本相同,但是當L1的錯誤足夠小(用一確定的值σ表示),它就被認為是接近正確的,損失就會以更快的速度消失。

但是用動態群組(dynamic batches)會有一些困難。即使我們嘗試保持兩種anchors之間比例的平衡,也無法完美地做到這一點。根據圖像中真實目標物體的位置以及anchors的尺寸和比例,有可能最終沒有位於前景的anchors。在這種情況下,我們轉而使用IoU值最大的anchors來確定正確邊框的位置。這與理想情況相差較遠。

後處理

非極大抑制

由於anchors經常重合,因此proposals最終也會在同意目標物體上重疊。為了解決這一問題,我們用簡單的「非極大抑制」(NMS)演算法。NMS通過分數和迭代篩選邊界框並生成一個proposals的列表,放棄IoU大於某個特定閾值的proposals,保留分數較高的proposals。

雖然看起來簡單,但要謹慎制定IoU的閾值。定的太低,最終可能會找不到正確的proposals;定的太高,最後可能會留下太多proposals。該值常用的數字是0.6。

Proposal選擇

應用了NMS後,我們留下了前N個proposals。在論文中,N=2000,但是即使把數字換成50也有可能得到相當不錯的結果。

獨立應用程序(Standalone application)

RPN可以單獨使用,無需第二個階段的模型。在只有一類對象的問題中,目標物體的概率可用作最終的類別概率。這是因為在這種情況下,「前景」=「單一類別」,「背景」=「多種類別」。

在機器學習問題中,人臉檢測和文本檢測這種可以從RPN獨立應用程序中受益的案例是非常流行的,但目前仍存在很多挑戰。

僅使用RPN的優點之一是在訓練和預測中的速度都有所提高。由於RPN是一個非常簡單、並且只是用卷積層的網路,預測時間要比其他分類網路更快。

興趣區域池化(RoI Pooling)

RPN階段之後,我們得到一堆沒有分類的proposals。接下來要解決的問題是,如何將這些邊界框分到正確的類別中去。

最簡單的方法是將每個proposals裁剪,然後通過預訓練的基礎網路。接著,使用提取出的特徵輸入到一般的分類其中。但是想要處理2000個proposals,這樣的效率未免太低了。

這時,Faster R-CNN可以通過重新使用現有的卷及特徵映射解決或者緩解這一問題。這是利用RoI池化對每個proposals進行固定大小的特徵提取完成的。R-CNN需要固定尺寸的特徵映射,以便將它們分成固定數量的類別。

ROI池化

另外一種更簡單的方法,包括Luminoth的Faster R-CNN也在用的,是用每個proposals來裁剪卷積特徵映射,然後用雙線性插值將裁剪後的映射調整為14×14×convdepth的固定大小。裁剪之後,用2×2的最大池得到最終7×7×convdepth的特徵映射。

基於區域的卷積神經網路(R-CNN)

R-CNN是達到Faster R-CNN的最後一個階段。在從圖像中獲取卷積特徵映射後,利用它來獲得目標物體的proposals,並最終通過RoI池化為每個proposals提取特徵,最後我們需要對這些特徵進行分類。R-CNN要模仿CNN分類的最後階段,其中一個完全連接層輸出每個對象可能的類別的分數。

R-CNN有兩個不同的目的:

在最初的Faster R-CNN論文中,R-CNN將特徵映射應用於每個proposal,「壓平」(flatten)後使用ReLU和兩個4096大小的完全連接層將其激活。

然後,它為每個不同的目標物體使用兩個不同的完全連接層:

R-CNN的結構

訓練和目標

R-CNN的目標與RPN的目標幾乎相同,但考慮到不同類別,我們計算了proposals和標準邊界框之間的IoU。

那些大於0.5的proposals被認為是正確的邊框,而分數在0.1和0.5之間的proposals被標記為「背景」。與我們在為RPN組裝目標時所做的相反,我們忽略了沒有交集的proposals。這是因為在這個階段,我們假設這裡的proposals很好,而且想要解決更難的案例。當然,所有這些可以調整的超參數可以更好地適合目標物的種類。

邊界框回歸的目標試計算proposals與其相應的標準框架之間的偏移量,而且這裡僅針對那些基於IoU閾值分配了類別的proposals。

我們隨機抽樣了一個尺寸為64的迷你群組,其中有高達25%的前景proposals,75%的背景。

按照我們對RPNs損失做的那樣,對於全部所選出的proposals,分類器的損失現在是一個多類交叉熵損失;對於那25%的前景proposals,用Smooth L1損失。由於為了邊框回歸的R-CNN完全連接網路的輸出對每種類別只有一個預測,所以在獲得這種損失時不需小心。在計算損失時,我們只要考慮正確的類別即可。

後處理

與RPN相似,我們最終又得到了一堆已分類的目標對象,在返回他們之前需要進行進一步處理。

為了調整邊框,我們需要考慮哪類是proposals最可能屬於的邊框。同時要忽略那些最有可能是背景的proposals。

在得到最終的目標物體之後,我們用基於分類的NMS刪除北京。這是通過將目標對象按類別進行分組,然後按概率對其進行排序,然後再將NMS應用於每個獨立組。

對於最後的目標物體列表,我們也可以為每個類別設置一個概率閾值和對象數量的限制。

訓練

在原論文中,Faster R-CNN的訓練經歷了多個步驟,每個步驟都是獨立的,在最終進行全面訓練之前合併了所有訓練的權重。從那時起,人們發現進行端到端的聯合訓練結果更好。

把模型結合後,我們可以得到四個不同的損失,兩個用於RPN,兩個用於R-CNN。在RPN和R-CNN上遊客訓練的圖層,我們也有可以訓練(微調)或不能訓練的基礎網路。

基礎網路的訓練取決於我們想要學習的對象的性質和可用的計算能力。如果我們想要檢測與原始數據集相似的目標對象,那麼除了將所有方法都試一遍,也沒什麼好方法了。另一方面,訓練基礎網路是很費時費力的,因為要適應全部的梯度。

四種不同的損失用加權進行組合,這是因為我們可能像給分類器比回歸更多的損失,或者給R-CNN比RPN更多的權重。

除了正則損失外,我么也有歸一化損失。對一些層使用L2正則化,這取決於正在使用的基礎網路以及是否經過訓練。

我們用隨機梯度下降的動量進行訓練,動量設置為0.9。你可以輕鬆地訓練更快的R-CNN和其他優化,不會遇到任何大問題。

學習速度開始為0.001,後來經過5萬次迭代後降到0.0001。這通常是最重要的超參數之一。當我們用Luminoth進行訓練時,通常用默認值開始訓練,然後再慢慢調整。

評估

評估過程使用標準的平均精度均值進行判斷(mAP),並將IoU的值設定在特定範圍。mAP是源於信息檢索的一種標準,經常用於計算排名和目標檢測問題中的錯誤。當你漏了某一邊界框、檢測到不存在或者多次檢測到同一物體時,mAP就會進行懲罰。

結論

現在你應該了解R-CNN的工作原理了吧,如果還想深入了解,可以探究一下Luminoth的實現。

Faster R-CNN證明了,在新的深度學習革命開始的時候,可以用同樣的原理來解決複雜的計算機視覺問題。目前正在建立的新模型不僅能用於目標物體檢測,還能用於語義分割、3D物體檢測等等。有的借鑒了RPN,有的借鑒了R-CNN,有的二者皆有。這就是為什麼我們要搞清楚他們的工作原理,以解決未來將面對的難題。

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


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

TAG:全球大搜羅 |