大話目標檢測經典模型(RCNN、Fast RCNN、Faster RCNN)

目標檢測是深度學習的一個重要應用,就是在圖片中要將裏面的物體識別出來,並標出物體的位置,通常須要通過兩個步驟:
一、分類,識別物體是什麼
 
二、定位,找出物體在哪裏
 
除了對單個物體進行檢測,還要能支持對多個物體進行檢測,以下圖所示:
 
這個問題並非那麼容易解決,因爲物體的尺寸變化範圍很大、擺放角度多變、姿態不定,並且物體有不少種類別,能夠在圖片中出現多種物體、出如今任意位置。所以,目標檢測是一個比較複雜的問題。
最直接的方法即是構建一個深度神經網絡,將圖像和標註位置做爲樣本輸入,而後通過CNN網絡,再經過一個分類頭(Classification head)的全鏈接層識別是什麼物體,經過一個迴歸頭(Regression head)的全鏈接層迴歸計算位置,以下圖所示:
 
但「迴歸」很差作,計算量太大、收斂時間太長,應該想辦法轉爲「分類」,這時容易想到套框的思路,即取不一樣大小的「框」,讓框出如今不一樣的位置,計算出這個框的得分,而後取得分最高的那個框做爲預測結果,以下圖所示:
 
根據上面比較出來的得分高低,選擇了右下角的黑框做爲目標位置的預測。算法

但問題是:框要取多大才合適?過小,物體識別不完整;太大,識別結果多了不少其它信息。那怎麼辦?那就各類大小的框都取來計算吧。網絡

以下圖所示(要識別一隻熊),用各類大小的框在圖片中進行反覆截取,輸入到CNN中識別計算得分,最終肯定出目標類別和位置。
 
這種方法效率很低,實在太耗時了。那有沒有高效的目標檢測方法呢?框架

1、R-CNN 橫空出世
R-CNN(Region CNN,區域卷積神經網絡)能夠說是利用深度學習進行目標檢測的開山之做,做者Ross Girshick屢次在PASCAL VOC的目標檢測競賽中折桂,2010年更是帶領團隊得到了終身成就獎,現在就任於Facebook的人工智能實驗室(FAIR)。分佈式

R-CNN算法的流程以下
 
一、輸入圖像
二、每張圖像生成1K~2K個候選區域
三、對每一個候選區域,使用深度網絡提取特徵(AlextNet、VGG等CNN均可以)
四、將特徵送入每一類的SVM 分類器,判別是否屬於該類
五、使用迴歸器精細修正候選框位置oop

下面展開進行介紹
一、生成候選區域
使用Selective Search(選擇性搜索)方法對一張圖像生成約2000-3000個候選區域,基本思路以下:
(1)使用一種過度割手段,將圖像分割成小區域
(2)查看現有小區域,合併可能性最高的兩個區域,重複直到整張圖像合併成一個區域位置。優先合併如下區域:
- 顏色(顏色直方圖)相近的
- 紋理(梯度直方圖)相近的
- 合併後總面積小的
- 合併後,總面積在其BBOX中所佔比例大的
在合併時須保證合併操做的尺度較爲均勻,避免一個大區域陸續「吃掉」其它小區域,保證合併後形狀規則。
(3)輸出全部曾經存在過的區域,即所謂候選區域
二、特徵提取
使用深度網絡提取特徵以前,首先把候選區域歸一化成同一尺寸227×227。
使用CNN模型進行訓練,例如AlexNet,通常會略做簡化,以下圖:
 
三、類別判斷
對每一類目標,使用一個線性SVM二類分類器進行判別。輸入爲深度網絡(如上圖的AlexNet)輸出的4096維特徵,輸出是否屬於此類。
四、位置精修
目標檢測的衡量標準是重疊面積:許多看似準確的檢測結果,每每由於候選框不夠準確,重疊面積很小,故須要一個位置精修步驟,對於每個類,訓練一個線性迴歸模型去斷定這個框是否框得完美,以下圖:
 
R-CNN將深度學習引入檢測領域後,一舉將PASCAL VOC上的檢測率從35.1%提高到53.7%。學習

2、Fast R-CNN大幅提速
繼2014年的R-CNN推出以後,Ross Girshick在2015年推出Fast R-CNN,構思精巧,流程更爲緊湊,大幅提高了目標檢測的速度。
Fast R-CNN和R-CNN相比,訓練時間從84小時減小到9.5小時,測試時間從47秒減小到0.32秒,而且在PASCAL VOC 2007上測試的準確率相差無幾,約在66%-67%之間。
 
Fast R-CNN主要解決R-CNN的如下問題:
一、訓練、測試時速度慢
R-CNN的一張圖像內候選框之間存在大量重疊,提取特徵操做冗餘。而Fast R-CNN將整張圖像歸一化後直接送入深度網絡,緊接着送入從這幅圖像上提取出的候選區域。這些候選區域的前幾層特徵不須要再重複計算。
二、訓練所需空間大
R-CNN中獨立的分類器和迴歸器須要大量特徵做爲訓練樣本。Fast R-CNN把類別判斷和位置精調統一用深度網絡實現,再也不須要額外存儲。測試

下面進行詳細介紹
一、在特徵提取階段,經過CNN(如AlexNet)中的conv、pooling、relu等操做都不須要固定大小尺寸的輸入,所以,在原始圖片上執行這些操做後,輸入圖片尺寸不一樣將會致使獲得的feature map(特徵圖)尺寸也不一樣,這樣就不能直接接到一個全鏈接層進行分類。
在Fast R-CNN中,做者提出了一個叫作ROI Pooling的網絡層,這個網絡層能夠把不一樣大小的輸入映射到一個固定尺度的特徵向量。ROI Pooling層將每一個候選區域均勻分紅M×N塊,對每塊進行max pooling。將特徵圖上大小不一的候選區域轉變爲大小統一的數據,送入下一層。這樣雖然輸入的圖片尺寸不一樣,獲得的feature map(特徵圖)尺寸也不一樣,可是能夠加入這個神奇的ROI Pooling層,對每一個region都提取一個固定維度的特徵表示,就可再經過正常的softmax進行類型識別。
大數據

二、在分類迴歸階段,在R-CNN中,先生成候選框,而後再經過CNN提取特徵,以後再用SVM分類,最後再作迴歸獲得具體位置(bbox regression)。而在Fast R-CNN中,做者巧妙的把最後的bbox regression也放進了神經網絡內部,與區域分類合併成爲了一個multi-task模型,以下圖所示:
 
實驗代表,這兩個任務可以共享卷積特徵,而且相互促進。人工智能

Fast R-CNN很重要的一個貢獻是成功地讓人們看到了Region Proposal+CNN(候選區域+卷積神經網絡)這一框架實時檢測的但願,原來多類檢測真的能夠在保證準確率的同時提高處理速度。spa

3、Faster R-CNN更快更強
繼2014年推出R-CNN,2015年推出Fast R-CNN以後,目標檢測界的領軍人物Ross Girshick團隊在2015年又推出一力做:Faster R-CNN,使簡單網絡目標檢測速度達到17fps,在PASCAL VOC上準確率爲59.9%,複雜網絡達到5fps,準確率78.8%。
在Fast R-CNN還存在着瓶頸問題:Selective Search(選擇性搜索)。要找出全部的候選框,這個也很是耗時。那咱們有沒有一個更加高效的方法來求出這些候選框呢?
在Faster R-CNN中加入一個提取邊緣的神經網絡,也就說找候選框的工做也交給神經網絡來作了。這樣,目標檢測的四個基本步驟(候選區域生成,特徵提取,分類,位置精修)終於被統一到一個深度網絡框架以內。以下圖所示:
 
Faster R-CNN能夠簡單地當作是「區域生成網絡+Fast R-CNN」的模型,用區域生成網絡(Region Proposal Network,簡稱RPN)來代替Fast R-CNN中的Selective Search(選擇性搜索)方法。
以下圖
 
RPN以下圖:
 
RPN的工做步驟以下:
- 在feature map(特徵圖)上滑動窗口
- 建一個神經網絡用於物體分類+框位置的迴歸
- 滑動窗口的位置提供了物體的大致位置信息
- 框的迴歸提供了框更精確的位置

Faster R-CNN設計了提取候選區域的網絡RPN,代替了費時的Selective Search(選擇性搜索),使得檢測速度大幅提高,下表對比了R-CNN、Fast R-CNN、Faster R-CNN的檢測速度:

總結
R-CNN、Fast R-CNN、Faster R-CNN一路走來,基於深度學習目標檢測的流程變得愈來愈精簡、精度愈來愈高、速度也愈來愈快。基於region proposal(候選區域)的R-CNN系列目標檢測方法是目標檢測技術領域中的最主要分支之一。

 

牆裂建議

2014至2016年,Ross Girshick 等人發表了關於R-CNN、Fast R-CNN、Faster R-CNN的經典論文《Rich feature hierarchies for accurate object detection and semantic segmentation》、《Fast R-CNN》、《Faster R-CNN: Towards Real-Time ObjectDetection with Region Proposal Networks》,在這些論文中對目標檢測的思想、原理、測試狀況進行了詳細介紹,建議閱讀些篇論文以全面瞭解目標檢測模型。

關注本人公衆號「大數據與人工智能Lab」(BigdataAILab),而後回覆「論文」關鍵字可在線閱讀經典論文的內容

 

推薦相關閱讀

相關文章
相關標籤/搜索