大话目标检测经典模型(RCNN、Fast RCNN、Faster RCNN)
目標檢測是深度學習的一個重要應用,就是在圖片中要將里面的物體識別出來,并標出物體的位置,一般需要經過兩個步驟:
1、分類,識別物體是什么
?
2、定位,找出物體在哪里
?
除了對單個物體進行檢測,還要能支持對多個物體進行檢測,如下圖所示:
?
這個問題并不是那么容易解決,由于物體的尺寸變化范圍很大、擺放角度多變、姿態不定,而且物體有很多種類別,可以在圖片中出現多種物體、出現在任意位置。因此,目標檢測是一個比較復雜的問題。
最直接的方法便是構建一個深度神經網絡,將圖像和標注位置作為樣本輸入,然后經過CNN網絡,再通過一個分類頭(Classification head)的全連接層識別是什么物體,通過一個回歸頭(Regression head)的全連接層回歸計算位置,如下圖所示:
?
但“回歸”不好做,計算量太大、收斂時間太長,應該想辦法轉為“分類”,這時容易想到套框的思路,即取不同大小的“框”,讓框出現在不同的位置,計算出這個框的得分,然后取得分最高的那個框作為預測結果,如下圖所示:
?
根據上面比較出來的得分高低,選擇了右下角的黑框作為目標位置的預測。
但問題是:框要取多大才合適?太小,物體識別不完整;太大,識別結果多了很多其它信息。那怎么辦?那就各種大小的框都取來計算吧。
如下圖所示(要識別一只熊),用各種大小的框在圖片中進行反復截取,輸入到CNN中識別計算得分,最終確定出目標類別和位置。
?
這種方法效率很低,實在太耗時了。那有沒有高效的目標檢測方法呢?
一、R-CNN 橫空出世
R-CNN(Region CNN,區域卷積神經網絡)可以說是利用深度學習進行目標檢測的開山之作,作者Ross Girshick多次在PASCAL VOC的目標檢測競賽中折桂,2010年更是帶領團隊獲得了終身成就獎,如今就職于Facebook的人工智能實驗室(FAIR)。
R-CNN算法的流程如下
?
1、輸入圖像
2、每張圖像生成1K~2K個候選區域
3、對每個候選區域,使用深度網絡提取特征(AlextNet、VGG等CNN都可以)
4、將特征送入每一類的SVM 分類器,判別是否屬于該類
5、使用回歸器精細修正候選框位置
下面展開進行介紹
1、生成候選區域
使用Selective Search(選擇性搜索)方法對一張圖像生成約2000-3000個候選區域,基本思路如下:
(1)使用一種過分割手段,將圖像分割成小區域
(2)查看現有小區域,合并可能性最高的兩個區域,重復直到整張圖像合并成一個區域位置。優先合并以下區域:
- 顏色(顏色直方圖)相近的
- 紋理(梯度直方圖)相近的
- 合并后總面積小的
- 合并后,總面積在其BBOX中所占比例大的
在合并時須保證合并操作的尺度較為均勻,避免一個大區域陸續“吃掉”其它小區域,保證合并后形狀規則。
(3)輸出所有曾經存在過的區域,即所謂候選區域
2、特征提取
使用深度網絡提取特征之前,首先把候選區域歸一化成同一尺寸227×227。
使用CNN模型進行訓練,例如AlexNet,一般會略作簡化,如下圖:
?
3、類別判斷
對每一類目標,使用一個線性SVM二類分類器進行判別。輸入為深度網絡(如上圖的AlexNet)輸出的4096維特征,輸出是否屬于此類。
4、位置精修
目標檢測的衡量標準是重疊面積:許多看似準確的檢測結果,往往因為候選框不夠準確,重疊面積很小,故需要一個位置精修步驟,對于每一個類,訓練一個線性回歸模型去判定這個框是否框得完美,如下圖:
?
R-CNN將深度學習引入檢測領域后,一舉將PASCAL VOC上的檢測率從35.1%提升到53.7%。
二、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的以下問題:
1、訓練、測試時速度慢
R-CNN的一張圖像內候選框之間存在大量重疊,提取特征操作冗余。而Fast R-CNN將整張圖像歸一化后直接送入深度網絡,緊接著送入從這幅圖像上提取出的候選區域。這些候選區域的前幾層特征不需要再重復計算。
2、訓練所需空間大
R-CNN中獨立的分類器和回歸器需要大量特征作為訓練樣本。Fast R-CNN把類別判斷和位置精調統一用深度網絡實現,不再需要額外存儲。
下面進行詳細介紹
1、在特征提取階段,通過CNN(如AlexNet)中的conv、pooling、relu等操作都不需要固定大小尺寸的輸入,因此,在原始圖片上執行這些操作后,輸入圖片尺寸不同將會導致得到的feature map(特征圖)尺寸也不同,這樣就不能直接接到一個全連接層進行分類。
在Fast R-CNN中,作者提出了一個叫做ROI Pooling的網絡層,這個網絡層可以把不同大小的輸入映射到一個固定尺度的特征向量。ROI Pooling層將每個候選區域均勻分成M×N塊,對每塊進行max pooling。將特征圖上大小不一的候選區域轉變為大小統一的數據,送入下一層。這樣雖然輸入的圖片尺寸不同,得到的feature map(特征圖)尺寸也不同,但是可以加入這個神奇的ROI Pooling層,對每個region都提取一個固定維度的特征表示,就可再通過正常的softmax進行類型識別。
2、在分類回歸階段,在R-CNN中,先生成候選框,然后再通過CNN提取特征,之后再用SVM分類,最后再做回歸得到具體位置(bbox regression)。而在Fast R-CNN中,作者巧妙的把最后的bbox regression也放進了神經網絡內部,與區域分類合并成為了一個multi-task模型,如下圖所示:
?
實驗表明,這兩個任務能夠共享卷積特征,并且相互促進。
Fast R-CNN很重要的一個貢獻是成功地讓人們看到了Region Proposal+CNN(候選區域+卷積神經網絡)這一框架實時檢測的希望,原來多類檢測真的可以在保證準確率的同時提升處理速度。
三、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系列目標檢測方法是目標檢測技術領域中的最主要分支之一。
轉載于:https://www.cnblogs.com/hd-zg/p/8724730.html
總結
以上是生活随笔為你收集整理的大话目标检测经典模型(RCNN、Fast RCNN、Faster RCNN)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Groovy 设计模式 -- 借贷
- 下一篇: 模块说