目標檢測 – SSD MultiBox 理解 – 基於深度學習的實時目標檢測

目標檢測 – SSD MultiBox 理解 – 基於深度學習的實時目標檢測

SSD MultiBox 理解 – 基於深度學習的實時目標檢測

[原文-Understanding SSD MultiBox — Real-Time Object Detection In Deep Learning]

該部落格主要對 SSD MultiBox 目標檢測技術進行介紹. 希望對於 MultiBox 演算法以及 SSD 有更好的理解.
這裡寫圖片描述

Figure 1. End-to-end 目標檢測例示[From Microsoft].

自從 2012 ImageNet Large-Scale Visual Recognition Challenge(ILSVRC) 中,AlexNet 相比較傳統計算機視覺(CV)方法,取得了較突出的成績,深度學習已經成為影象識別任務中的主流方法. 在 CV 領域,CNN 擅長處理影象分類任務. 影象分類任務是基於類別標記的圖片資料集,根據給定類別(classes),如 cat、dog 等,採用 CNN 網路檢測圖片中的物體類別.
這裡寫圖片描述
Figure 2. cats 和 dogs 圖片 [From Kaggle]

如今,深度學習已經比人類在影象分類具有更高的準確度. 然而,人類不僅對圖片分類,還對視野內的每個物體進行定位(localize)與分類(classify). 這就對於機器來說,想達到人類的表現,具有很大的挑戰. 實際上,如果目標檢測精度較高,則能使得機器更接近真實的場景理解.
這裡寫圖片描述
Figure3. 圖片是隻有 cat?還是隻有 dog? 或者兩者都有?[From Kaggle]

1. R-CNN(Region-Convolution Neural Network)

R-CNNs 是深度學習在目標檢測任務的較早應用.

寬泛來講,R-CNN 是 CNN 的一種特殊形式,能夠對圖片中的 objects 進行位置確定和類別檢測. R-CNN 的輸出,一般是一系列的 bounding boxes 和每個檢測到的 object 的類別標籤. Bounding box 是對每個檢測到的 object 的近似匹配. 如:
這裡寫圖片描述
Figure 4. R-CNN 的輸出例示.

延伸:

這些工作都在將 R-CNN 往更快、實時目標檢測的方向努力. 雖然目標檢測結果已經很好,但仍不是實時目標檢測器. 其遇到的主要問題有:

  • 資料訓練不夠靈活,且比較耗時;
  • 訓練是多階段(multiple phases)的,two-stages 方法,如 region proposal 訓練和分類器(classifier)訓練;
  • 網路模型的部署時間太慢,在測試資料集上.

新的網路框架被提出,以克服 R-CNN 類方法的侷限,如 YOLO – You Only Look OnceSSD – Single Shot Detector MultiBox . 下面即將對 SSD 進行介紹.

2. SSD – Single Shot MultiBox Detector

SSD 是 2016 年 11 月 C. Szegedy 等提出的方法,在目標檢測任務的實時性和精度方面達到了新的記錄 —— 在標準資料集上,如 PascalVOCCOCO,取得了 74% mAP(mean Average Precision),59 幀/秒.

為了更好的理解 SSD,這裡先對網路結構名字解釋:

  • Single Shot – 網路一次 forward 來輸出 object localization 和 classification.
  • MultiBox – Szegedy 等提出的一種 bounding box regression 技術.
  • Detector – 網路是目標檢測器,同時對檢測到的 objects 分類.

網路結構:
這裡寫圖片描述
Figure 5. SSD 網路結構(input 是 300x300x3)

SSD 網路結構是基於 VGG16 網路的,去除了全連線層. 採用 VGG16 作為 base network 的原因是其在影象分類任務的良好表現,以及其應用普遍性,遷移學習(transfer learning) 對於提升結果精度更有利. 去除原始 VGG 全連線層,而新增一系列輔助卷積層(從 conv6 卷積層開始),能夠提取多種尺度(multiple scales)的特徵,並逐步地降低後面層的輸入尺寸.
這裡寫圖片描述
Figure 6. VGG 網路結構 (input 是 224x224x3)

3. MultiBox

SSD 的 bounding box regression 是受 Syegedy 的 MultiBox 啟發. MultiBox 是一種快速的類別不可知(class-agnostic)邊界框座標(bounding box coordinate) proposals 方法. 有趣的是,MultiBox 是採用的 Inception-style 的卷積網路. 1×1″ role=”presentation”>1×11×11×1 卷積起降維作用(width 和 height 保持不變).
這裡寫圖片描述
Figure 7. MultiBox 的 location 和 confidence 多尺度卷積預測網路結構

MultiBox 的 loss 函式包括兩部分(SSD同樣採用):

  • Confidence Loss – 計算的 bounding box 內的 object 的類別置信度. 採用類別交叉熵( cross-entropy) 計算損失函式.
  • Location Loss – 計算訓練集中網路預測的 bounding box 與對應 ground truth box 的偏移程度. 採用 L2-Norm 計算損失函式.

MultiBox Loss 即為:

multibox_loss=confidence_loss alpha∗location_loss” role=”presentation”>multibox_loss=confidence_loss alpha∗location_lossmultibox_loss=confidence_loss alpha∗location_lossmultibox\_loss = confidence\_loss alpha * location\_loss

其中 alpha” role=”presentation”>alphaalphaalpha 引數控制兩個 loss 的貢獻度.

類似於其它深度學習任務,MultiBox 的目標是計算loss 函式的最優解時的引數值,使預測值儘可能的接近真實值.

4. MultiBox Priors 和 IoU

bounding box 生成.

MultiBox Priors,也被叫做 anchors(Faster RCNN),是預計算的,其是與原始 groundtruth boxes 分佈很接近的固定尺寸的 bounding boxes.

MultiBox Priors 是根據其與 groundtruth boxes 的 IoU (Intersection over Union ratio) 大於 0.5 選取的.

雖然 IoU 大於 0.5 仍不夠好,但能夠為 bounding box regression 演算法提供可靠的初始化 boxes,尤其是與隨機座標選取的 初始化 bounding boxes.
這裡寫圖片描述
Figure 8. IoU 圖示(From Wikipedia)

因此,MultiBox 採用 Priors 作為預測的初始化 bounding boxes,並回歸與 groundtruth boxes 最接近的預測 boxes.

MultiBox 網路結構,每個 feature map 單元包括 11 個 Priors(8×8, 6×6, 4×4, 3×3, 2×2)和只有一個 1×1 的 feature map,最終每張圖片得到共 1420 個 Priors,基本上包括了輸入圖片的多種尺度(multiple scales) 範圍,以檢測不同尺寸的物體.

最終,MultiBox 只保留 top K 的預測結果,其具有最小的 location(LOC) 和 confidence(CONF) losses.

5. SSD 對 MultiBox 的改進

5.1 Fixed Priors

與 MultiBox 不同的是,SSD 中每個 feature map 單元與一系列預設 bounding boxes 集相關聯,這些預設 bounding boxes 具有不同的維度和長寬比(dimensions and aspect ratios).

這些 Priors 是手工選取的;而 MultiBox 採用與 groundtruth boxes 的 IoU 大於 0.5 進行選取的.

理論上,SSD 能夠生成任何型別的輸入,而不需要對 priors 生成的預訓練階段.

例如,假設每個 feature map 單元有 b” role=”presentation”>bbb 個 bounding boxes,每個預設 bounding box 配置了對角線的 2 個點 (x1,y1),(x2,y2)” role=”presentation”>(x1,y1),(x2,y2)(x1,y1),(x2,y2)(x1, y1), (x2, y2),待分類目標類別數 c” role=”presentation”>ccc, 給定的 feature map 尺寸為 f=m×n” role=”presentation”>f=m×nf=m×nf = m×n,SSD 將計算該 feature map 的 f×b×(4 c)” role=”presentation”>f×b×(4 c)f×b×(4 c)f ×b ×(4 c) 個值.
這裡寫圖片描述
Figure 9. SSD 在 8×8 和 4×4 feature maps 的預設 boxes.

5.2 Location Loss

SSD 採用 smooth L1-Norm 來計算 location loss. 雖然不如 L2-Norm 精度高,但仍具有較高效率;且由於其不追求 bounding box 預測的 “畫素級準確”,給了 SSD 更多可處理空間(例如,少許畫素的偏差可能很難被發現.)

5.3 Classification

MultiBox 沒有進行目標分類,但 SSD 有對目標的分類. 因此,對於每個預測的 bounding box,將計算對資料集中全部 c” role=”presentation”>ccc 類類別的預測值.

6. SSD 訓練與執行

6.1 資料集

目標檢測資料集包含 grountruth boxes 和對應的 class labels,且每個 bounding box 僅有一個對應的 class label.

可以採用 PASCAL VOC 和 COCO 資料集開始.
這裡寫圖片描述
Figure 10. Pascal VOC 資料集圖片及標註

6.2 預設 Bounding Boxes

推薦配置多種預設 bounding boxes,包含不同的尺度(scales) 和長寬比(aspect ratios),以捕捉儘可能多的 objects.

SSD 論文對每個 feature map 單元採用了 6 種 bounding boxes.

6.3 Feature Maps

Feature Map (如卷積層輸出) 是圖片在不同尺度的特徵表示. 採用 MultiBox 對多種 feature maps 進行計算,能夠增加 objects 最終被檢測、定位和分類的精度.

如下圖,給出了對於給定圖片,網路計算 feature maps 的過程:
這裡寫圖片描述
Figure 11. VGG Feature Map 視覺化(From Brown Uni)

6.4 Hard Negative Mining

SSD 訓練時,大部分 bounding boxes 的 IoU 較低,被記作 negative 訓練樣本,需要在訓練集中保持合適的 negative 樣本數.

訓練時不是使用全部的 negative 預測,而是保持 negative 和 positive 樣本的比例為 3:1″ role=”presentation”>3:13:13:1. 採用 negative 樣本的原因是,網路不僅要學習 positve 樣本的資訊,還需要學習造成不正確檢測的資訊.
這裡寫圖片描述
Figure 12. hard negative mining 示例(From jamie Kang blog)

6.5 Data Augmentation

資料增廣對於深度學習應用比較重要,目標檢測中,其能夠使網路對於輸入的不同 object 尺寸具有魯棒性.

SSD 根據原始圖片裁剪生成新的訓練樣本,其與原始圖片具有不同的 IoU 比例(如0.1, 0.3, 0.5 等),同時隨機裁剪.

每張圖片被隨機水平翻轉,以對 objects 映象魯棒.
這裡寫圖片描述
Figure 13. 水平翻轉圖片示例(From Behavioural Cloning Blog)

6.6 NMS

SSD 對圖片進行推斷時, 一次 forward 生成大量的 boxes,需要採用 NMS (Non-Maximum Suppression) 濾除大部分的 bounding boxes:當boxes 的 confidence 閾值小於 ct” role=”presentation”>ctctct(如 0.01) 與 IoU 小於 lt” role=”presentation”>ltltlt(如0.45) 時,則丟棄. 只保留 top N” role=”presentation”>NNN 的預測結果.

這樣只保留了網路預測的最可能的預測值,更多的干擾預測值被去除.
這裡寫圖片描述
Figure 14. NMS 示例(From DeepHub tweet).

7. SSD Notes

  • 更多預設 boxes 會影響速度,但能增加目標檢測精度;
  • MultiBox 同樣能夠提高檢測精度,因為 MultiBox 檢測器對不同解析度的 features 處理;
  • 80% 的時間是 VGG16 base network 消耗的,也就是說,更快更有效的 base network 能夠提高 SSD 的效果;
  • SSD 對於相似類別(如 animals) 的 objects 容易混淆,其原因很可能是 locations 是多種 objects 類別共享造成的;
  • SSD-500( 512×512 輸入圖片的最高解析度輸出) 在 Pascal VOC上的 mAP 為 76.8%,但犧牲了效率,其速率為 22 幀/秒;SSD-300 達到一個好的時間和精度平衡, mAP=74.3%,59幀/秒.
  • SSD 對於小物體的檢測效果較差,因為小物體不是在所有的 feature maps 中都出現. 增加輸入圖片解析度能夠緩解這樣問題,但不能完全解決.

8. SSD 實現

博主打算將基於傳統計算機視覺技術實現的車輛檢測( Vehicle Detection) ,再採用 SSD 進行實現.

Teaching Cars To See — Vehicle Detection Using Machine Learning And Computer Vision

9. 相關