「技術綜述」一文道盡R-CNN系列目標檢測

dicksonjyl560101發表於2019-07-17


https://www.toutiao.com/a6714257044163002891/


作者 | 言有三、Yolo

編輯 | 言有三

目標檢測任務關注的是圖片中特定目標物體的位置。一個檢測任務包含兩個子任務,其一是輸出這一目標的類別資訊,屬於分類任務。其二是輸出目標的具體位置資訊,屬於定位任務。

分類的結果是一個類別標籤,對於單分類任務而言,它就是一個數,對於多分類任務,就是一個向量。定位任務的輸出是一個位置,用矩形框表示,包含矩形框左上角或中間位置的x,y座標和矩形框的寬度高度。

「技術綜述」一文道盡R-CNN系列目標檢測

與計算機視覺領域裡大部分的演算法一樣,目標檢測也經歷了從傳統的人工設計特徵和淺層分類器的思路,到大資料時代使用深度神經網路進行特徵學習的思路這一過程。

本文主要是為了介紹R-CNN、fast R-CNN、faster R-CNN系列。

目標檢測基礎

不管用傳統方法,還是用深度學習方法來完成目標檢測任務,系統一定會遵循以下3個步驟。 第一個是檢測視窗的選擇,第二個是影像特徵的提取,第三個是分類器的設計。

「技術綜述」一文道盡R-CNN系列目標檢測

1.1 候選框提取

在傳統方法中,當我們要在不同的距離下檢測不同大小的目標時,最簡單也最直觀的方法就是用影像 金字塔+各種尺度比例的框+暴力搜尋法 :從左到右、從上到下滑動視窗,然後利用分類方法對目標框進行識別。

這種利用視窗滑動來確定候選框的方法可以實現我們的預期目標,但是我們不難想到,這種方法在使用過程中會產生大量的無效視窗,浪費了很多計算資源,而且無法得到精確的位置。

1.2 特徵提取

在選定候選區域之後,我們需要提取影像的特徵來進行表達,傳統的有監督的方法和以CNN為代表的無監督特徵學習方法都可以派上用場。常見的傳統特徵有Haar特徵、LBP、HOG等。這些特徵都是研究人員通過長時間的學術研究和實際專案驗證得來的,雖然在比較簡單的任務中可以取得很好的結果,但是設計成本很高,而且面對複雜任務時魯棒性遠遠不夠。

1.3 分類器

最後是分類器,常常被使用的分類器包含Adaboost,SVM,Decision Tree等。在很多時候單一的分類器可能並不能滿足我們的要求,如今使用深度學習來完成各項任務,尤其是參加各類比賽的時候,一定會使用 不同的模型不同的輸入進行Ensemble 。比如我們常見的使用不同的裁剪子區域進行預測,或者使用不同的基準模型進行預測,最後取平均概率等。

傳統目標檢測方法以保羅·維奧拉和邁克爾·瓊斯於2001年提出的 維奧拉-瓊斯目標檢測框架 為代表,這是第一篇基於Haar特徵和Adaboost分類器的檢測方法,也是首個實現實時檢測的框架,論文在2011年的CVPR會議上被評為龍格-希金斯獎。

這個演算法包含以下幾個重要部分:


1.利用Haar特徵描述人臉的共有屬性。

2.建立了被稱為積分影像的特徵,可以快速獲取幾種不同的矩形特徵。
3.利用Adaboost 演算法進行訓練,通過弱分類器的組合實現速度較快精度也不錯的檢測方案。

大家可以好好了解一下,尤其是積分圖和adaboost的思想,這個方法也是 opencv中的cvHaarDetectObjects() 演算法。

R-CNN系列演算法

傳統方法由於滑窗效率低下,特徵不夠魯棒等原因限制了目標檢測的發展,導致其一直無法在工業界進行大規模落地。基於深度學習的方案致力於解決這幾個問題,力求能讓這個領域實現進一步發展。

根據檢測階段的不同,我們可以將深度學習方法分為one-stage檢測演算法和two-stage檢測演算法兩種。對於two-stage檢測方法來說,它先生成了可能包含物體的候選區域Region Proposal,然後在對這個候選區域做進一步的分類和校準,得到最終的檢測結果,代表方法有R-CNN系列方法。而單階段檢測演算法直接給出最終的檢測結果,沒有經過生成候選區域的步驟,典型代表為YOLO和SSD。

我們今天主要介紹的是R-CNN系列的有關演算法。

2.1 selective search與R-CNN

傳統目標檢測方法中的區域選擇過程用的是窮舉法的思路而不是生成候選區域方法,每滑一個視窗檢測一次,相鄰視窗資訊重疊高,檢測速度慢,這導致出現非常多的無效區域的判斷,一張普通大小的影像可以輕易提出超過1萬的候選區域。那有沒有辦法減小候選區域的數量呢?

J. R. R. Uijlings在2012年提出了selective search方法,這種方法其實是利用了經典的影像分割方法Graphcut,首先對影像做初始分割,然後通過分層分組方法對分割的結果做篩選和歸併,最終輸出所有可能位置,將候選區域縮小到2000個左右。

具體來說,首先通過將影像進行過分割得到若干等區域組成區域的集合S,這是一個初始化的集合;

然後利用顏色、紋理、尺寸和空間交疊等特徵,計算區域集裡每個相鄰區域的相似度; 找出相似度最高的兩個區域,將其合併為新集並從區域集合中刪除原來的兩個子集。重複以上的迭代過程,直到最開始的集合S為空,得到了影像的分割結果,得到候選的區域邊界,也就是初始框。

有了這樣的大量降低計算量的候選框生成策略後,基於深度學習的早期目標檢測框架開始發展起來,比較典型的就是R-CNN演算法。

R-CNN即Region-based Convolutional Neural Networks,是一種結合區域提名(Region Proposal)和卷積神經網路(CNN)的目標檢測方法。

R-CNN的網路框架如下所示:

「技術綜述」一文道盡R-CNN系列目標檢測

在R-CNN框架中使用Selective search將候選區域控制在了2000個左右,然後將對應的框進行縮放操作,送入CNN中進行訓練,通過SVM和迴歸器確定物體的類別並對其進行定位。由於CNN具有非常強大的非線性表徵能力,可以對每一個區域進行很好的特徵學習,所以效能大大提升。

R-CNN的主要特點有以下三點:


1.利用了selective search方法,即先通過例項分割將影像分割為若干小塊,然後選擇相似度較高的小塊,把這些相似小塊合併為一個大塊,最後整個物體生成一個大的矩形框,通過這種方法大大提高候選區域的篩選速度。

2.用在ImageNet資料集上進行學習的引數對神經網路進行預處理,解決了在目標檢測訓練過程中標註資料不足的問題。
3.通過線性迴歸模型對邊框進行校準,減少影像中的背景空白,得到更精確的定位。

該方法將PASCAL VOC上的檢測率從35.1%提升到了53.7%,其意義與AlexNet在2012年取得分類任務的大突破是相當的,對目標檢測領域影響深遠。

不過,selective search方案仍然有計算量過大的問題。

2.2 SPPNet

儘管 RCNN通過減少了候選框減少了計算量,利用了CNN進行學習提升了特徵表達能力,但是它仍然有兩個重大缺陷。

  • 其一是冗餘計算,因為R-CNN的方法是先生成候選區域,再對區域進行卷積,其中候選區域會有一定程度的重疊,因為selective search方法仍然不夠好,導致CNN對相同區域進行重複卷積提取特徵。而且R-CNN方法將提取後的特徵儲存下來,然後使用傳統的SVM分類器進行分類,導致需要很大的儲存空間。
  • 其二是候選區域的尺度縮放問題,因為R-CNN方法將所有區域縮放到同一尺度進行網路訓練,而實際selective search選取的目標框有各種尺寸,這可能導致目標的變形,無論是剪裁還是縮放都不能解決這個問題。

SPP-Net主要對第二個缺陷進行改進,其主要思想是去掉了原始影像上的crop/warp等操作,換成了在卷積特徵上的空間金字塔池化層(Spatial Pyramid Pooling,SPP)

之所以要對影像進行縮放到固定的尺度,是因為全連線層的存在。全連線層的輸入需要固定的大小,所以要使用不同大小的圖片,就必須在輸入全連線層之前進行統一變換。

但是直接進行裁剪或縮放會使圖片資訊發生丟失,有時候會因為候選框太小的原因導致只能獲得部分目標,使輸入神經網路的資訊不完整,如下圖。

「技術綜述」一文道盡R-CNN系列目標檢測

影像裁剪之後再進行縮放操作又會導致物體變形失真,同樣影響檢測效果。

「技術綜述」一文道盡R-CNN系列目標檢測

SPP提出可以通過一個特殊的池化層,Spatial Pyramid Pooling層來解決,它實現了將輸入的任意尺度的特徵圖組合成了特定維度的輸出,從而去掉了原始影像上的crop/warp等操作的約束。

Spatial Pyramid Pooling是在卷積特徵上的空間金字塔池化層,不管輸入的影像是多大,假設最終的單個通道的featuramap尺度為N*N。

利用max pooling操作將其分成1x1,2x2,4x4的3張子圖,從而原來任意的N*N的featuremap,都被表示成為21維的固定維度的向量,然後輸入全連線層。在實際進行檢測任務的時候,就可以根據任務本身來設計這個spp操作。這樣就解決了不同輸入大小圖的問題,避免了縮放變形等操作。

「技術綜述」一文道盡R-CNN系列目標檢測

2.3 Fast R-CNN

在RCNN中,對於每一個候選區域都使用CNN進行特徵提取,沒有共享計算,這其實包含了非常多的冗餘操作。那能否像V-J演算法中的積分圖一樣,只需要提取一次特徵就能完成操作呢?

Fast R-CNN借鑑了SPP的思想,解決了這個問題。 Fast R-CNN的流程就是,首先以整張圖片為輸入,利用CNN得到圖片的特徵層。然後,利用selective search演算法得到原始影像空間中的候選框,並將這些候選框投影到特徵層。針對特徵層上的每個不同大小的候選框,使用RoI池化操作,得到固定維度的特徵表示,最後通過兩個全連線層,分別用softmax分類以及迴歸模型進行檢測。

與R-CNN的區別之處就在於RoI(Region of Interesting)Pooling層,它是一個簡化的SPP層。

一張圖經過卷積後,會得到相應的feature map,feature map的每一個畫素都可以對應回原始的影像。任何一個候選區域,我們只需要獲取它的左上右下兩個點對應到feature map中的位置,就能從feature map中取到這個候選區域對應的特徵,這就是一個簡單的對映,如下圖:

「技術綜述」一文道盡R-CNN系列目標檢測

令S是stride的大小,也就是從原始解析度到當前解析度尺度的降低倍率,則從原圖的座標(x,y)對應到featuremap的座標(x’,y’),就是

x’=x/S ,y’=y/S

根據圖片填充的不同,需要計算相應的偏移值,但是這是一一對應的。此時,任意的影像區域的特徵,都可以從特徵圖中獲取,就沒有必要使用不同的CNN網路進行特徵的提取了。而是實現了一次卷積處處可用,類似於積分圖的思想,從而大大降低了計算量。

同時它的訓練和測試不再分多步,不再需要額外的硬碟來儲存中間層的特徵,梯度也能夠通過RoI Pooling層直接傳播。Fast R-CNN還使用SVD分解全連線層的引數矩陣,壓縮為兩個規模小很多的全連線層。

2.4 Faster R-CNN

R-CNN,SPPNet,Fast R-CNN都沒有解決一個問題,就是selective search方法低效率的滑動視窗選擇問題,它仍然生成了大量無效區域,多了造成算力的浪費,少了則導致漏檢。

因此,任少卿等人提出了Faster RCNN方法。在Faster RCNN框架中,提出了Region Proposal Networks,簡稱RPN框架。它實現了利用神經網路自己學習生成候選區域的策略,充分利用了feature maps的價值,在目標檢測中徹底去除了selective search方法。

Faster R-CNN是深度學習中的two-stage方法的奠基性工作,提出的RPN網路取代Selective Search演算法後使得檢測任務可以由神經網路端到端地完成。

粗略的講,Faster R-CNN = RPN + Fast R-CNN,因為Fast RCNN具有共享卷積計算的特性,所以使得新引入的RPN的計算量很小, Faster R-CNN可以在單個GPU上以5fps的速度執行。

所謂RPN,就是以一張任意大小的圖片作為輸入,輸出一批矩形區域的提名,每一個區域都會對應目標的分數和位置資訊。實際就是在最終的卷積特徵層上,在每個點利用滑窗生成k個不同的矩形框來提取區域,k一般取為9。

K個不同的矩形框被稱為anchor,具有不同尺度和比例。用分類器來判斷anchor覆蓋的影像是前景還是背景。對於每一個anchor,還需要使用一個迴歸模型來回歸框的精細位置。

Faster R-CNN中RPN的結構如下:

「技術綜述」一文道盡R-CNN系列目標檢測

與selective search方法相比,RPN網路將候選區域的選擇從影像中移到了feature map中,因為feature map的大小遠遠小於原始的影像,此時的滑動視窗的計算量呈數量級的降低。並且RPNs和RoI Pooling還共用了基礎的網路,更是大大地減少了引數量和預測時間。由於是在特徵空間進行候選框生成,可以學到更加高層語義的抽象特徵,生成的候選區域的可靠程度也得到了大大提高。

Faster R-CNN的主要步驟如下:

  • 特徵提取:與Fast R-CNN相同,Faster R-CNN把整張圖片輸入神經網路中,利用CNN處理圖片得到feature map;
  • 區域提名:在上一步驟得到的feature map上學習proposal的提取;
  • 分類與迴歸:對每個Anchor Box對應的區域進行二分類,判斷這個區域內是否有物體,然後對候選框位置和大小進行微調,分類。

理論上就這麼多,理解起來很簡單,但是實際實現細節非常多,請大家多實踐。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2650762/,如需轉載,請註明出處,否則將追究法律責任。

相關文章