face detection[SSH]



該文來自《SSH: Single Stage Headless Face Detector》,本文時間線2017年8月。
不同於face rcnn那種兩階段的方法,SSH和ssd一樣是一階段的方法。其從一個分類網絡的前面卷積層直接檢測人臉。這里所謂的Headless是移除潛在的分類網絡的"頭",而且SSH本身就是基於尺度不變設計的,所以不需要做圖像金字塔。通過不同層上同時檢測不同尺度的人臉。這些屬性使得SSH即快而且輕量。而且實測發現,在WIDER數據集上采用headless VGG16的效果超過了ResNet-101.而且SSH不使用圖像金字塔,所以有5X的加速,而如果SSH配合圖像金字塔使用,則可以全面超過其他方法。

0 引言

現在最好的人臉檢測方法都需要大量的參數去保證尺度魯棒性或者上下文整合,所以速度都很慢或者需要很大的內存,如《finding tiny faces》需要超過1s才能處理一張圖片。而SSH的Headless表示的是去除網絡的頭。對於VGG-16,其中的fc6-8層可以看成是該網絡的head,其計算代價很大(VGG-16網絡頭包含大約120M個參數,ResNet-101的頭包含大約12M個參數),而且在二階段模型中,必須在所有提出的候選框上都計算一次。

相對而言,本文中SSH模型就更輕量一些。和RPN一樣,分類網絡的前面feature maps都可以用來回歸一系列預定義的錨。然而,不同於2階段的檢測器,這里最后的分類部分也同時會對這些錨進行回歸擬合:

  • SSH的headless,正是因為去除了具有大量的參數部分,從而變得更快更輕量;
  • 不依賴外部多尺度圖像金字塔保證尺度不變性,SSH從網絡的不同層上檢測人臉。

1 SSH

SSH設計的初衷是為了減少inference時間,並且只需要很少的內存,同時具有尺度不變性。

1.1 結構


如圖2所示,SSH是一個全卷積網絡,通過在feature maps頂層增加檢測模塊來完成人臉定位和分類,對應的strides是8,16,32,分別表示為\(M_1,M_2,M_3\)。檢測模塊包含一個卷積二值分類器和為了檢測人臉和定位的回歸器

為了解決定位問題,SSH將一些預定義的邊界框(稱為錨)與ground-truth進行回歸。作者通過使用一個與RPN相似的策略:

  • 在每一個划窗位置上,定義K個錨,其中包含了不同的尺度;
  • 只考慮長寬比為1的錨來減少錨的個數。

作者發現在實驗中使用不同的長寬比對人臉檢測效果提升不大,而且SSH中連接着\(W_i\times H_i\)大小feature map的檢測模塊\(M_i\),有\(W_i\times H_i \times K_i\)個長寬比為1的錨,其對應尺度為\({S_i^1,S_i^2,...S_i^{K_i}}\)

對於檢測模塊
一系列卷積層被用來提取特征以供人臉檢測和定位,如圖3

這包含了一個簡單的上下文模塊來增加感受野的有效性。上下文模塊的輸出通道數量(圖3 和圖4的“X”)在\(M_1\)被設為128,在\(M_2,M_3\)中被設為256。最后2個卷積層用來進行邊界框回歸和分類。在\(M_i\)中每個卷積位置,分類器判別當前以濾波器為中心的,不同尺度\({S_i^K}_{k=1}^K\)的划窗是否包含人臉。

  • 這里的分類器:就是一個1x1的卷積層與2xK個輸出通道組成的結構
  • 這里的回歸器:就是一個1x1的卷積層與4xK個輸出通道組成的結構

1.2 尺度不變的設計

SSH可以在一次前向傳輸中同時檢測大人臉和小人臉,受到《Feature pyramid networks for object detection》的啟發,SSH從三個不同的卷積層上檢測人臉,對應的檢測模塊\(M_1,M_2,M_3\)。這三個模塊對應的strides為\(8,16,32\),就是分別用來檢測小型,中型,大型人臉。

檢測模塊\(M_2\)是接在VGG-16的conv5-3上的,雖然可以直接將檢測模塊\(M_1\)接在conv4-3上,不過這里還是考慮了feature map融合的方式。為了減少內存的消耗,feature map中的通道數通過1x1卷積從512減少到128。conv5-3 feature map會上采樣(雙線性上采樣)然后與conv4-3 feature map結合起來,然后跟一個3x3的卷積層。為了檢測更大的人臉,在conv5-3上接一個stride等於2的最大池化,使其stride增大到32。檢測模型\(M_3\)放在新加的層上面。

在訓練階段,每個檢測模塊\(M_i\)是用來訓練檢測不同尺度范圍的;在預測階段,會將所有尺度上的預測結果通過NMS進行處理並生成最后的檢測。

1.3 上下文模塊

在二階段檢測器中,通常都是擴大候選框來融合上下文;而SSH是通過簡單的卷積層來模擬這種策略。

如圖4,將上下文層融合進檢測模塊。因為錨是以卷積方式進行分類和回歸,所以采用更大的濾波器就類似二階段中的擴大候選框方式。本文中上下文模塊中是采用5x5和7x7的濾波器。以這種方式對上下文進行建模增加了對應層的感受野,同時也增加了每個檢測模塊中的目標尺度。為了減少模型參數量,作者使用類似《Going deeper with convolutions》的方法,並采用了序列3x3的濾波器代替較大的卷積濾波器。檢測模塊的輸出通道的個數(圖4中"X")\(M_1\)中為128,\(M_2,M_3\)中分別為256。在本文中使用的帶上下文濾波器的檢測模塊相比《Faster r-cnn: Towards real-time object detection with region proposal networks》擁有更少的參數。作者在實驗中還發現上下文模塊提升了WIDER上的MAP。

1.4 訓練和loss函數

本文算法中,只有當IOU大於0.5的時候才將該錨與ground-truth相對比,而Faster rcnn中是每個ground-truth至少有一個錨(與最高IOU對比),所以這里BP不會迭代與ground-truth不匹配的錨。SSH是一個多任務loss,該loss公式為:

  • 這里\(\ell_c\)是人臉分類loss,這里使用的是標准的多項log的 loss。索引K表示第幾個檢測模塊\(M= \{M_k\}_1^K\),並且\(A_K\)表示定義在\(M_k\)中的錨的集合。在\(M_k\)中第\(i\)個錨和對應的ground-truth標簽表示為\(p_i,q_i\)。這里錨中正樣本為與ground-truth的IOU超過0.5;而負樣本是與任何ground-truth的IOU都小於0.3的那些錨。\(N_k^c\)是模塊\(M_k\)中錨的個數,會參與分類loss的計算。
  • \(\ell_r\)表示邊界框回歸的loss,如《Faster r-cnn: Towards real-time object detection with region proposal networks》一樣,回歸空間是基於框維度的log空間遷移和尺度不變性的變換,使用\(\ell_1\)平滑loss。在這個參數化空間中,\(b_i\)表示預測框的值,\(t_i\)表示ground-truth的值。\(I(\dot)\)是指示函數,用於限制回歸loss只對可能關聯的錨負責,\(N_k^r=\sum_{i \in A_k}I(g_i=1)\)

1.5 在線硬負和正樣本挖掘

這里使用《Training regionbased object detectors with online hard example mining》中的OHEM。並且對於每個檢測模塊獨立的使用各自的OHEM。也就是對每個模塊\(M_k\),基於最高得分選擇負錨,基於最低得分選擇正錨。因為負錨的數量超過正錨,如《Fast r-cnn》,mini-batch中25%保留下來用於做正錨。

2 實驗

在實驗中,主要分析了:

  • 尺度不變性設計;
  • 輸入尺寸的影響;
  • OHEM的影響;
  • 特征融合的影響;
  • 錨尺度的選擇等等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM