摘要: 一文了解目標檢測技術發展,不要錯過喲。
目標檢測旨在準確地找到給定圖片中物體的位置,並將其正確分類。準確地來說,目標檢測須要肯定目標是什麼以及對其定位。算法
然而,想要解決這個問題並不容易。由於,目標的大小,其在空間中的方向,其姿態,以及其在圖片中的位置都是變化的。網絡
這裏有一張圖片,咱們須要識別圖片中的物體,而且用方框將該物體圈出來。框架
圖像識別(分類)函數
定位:性能
現在大火的卷積神經網絡幫助咱們很好地進行圖像識別。可是,咱們仍須要一些額外的功能來進行精肯定位,深度學習在這裏發揮了很好的做用。學習
在本文中,咱們將從目標定位的角度入手探討目標檢測技術的發展。咱們將按着以下的演化順序講述:R-CNN->SPP Net->Fast R-CNN-> Faster R-CNN優化
在開始前,咱們將對基於區域的卷積神經網絡(R-CNN)進行簡單的介紹。spa
若是咱們將其看做是一個迴歸問題,則須要對(x,y,w,h)四個參數進行預測,從而獲得方框所在位置。設計
步驟13d
步驟2
步驟3
步驟4
接着,咱們將進行兩次微調操做。第一次在AlexNet上進行,第二次將頭部改成迴歸頭。
迴歸部分加在哪裏呢?
兩種解決辦法:
可是實現迴歸操做太困難了,咱們須要找到一種方法將其變爲分類問題。迴歸的訓練參數收斂的時間要長得多,因此上面的網絡採起了用分類的網絡來計算網絡共同部分的鏈接權值。
左上角的黑框:得分0.5
右上角的黑框:得分0.75
左下角的黑框:得分0.6
右下角的黑框:得分0.8
根據這些得分,咱們選擇右下角的黑框做爲所要預測的目標位置。
注:有的時候也會選擇得分最高的兩個方框,而後取兩個方框的交集做爲最終須要預測的位置。
問題:方框的大小如何肯定呢?
當取了不一樣的方框後,依次從左上角掃描到右下角。
總結:
對第一張圖片,咱們使用不一樣大小的方框(遍歷整張圖片)將圖片截取出來,輸入到CNN,而後CNN會輸出這個框的分類以及這個框圖片對應的(x,y,w,h)。
可是,這個方法太耗費時間了,須要作一些優化。最初的網絡模型以下圖所示:
所作優化:將全鏈接層改成爲卷積層以提升速度。
當圖中有多個物體存在的時候咱們應該如何作呢?如今咱們所要解決的問題就變成了:多個目標識別+定位。
如今咱們還能將其看做分類問題麼?
但是,將其看做分類問題的話會有以下矛盾產生:
若是將其看做分類問題,咱們能作哪些優化呢?咱們並不想使用太多的方框在不一樣的位置間來回嘗試。下面,給出了一種解決方案:
首先,咱們須要找出包含全部目標的方框。其中有的方框會產生重疊或者互相包含,這樣咱們就不用枚舉出全部的方框了。
對於候選框的獲取,前人發現了不少種方法:好比EdgeBoxes和Selective Search。如下是候選方框獲取方法的性能對比:
對於「選擇性搜索」是如何選出全部候選方框這個問題,本文不做介紹,有興趣的能夠對其相關論文進行研究。
上述說起的思路推進了R-CNN的面世。讓咱們以一樣的圖片爲例,對R-CNN進行講解。
步驟1
下載一個分類模型(如AlexNet)
步驟2
對模型進行微調
步驟3
特徵提取:
步驟4
步驟5
使用迴歸器對候選方框的位置進行仔細校訂。對於每個分類,都須要訓練一個線性迴歸模型,用以判斷這個方框是否足夠匹配。
空間金字塔池化(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快上百倍。
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總結:
很明顯,Fast R-CNN比R-CNN在速度上有了大幅提高;與R-CNN對每一個候選方框輸入到CNN中提取特徵不一樣的是,Fast R-CNN只對輸入的整張圖片提取一次特徵,而後在第五個卷積層上提取每一個候選方框的特徵,此操做只須要計算一次特徵,剩下的操做在第五個卷積層上完成便可。
性能的提高也十分明顯:
毫無疑問,Fast R-CNN與傳統的CNN相比,在性能上有了大幅提高。但Fast R-CNN的一個主要問題在於它使用選擇性搜索去找全部的候選方框,這是很是耗時的。
是否有更加高效的方法去找出全部的候選方框呢?
解決辦法:增長一個能夠對邊緣進行提取的神經網絡。換句話說,利用神經網絡去尋找全部的候選方框。可以實現這種操做的神經網絡叫作區域生成網絡(RPN:Region Proposal Network)。
讓咱們看看RPN有哪些提高:
RPN總結:
四種損失函數:
速度比較
Faster R-CNN的貢獻在於它設計了一個RPN網絡對候選區域進行提取,此步驟代替了耗時過多的選擇性搜索,使速度獲得大幅提高。
總的來講,從R-CNN,SPP-NET,Fast R-CNN到R-CNN,基於深度學習進行目標檢測的步驟獲得了簡化,精度獲得了提升,速度獲得了提高。能夠說,基於區域生成的系列R-CNN目標檢測算法在目標檢測領域已經成爲最主要的分支。
本文做者:【方向】
本文爲雲棲社區原創內容,未經容許不得轉載。