閱讀時間將近四分鐘算法
卷積神經網絡在檢測圖像中的目標時優於其餘神經網絡架構。不久,研究人員們就改進了CNN以進行目標定位和檢測,並稱這種架構爲R-CNN (Region-CNN)。R-CNN的輸出是帶有矩形框的圖像,其圍繞圖像中的目標以及該目標的對應類。網絡
如下是R-CNN的實現步驟:架構
使用選擇性搜索算法掃描輸入圖像以查找可能的目標並生成大約2000個候選區域。ide
在每一個候選區域上運行CNN。學習
(1) SVM模型中對區域進行分類優化
(2) 若是存在這樣的目標,則使用線性迴歸器收緊目標的邊界框對象
R-CNN用於目標檢測blog
雖然R-CNN比傳統的CNN在目標定位、檢測和分類方面取得了很大進步,但實時實現這一點仍然存在問題。一些問題是:it
訓練數據很難處理,並且耗時很長io
訓練分兩個階段進行(eg.訓練候選區域和分類)
爲了改進R-CNN,後續出現Fast-RCNN,Faster-RCNN,Mask-RCNN等一系列改接算法。他們都取得了更高的準確率,可是在速度方面仍是有所欠缺。那麼,SSD就恰巧解決了這一點,SSD基本能夠達到實時檢測的速度要求,而且在準確性和計算速度方面具備良好的平衡。
SSD(單步多框檢測器)含義
Single Shot(單步):目標定位和分類在網絡的單個前向傳遞中完成
MultiBox:邊界框迴歸技術
Detector(檢測器):對檢測到的對象進行分類
網絡結構
SSD架構
SSD的架構基於VGG-16架構構建。可是這裏對VGG-16進行了一些調整,咱們使用Conv6層以上的輔助卷積層而不是全鏈接層。使用VGG-16做爲基礎網絡的緣由是其高質量的圖像分類和遷移學習以改善結果。使用輔助卷積層,咱們能夠提取多個尺度的特徵,並逐步減少每一個後續層的尺寸。我已在下一節討論了它的工做原理。在下圖能夠看到VGG-16架構。它包含徹底鏈接的層。
VGG-16架構
工做機制
爲了訓練咱們的算法,咱們須要一個已經框出目標的圖像訓練集。經過這種訓練方式,算法去學習如何在目標上放置矩形以及放置在何處。咱們最小化推斷的邊界框和真實標註邊界框之間的偏差,以優化咱們的模型達到正確地檢測目標的效果。與CNN不一樣,咱們不只預測圖像中是否存在物體,還須要預測物體在圖像中的位置。在訓練期間,算法學習調整目標中矩形邊界框的高度和寬度。
上圖是咱們用於目標檢測的訓練數據集的示例。這些數據集必須包含在圖像中標記其類別的相應目標。雖然更多默認框會產生更準確的檢測結果,但會增長速度開銷。
Pascal VOC和COCO數據集對初學者來講是一個不錯的選擇。
處理尺度問題
上圖展現了一個包含有多匹馬的圖像。將輸入圖像劃分爲網格集,而後圍繞這些網格製做幾個不一樣寬高比的矩形。接着在這些標註框中應用卷積來查找這些網格中是否存在馬匹目標。因爲圖中的那匹黑馬在圖像中更靠近相機。所以,框出的矩形區域並不能被識別出是不是馬,由於矩形框區域沒有任何能夠被識別成馬匹的特徵。
若是你們理解了前文中提到的SSD架構,能夠看出在conv6層以後的每一個步驟中看到圖像的大小是顯着減少的。接着,剛纔討論的關於製做網格和在這些網格上查找目標的每一個操做步驟都適用於從網絡的後面到前面的卷積的每一個步驟。分類器在每一個步驟中應用這些步驟去檢測目標是否存在。綜上,因爲目標在每一個步驟中變得更小,所以很容易識別。
SSD算法還知道如何從一個卷積操做返回到另外一個卷積操做。它不只學會前進並且學會了回退。例如,若是它在conv4中識別到馬,那麼它能夠返回到conv6而且算法將在馬的周圍繪製矩形。(編譯自:Medium)