SSD 用於實時物體檢測
卷積神經網路(CNN)在物體識別中由於其他的神經網路架構,所以研究人員很快對 CNN 進行了改進以使得它們能更好的對物體進行定位和檢測,這種神經網路架構就被稱為 R-CNN(Region-CNN)。R-CNN 的輸出是具有矩形框的影象,以下是 R-CNN 如何工作的步驟:
- 使用稱為可能性搜尋的演算法掃描整個輸入影象,用來查詢可能的物件,並生成大約 2000 個區域提議;
- 在每個區域提案上執行 CNN;
獲取每個 CNN 的輸出並將其輸入:
- SVM 對區域進行分類;
- 如果存在這樣的物件,則利用線性迴歸其收緊物件的邊界框;
雖然 R-CNN 比傳統的 CNN 在物件對位,檢測和分類方面取得了很大進步,但是在實時性上面還是存在一點問題,主要是:
- 訓練資料很難處理,而且需要很長時間;
- 訓練分為兩步進行(區域劃分和分類);
- 在測試的時候,網路的計算非常慢;
為了改進 R-CNN,研究人員想出了很多的演算法,比如 Fast-RCNN,Faster-RCNN。後來的幾個演算法在物件檢測上面能得到更準確的結果。但是他們對於實時監測來說,還是有點慢。SSD 就能同時解決這兩個問題,它在準確性和計算速度方面具有良好的平衡。
SSD(Single Shot MultiBox Detector)
SIngle Shot:物件定位和分類在同一個前向網路中完成;
MultiBox:邊界框迴歸的技術
Detector:對檢測到的物件進行分類;
具體架構如下:
SSD 的架構基於 VGG-16 架構開發。但是對 VGG-16 進行了一些調整,我們使用 Conv6 層以上的輔助卷積層而不是完全連線層。使用 VGG-16 作為基礎網路層的原因是其高質量的影象分類和遷移學習的能力,可以用來改善結果。使用輔助卷積層,我們可以提取多個尺度的特徵,並逐步減小每個後續層的尺寸。在下面介紹的工作原理圖中,你可以看到 VGG-16 架構處理的影象。
工作機制
為了訓練我們的演算法,我們需要一個包含帶有物件的影象訓練集,這些物件必須在他們上面有邊界框。通過這種方式學習,演算法可以學會如何將舉行放置子啊何處。我們最小化邊界框和實際的框的誤差,以優化我們的模型可以正確的檢測到物件。與 CNN 不同的是,我們不僅預測影象中是否存在該物體,而且還需要預測物體在影象中的位置。在訓練期間,演算法學習調整物件中矩陣框的高度和寬度。
上圖是我們用於物體檢測的訓練資料集的示例。這些資料集必須包含在影象中標記其類的物件。更多預設框導致更準確的檢測。
如果你是一個初學者,可以先使用 Pascal VOC 和 COCO 來進行學習。
處理規模問題
上面的圖,我們的馬匹有很少的影象。我們將輸入影象劃分為網格集。然後我們圍繞這些網格製作幾個不同寬高比的巨星。然後我們子啊這些礦中應用卷積來查詢這些網路中是否存在物件。這裡的一匹黑馬在影象中更靠近相機。因此,我們繪製的矩形無法識別是否是馬,因為矩形沒有任何識別馬匹的特徵。
如果我們看到 SSD 的上述架構,我們可以在 Conv6 層之後的每個步驟中看到影象的大小顯著減小。然後,我們討論的關於製作網格和在這些網格上查詢物件的每個操作都適用於從網路的後面到前面的卷積的每個步驟。分類器在每個步驟中應用於檢測物件。因此,由於物體在每個步驟中不斷變小,索引很容易被識別出來。
SSD 演算法還知道如何從一個卷積操作返回到另一個卷積操作。它不僅學會前進而且學會如何後腿。例如,如果他在 Conv4 層中看到馬,那麼它可以返回到 Conv6 並且演算法將在馬周圍進行繪製矩形。