目标檢測旨在準确地找到給定圖檔中物體的位置,并将其正确分類。準确地來講,目标檢測需要确定目标是什麼以及對其定位。
然而,想要解決這個問題并不容易。因為,目标的大小,其在空間中的方向,其姿态,以及其在圖檔中的位置都是變化的。
這裡有一張圖檔,我們需要識别圖檔中的物體,并且用方框将該物體圈出來。

- 輸入:圖像
- 輸出:目标類型
- 評價名額:精确度
定位:
- 輸出:方框在圖檔中的位置(x,y,w,h)
- 評價名額:檢測評價函數(IOU)
如今大火的卷積神經網絡幫助我們很好地進行圖像識别。但是,我們仍需要一些額外的功能來進行精确定位,深度學習在這裡發揮了很好的作用。
在本文中,我們将從目标定位的角度入手探讨目标檢測技術的發展。我們将按着如下的演化順序講述:R-CNN->SPP Net->Fast R-CNN-> Faster R-CNN
在開始前,我們将對基于區域的卷積神經網絡(R-CNN)進行簡單的介紹。
将定位看作回歸問題
如果我們将其看作是一個回歸問題,則需要對(x,y,w,h)四個參數進行預測,進而得到方框所在位置。
步驟1
- 先解決最簡單的問題:使用神經網絡識别圖檔
- 在AlexNet VGG GoogleLenet上微調(fine-tuning)
目标檢測技術演化:從R-CNN到Faster R-CNN将定位看作回歸問題取圖像視窗目标檢測R-CNNSPP NetFast R-CNNFaster R-CNN總結
步驟2
- 在上述神經網絡的尾部展開(CNN前面保持不變,我們對CNN的結尾處做出改進:加了兩個頭:“分類頭”和“回歸頭”)
- 将其轉化為分類 + 回歸模型
目标檢測技術演化:從R-CNN到Faster R-CNN将定位看作回歸問題取圖像視窗目标檢測R-CNNSPP NetFast R-CNNFaster R-CNN總結
步驟3
- 在回歸部分使用歐氏距離損失
- 使用随機梯度下降進行訓練
步驟4
- 在預測部分結合回歸和分類
- 實作不同的功能
接着,我們将進行兩次微調操作。第一次在AlexNet上進行,第二次将頭部改為回歸頭。
回歸部分加在哪裡呢?
兩種解決辦法:
- 加在最後一個卷積層後面(如VGG)
- 加在最後一個全連接配接層後面(如R-CNN)
但是實作回歸操作太困難了,我們需要找到一種方法将其變為分類問題。回歸的訓練參數收斂的時間要長得多,是以上面的網絡采取了用分類的網絡來計算網絡共同部分的連接配接權值。
取圖像視窗
- 依舊使用前面所提及的分類+回歸的思路
- 首先選取不同的大小的方框
- 讓方框出現在不同的位置,計算出這個方框在不同位置的得分
- 取得分最高的那方框
左上角的黑框:得分0.5
右上角的黑框:得分0.75
左下角的黑框:得分0.6
右下角的黑框:得分0.8
根據這些得分,我們選擇右下角的黑框作為所要預測的目标位置。
注:有的時候也會選擇得分最高的兩個方框,然後取兩個方框的交集作為最終需要預測的位置。
問題:方框的大小如何确定呢?
當取了不同的方框後,依次從左上角掃描到右下角。
總結:
對第一張圖檔,我們使用不同大小的方框(周遊整張圖檔)将圖檔截取出來,輸入到CNN,然後CNN會輸出這個框的分類以及這個框圖檔對應的(x,y,w,h)。
但是,這個方法太耗費時間了,需要做一些優化。最初的網絡模型如下圖所示:
所做優化:将全連接配接層改為為卷積層以提高速度。
目标檢測
當圖中有多個物體存在的時候我們應該如何做呢?現在我們所要解決的問題就變成了:多個目辨別别+定位。
現在我們還能将其看作分類問題麼?
可是,将其看作分類問題的話會有如下沖突産生:
- 你需要找到許多的位置,并提供不同大小的方框
- 你還需要對方框中的圖像進行分類
- 當然,如果你的GPU很強大,将其看作分類問題也沒什麼不妥
如果将其看作分類問題,我們能做哪些優化呢?我們并不想使用太多的方框在不同的位置間來回嘗試。下面,給出了一種解決方案:
首先,我們需要找出包含所有目标的方框。其中有的方框會産生重疊或者互相包含,這樣我們就不用枚舉出所有的方框了。
對于候選框的擷取,前人發現了很多種方法:比如EdgeBoxes和Selective Search。以下是候選方框擷取方法的性能對比:
對于“選擇性搜尋”是如何選出所有候選方框這個問題,本文不作介紹,有興趣的可以對其相關論文進行研究。
R-CNN
上述提及的思路推動了R-CNN的面世。讓我們以同樣的圖檔為例,對R-CNN進行講解。
下載下傳一個分類模型(如AlexNet)
對模型進行微調
- 将分類數目從1000降至20
- 去掉最後一個全連接配接層
特征提取:
- 提取出圖像中所有的候選方框(選擇性搜尋)
- 對每一個區域:調整區域的大小,使其與CNN的輸入一緻,做一次向前運算,将第五個池化層的輸出存入硬碟中
- 訓練一個支援向量機(SVM)分類器(二分類),用以判斷這個候選框裡物體的類别
- 判斷SVM是否屬于對應的類别。如果是,就是positive,如果否,就是negative。下面是一個給狗分類的SVM示例。
步驟5
使用回歸器對候選方框的位置進行仔細校正。對于每一個分類,都需要訓練一個線性回歸模型,用以判斷這個方框是否足夠比對。
SPP Net
空間金字塔池化(SPP:Spatial Pyramid Pooling)概念的提出對R-CNN的發展有着非凡的意義。在此我們會對SPP進行簡明的介紹。
SPP有兩個特征:
1. 結合空間金字塔法,實作CNN的多尺度輸入
一般來說,在CNN後面會接有一個全連接配接層或者一個分類器。它們都需要調整至合适大小方可作為輸入,是以需要對輸入資料進行分割和變形。然而,這些預處理可能會造成資料的丢失或幾何的失真。SPP Net的第一個貢獻就是将金字塔思想與CNN相結合,實作資料的多尺度輸入。
如下圖所示,在卷積層和全連接配接層之間加入一個SPP層。此時,網絡的輸入尺度可以是任意的,在SPP層中,池化所需的過濾器會根據輸入自動調節大小,但SPP的輸出尺度确實保持不變的。
2. 隻對原始圖像提取一次卷積特征
在R-CNN中,每個候選框會将其尺寸調至統一,然後分别作為CNN的輸入,但這樣的做法降低了效率。SPP Net針對這個缺點做了相應的優化:隻對原始圖像進行一次卷積操作,得到特征圖,然後找到每個候選方框在特征圖上的映射,然後将該映射作為卷積特征輸入SPP層。這種優化方法節約了大量的計算時間,相比 R-CNN快上百倍。
Fast R-CNN
SPP Net非常實用,有學者就在R-CNN的基礎上結合SPP Net,提出Fast R-CNN,進一步提升了性能。
R-CNN與Fast R-CNN有什麼差別呢?
首先,讓我們來看看R-CNN的不足之處。盡管它在提取潛在邊框作為輸入時,使用了選擇性搜尋以及其它處理方法,但是R-CNN在運算速度上仍然遇到了瓶頸。這是由于計算機在對所有區域進行特征提取時會進行大量的重複計算。
為了解決這個問題,研究學者提出了Fast R-CNN。
在Fast R-CNN中,有一個被稱為ROI Pooling的單層SPP網絡層。該網絡層能夠将不同尺寸的輸入映射為一系列固定尺度的特征向量,正如我們所知,conv,pooling,relu以及一些其它操作并不需要固定尺度的輸入。是以,當我們在原始圖檔上執行這些操作後,由于輸入圖檔的尺寸不同,得到的特征圖尺寸也不一樣,不能将它們直接連接配接到一個全連接配接層上進行分類,但是我們可以在其中加入ROI Pooling層,以一個固定尺度的特征來表示每個區域,再通過softmax進行分類。
此外,前面所講的R-CNN需要先有一個proposal,再輸入到CNN中進行特征提取,之後采用SVM進行分類,最後進行邊框回歸。但是在Fast R-CNN模型中,作者将邊框回歸引入神經網絡,并将其與區域分類合并,形成一個多任務模型。
實驗證明,這兩個任務能夠共享卷積特征。Fast R-CNN的一個額外貢獻是使Region Proposal+CNN這一架構得以運用,同時讓人們看到進行多類檢測的同時仍保證精度是能夠實作的。
R-CNN總結:
- R-CNN有一些缺點
- 主要缺點:因為每一個候選方框都需要獨立地輸入到CNN中,此操作十分耗費時間
- 次要缺點:在共享層,不是每個候選方框都作為輸入進入到CNN中。相反,輸入的是一張完整的圖檔,在第五個卷積層提取出每個候選方框的特征
- 原始方法:大量候選方框(例如2000個)→CNN→得到每個候選方框的特征→分類+回歸
-
現在的方法:完整的圖檔→CNN→得到每個候選方框的特征→分類+回歸
很明顯,Fast R-CNN比R-CNN在速度上有了大幅提升;與R-CNN對每個候選方框輸入到CNN中提取特征不同的是,Fast R-CNN隻對輸入的整張圖檔提取一次特征,然後在第五個卷積層上提取每個候選方框的特征,此操作隻需要計算一次特征,剩下的操作在第五個卷積層上完成即可。
性能的提升也十分明顯:
Faster R-CNN
毫無疑問,Fast R-CNN與傳統的CNN相比,在性能上有了大幅提升。但Fast R-CNN的一個主要問題在于它使用選擇性搜尋去找所有的候選方框,這是非常耗時的。
是否有更加高效的方法去找出所有的候選方框呢?
解決辦法:增加一個可以對邊緣進行提取的神經網絡。換句話說,利用神經網絡去尋找所有的候選方框。能夠實作這種操作的神經網絡叫做區域生成網絡(RPN:Region Proposal Network)。
讓我們看看RPN有哪些提升:
- 在最後一個全連接配接層後加入RPN
- RPN直接訓練得到候選區域
RPN總結:
- 在特征圖上進行視窗滑動
- 建立一個神經網絡用于目标分類以及方框的位置回歸
- 滑動視窗的位置提供關于目标的大緻位置資訊
- 回歸能夠提供一個更加精确的方框位置
四種損失函數:
- RPN分類
- RPN回歸
- Fast R-CNN分類
- Fast R-CNN回歸
速度比較
Faster R-CNN的貢獻在于它設計了一個RPN網絡對候選區域進行提取,此步驟代替了耗時過多的選擇性搜尋,使速度得到大幅提升。
總結
總的來說,從R-CNN,SPP-NET,Fast R-CNN到R-CNN,基于深度學習進行目标檢測的步驟得到了簡化,精度得到了提高,速度得到了提升。可以說,基于區域生成的系列R-CNN目标檢測算法在目标檢測領域已經成為最主要的分支。
數十款阿裡雲産品限時折扣中,趕緊點選領劵開始雲上實踐吧!以上為譯文
本文由北郵
@愛可可-愛生活老師推薦,
阿裡雲雲栖社群組織翻譯。
文章原标題《From R-CNN to Faster R-CNN: The Evolution of Object Detection Technology》,作者:Leona Zhang,譯者:Elaine,審校:袁虎。
文章為簡譯,更為詳細的内容,請檢視
原文