每次丟了東西,咱們都但願有一種方法能快速定位出失物。如今,目標檢測算法或許能作到。目標檢測的用途遍及多個行業,從安防監控,到智慧城市中的實時交通監測。簡單來講,這些技術背後都是強大的深度學習算法。算法
在這篇文章中,咱們會進一步地瞭解這些用在目標檢測中的算法,首先要從RCNN家族開始,例如RCNN、Fast RCNN和Faster RCNN。網絡
1. 解決目標檢測任務的簡單方法(利用深度學習)學習
下圖是描述目標檢測算法如何工做的典型例子,圖中的每一個物體(不管是任務仍是風箏),都能以必定的精確度被定位出來。優化
首先咱們要說的就是在圖像目標檢測中用途最廣、最簡單的深度學習方法——卷積神經網絡(CNN)。我要講的是CNN的內部工做原理,首先讓咱們看看下面這張圖片。rest
向網絡中輸入一張圖片,接着將它傳遞到多個卷積和池化層中。最後輸出目標所屬的類別,聽上去很是直接。blog
對每張輸入的圖片,咱們都有對應的輸出類別,那麼這一技術能檢測圖片中多種目標嗎?答案是確定的!下面就讓咱們看看如何用一個卷積神經網絡解決通用的目標檢測問題。圖片
1.首先,咱們把下面的圖片用做輸入:資源
2.以後,咱們將圖片分紅多個區域:深度學習
3.將每一個區域看做單獨的圖片。io
4.把這些區域照片傳遞給CNN,將它們分到不一樣類別中。
5.當咱們把每一個區域都分到對應的類別後,再把它們結合在一塊兒,完成對原始圖像的目標檢測:
使用這一方法的問題在於,圖片中的物體可能有不一樣的長寬比和空間位置。例如,在有些狀況下,目標物體可能佔據了圖片的大部分,或者很是小。目標物體的形狀也可能不一樣。
有了這些考慮因素,咱們就須要分割不少個區域,須要大量計算力。因此爲了解決這一問題,減小區域的分割,咱們可使用基於區域的CNN,它能夠進行區域選擇。
2. 基於區域的卷積神經網絡介紹
2.1 RCNN簡介
和在大量區域上工做不一樣,RCNN算法提出在圖像中建立多個邊界框,檢查這些邊框中是否含有目標物體。RCNN使用選擇性搜索來從一張圖片中提取這些邊框。
首先,讓咱們明確什麼是選擇性搜索,以及它是如何辨別不一樣區域的。組成目標物體一般有四個要素:變化尺度、顏色、結構(材質)、所佔面積。選擇性搜索會肯定物體在圖片中的這些特徵,而後基於這些特徵突出不一樣區域。下面是選擇搜索的一個簡單案例:
用RCNN檢測目標物體的步驟以下:
下面咱們就用具體的案例解釋一下。
這就是RCNN檢測目標物體的方法。
2.2 RCNN的問題
如今,咱們瞭解了RCNN能如何幫助進行目標檢測,可是這一技術有本身的侷限性。訓練一個RCNN模型很是昂貴,而且步驟較多:
這些過程合併在一塊兒,會讓RCNN的速度變慢,一般每一個新圖片須要40—50秒的時間進行預測,基本上沒法處理大型數據集。
因此,這裏咱們介紹另外一種能突破這些限制的目標檢測技術。
3. Fast RCNN
3.1 Fast RCNN簡介
想要減小RCNN算法的計算時間,能夠用什麼方法?咱們可不能夠在每張圖片上只使用一次CNN便可獲得所有的重點關注區域呢,而不是運行2000次。
RCNN的做者Ross Girshick提出了一種想法,在每張照片上只運行一次CNN,而後找到一種方法在2000個區域中進行計算。在Fast RCNN中,咱們將圖片輸入到CNN中,會相應地生成傳統特徵映射。利用這些映射,就能提取出感興趣區域。以後,咱們使用一個Rol池化層將全部提出的區域從新修正到合適的尺寸,以輸入到徹底鏈接的網絡中。
簡單地說,這一過程含有如下步驟:
因此,和RCNN所須要的三個模型不一樣,Fast RCNN只用了一個模型就同時實現了區域的特徵提取、分類、邊界框生成。
一樣,咱們還用上面的圖像做爲案例,進行更直觀的講解。
圖像被傳遞到卷積網絡中,返回感興趣區域:
以後,在區域上應用Rol池化層,保證每一個區域的尺寸相同:
最後,這些區域被傳遞到一個徹底鏈接的網絡中進行分類,並用softmax和線性迴歸層同時返回邊界框:
3.2 Fast RCNN的問題
可是即便這樣,Fast RCNN也有某些侷限性。它一樣用的是選擇性搜索做爲尋找感興趣區域的,這一過程一般較慢。與RCNN不一樣的是,Fast RCNN處理一張圖片大約須要2秒。可是在大型真實數據集上,這種速度仍然不夠理想。
4.Faster RCNN
4.1 Faster RCNN簡介
Faster RCNN是Fast RCNN的優化版本,兩者主要的不一樣在於感興趣區域的生成方法,Fast RCNN使用的是選擇性搜索,而Faster RCNN用的是Region Proposal網絡(RPN)。RPN將圖像特徵映射做爲輸入,生成一系列object proposals,每一個都帶有相應的分數。
下面是Faster RCNN工做的大體過程:
那麼Region Proposal Network具體是如何工做的呢?首先,將CNN中得來的特徵映射輸入到Faster RCNN中,而後將其傳遞到Region Proposal Network中。RPN會在這些特徵映射上使用一個滑動窗口,每一個窗口會生成具備不一樣形狀和尺寸的k個anchor box:
Anchor boxes是固定尺寸的邊界框,它們有不一樣的形狀和大小。對每一個anchor,RPN都會預測兩點:
如今咱們有了不一樣形狀、尺寸的邊界框,將它們傳遞到Rol池化層中。通過RPN的處理,proposals可能沒有所述的類別。咱們能夠對每一個proposal進行切割,讓它們都含有目標物體。這就是Rol池化層的做用。它爲每一個anchor提取固定尺寸的特徵映射:
以後,這些特徵映射會傳遞到徹底鏈接層,對目標進行分類並預測邊界框。
4.2 Faster RCNN的問題
目前爲止,咱們所討論的全部目標檢測算法都用區域來辨別目標物體。網絡並不是一次性瀏覽全部圖像,而是關注圖像的多個部分。這就會出現兩個問題:
5. 上述算法總結
下表對本文中提到的算法作了總結:
目標檢測是頗有趣的領域,在商業中也大有前景。得益於現代硬件和計算資源的發展,才能讓這一技術有重要的突破。
本文只是目標檢測算法的開門介紹,想了解更多的朋友能夠直接私我。(關注主頁)
若是你有不一樣看法也可直接在評論下方指教!