天天看點

目标檢測 - SSD MultiBox 了解 - 基于深度學習的實時目标檢測SSD MultiBox 了解 - 基于深度學習的實時目标檢測

SSD MultiBox 了解 - 基于深度學習的實時目标檢測

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

該部落客要對 SSD MultiBox 目标檢測技術進行介紹. 希望對于 MultiBox 算法以及 SSD 有更好的了解.
目标檢測 - SSD MultiBox 了解 - 基于深度學習的實時目标檢測SSD MultiBox 了解 - 基于深度學習的實時目标檢測

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

自從 2012 ImageNet Large-Scale Visual Recognition Challenge(ILSVRC) 中,AlexNet 相比較傳統計算機視覺(CV)方法,取得了較突出的成績,深度學習已經成為圖像識别任務中的主流方法. 在 CV 領域,CNN 擅長處理圖像分類任務. 圖像分類任務是基于類别标記的圖檔資料集,根據給定類别(classes),如 cat、dog 等,采用 CNN 網絡檢測圖檔中的物體類别.

目标檢測 - SSD MultiBox 了解 - 基于深度學習的實時目标檢測SSD MultiBox 了解 - 基于深度學習的實時目标檢測

Figure 2. cats 和 dogs 圖檔 [From Kaggle]

如今,深度學習已經比人類在圖像分類具有更高的準确度. 然而,人類不僅對圖檔分類,還對視野内的每個物體進行定位(localize)與分類(classify). 這就對于機器來說,想達到人類的表現,具有很大的挑戰. 實際上,如果目标檢測精度較高,則能使得機器更接近真實的場景了解.

目标檢測 - SSD MultiBox 了解 - 基于深度學習的實時目标檢測SSD MultiBox 了解 - 基于深度學習的實時目标檢測

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 的近似比對. 如:

目标檢測 - SSD MultiBox 了解 - 基于深度學習的實時目标檢測SSD MultiBox 了解 - 基于深度學習的實時目标檢測

Figure 4. R-CNN 的輸出例示.

延伸:

  • R-CNN
  • Fast-R-CNN
  • Faster-R-CNN

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

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

新的網絡架構被提出,以克服 R-CNN 類方法的局限,如 YOLO - You Only Look Once 和 SSD - Single Shot Detector MultiBox . 下面即将對 SSD 進行介紹.

2. SSD - Single Shot MultiBox Detector

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

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

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

網絡結構:

目标檢測 - SSD MultiBox 了解 - 基于深度學習的實時目标檢測SSD MultiBox 了解 - 基于深度學習的實時目标檢測

Figure 5. SSD 網絡結構(input 是 300x300x3)

SSD 網絡結構是基于 VGG16 網絡的,去除了全連接配接層. 采用 VGG16 作為 base network 的原因是其在圖像分類任務的良好表現,以及其應用普遍性,遷移學習(transfer learning) 對于提升結果精度更有利. 去除原始 VGG 全連接配接層,而添加一系列輔助卷積層(從 conv6 卷積層開始),能夠提取多種尺度(multiple scales)的特征,并逐漸地降低後面層的輸入尺寸.

目标檢測 - SSD MultiBox 了解 - 基于深度學習的實時目标檢測SSD MultiBox 了解 - 基于深度學習的實時目标檢測

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 1 × 1 卷積起降維作用(width 和 height 保持不變).

目标檢測 - SSD MultiBox 了解 - 基于深度學習的實時目标檢測SSD MultiBox 了解 - 基于深度學習的實時目标檢測

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 m u l t i b o x _ l o s s = c o n f i d e n c e _ l o s s + a l p h a ∗ l o c a t i o n _ l o s s

其中 alpha a l p h a 參數控制兩個 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.

目标檢測 - SSD MultiBox 了解 - 基于深度學習的實時目标檢測SSD MultiBox 了解 - 基于深度學習的實時目标檢測

Figure 8. IoU 圖示(From Wikipedia)

是以,MultiBox 采用 Priors 作為預測的初始化 bounding boxes,并回歸與 groundtruth boxes 最接近的預測 boxes.

MultiBox 網絡結構,每個 feature map 單元包括 11 個 Priors(8x8, 6x6, 4x4, 3x3, 2x2)和隻有一個 1x1 的 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 b 個 bounding boxes,每個預設 bounding box 配置了對角線的 2 個點 (x1,y1),(x2,y2)(x1,y1),(x2,y2),待分類目标類别數 c c , 給定的 feature map 尺寸為 f=m×nf=m×n,SSD 将計算該 feature map 的 f×b×(4+c) f × b × ( 4 + c ) 個值.

目标檢測 - SSD MultiBox 了解 - 基于深度學習的實時目标檢測SSD MultiBox 了解 - 基于深度學習的實時目标檢測

Figure 9. SSD 在 8x8 和 4x4 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 c 類類别的預測值.

6. SSD 訓練與運作

6.1 資料集

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

可以采用 PASCAL VOC 和 COCO 資料集開始.

目标檢測 - SSD MultiBox 了解 - 基于深度學習的實時目标檢測SSD MultiBox 了解 - 基于深度學習的實時目标檢測

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 的過程:

目标檢測 - SSD MultiBox 了解 - 基于深度學習的實時目标檢測SSD MultiBox 了解 - 基于深度學習的實時目标檢測

Figure 11. VGG Feature Map 可視化(From Brown Uni)

6.4 Hard Negative Mining

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

訓練時不是使用全部的 negative 預測,而是保持 negative 和 positive 樣本的比例為 3:13:1. 采用 negative 樣本的原因是,網絡不僅要學習 positve 樣本的資訊,還需要學習造成不正确檢測的資訊.

目标檢測 - SSD MultiBox 了解 - 基于深度學習的實時目标檢測SSD MultiBox 了解 - 基于深度學習的實時目标檢測

Figure 12. hard negative mining 示例(From jamie Kang blog)

6.5 Data Augmentation

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

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

每張圖檔被随機水準翻轉,以對 objects 鏡像魯棒.

目标檢測 - SSD MultiBox 了解 - 基于深度學習的實時目标檢測SSD MultiBox 了解 - 基于深度學習的實時目标檢測

Figure 13. 水準翻轉圖檔示例(From Behavioural Cloning Blog)

6.6 NMS

SSD 對圖檔進行推斷時, 一次 forward 生成大量的 boxes,需要采用 NMS (Non-Maximum Suppression) 濾除大部分的 bounding boxes:當boxes 的 confidence 門檻值小于 ct c t (如 0.01) 與 IoU 小于 lt l t (如0.45) 時,則丢棄. 隻保留 top N N <script type="math/tex" id="MathJax-Element-60">N</script> 的預測結果.

這樣隻保留了網絡預測的最可能的預測值,更多的幹擾預測值被去除.

目标檢測 - SSD MultiBox 了解 - 基于深度學習的實時目标檢測SSD MultiBox 了解 - 基于深度學習的實時目标檢測

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( 512x512 輸入圖檔的最高分辨率輸出) 在 Pascal VOC上的 mAP 為 76.8%,但犧牲了效率,其速率為 22 幀/秒;SSD-300 達到一個好的時間和精度平衡, mAP=74.3%,59幀/秒.
  • SSD 對于小物體的檢測效果較差,因為小物體不是在所有的 feature maps 中都出現. 增加輸入圖檔分辨率能夠緩解這樣問題,但不能完全解決.

8. SSD 實作

  • Caffe-SSD
  • TensorFlow-SSD

部落客打算将基于傳統計算機視覺技術實作的車輛檢測( Vehicle Detection) ,再采用 SSD 進行實作.

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

9. 相關

  • YOLO9000: Better, Faster, Stronger
  • Mask R-CNN - 像素級的精确執行個體分割

繼續閱讀