FaceBoxes: 高精度的CPU實時人臉檢測器

點擊上方  CVpython  關注公衆號
學習更多幹貨

導語:最近在搞目標檢測,所以閱讀了相關論文,雖然文章有點老了,但是好論文還是值得總結一波。


論文題目:

FaceBoxes: A CPU Real-time Face Detector with High Accuracy

論文鏈接:

https://arxiv.org/pdf/1708.05234.pdf

年份:2017

論文作者:Shifeng Zhang等人

作者單位:中國科學院自動化研究所等

1. 論文要解決什麼問題?

要保持高精度,還要在CPU上達到實時?還真有點難,但是Shifeng Zhang等人針對這個問題,提出了人臉檢測模型FaceBoxes,表現SOTA。

2. FaceBoxes如何解決問題?

FaceBoxes框架如圖1所示,主要包括Rapidly Digested Convolutional Layers (RDCL)和Multiple Scale Convolutional Layers (MSCL)模塊,還有anchor密集策略。

圖1

2.1 RDCL

RDCL的目的是爲了快速下采樣,讓模型能夠在CPU上面能達到實時。RDCL採用的方法是縮小空間大小,選擇合適的卷積核大小和減少輸出通道。

  • 縮小空間大小:Conv1, Pool1, Conv2 and Pool2 的步長分別是4, 2, 2和 2, 空間大小快速降低了32倍。
  • 合適的卷積核大小:前幾層的一些核應該比較小,以便加速,但是也應該足夠大,以減輕空間大小減小而帶有的信息丟失。Conv1, Conv2的核大小是7x7, 5x5,所有池化層的核大小是3x3。
  • 減少輸出通道:使用C.ReLU減少輸出通道,操作如圖2(a)所示。因爲C.ReLU作者統計發現底層卷積時卷積核存在負相關,也就是說假設我們本來使用10個卷積核,但是現在只需要用5個卷積核,另外5個卷積核的結果可以通過負相關得到。結果表明使用C.ReLU加速的同時也沒損失精度。
圖2

2.2 MSCL

MSCL是爲了得到更好地檢測不同尺度的人臉。

  • 深度:在MSCL模塊中,隨着網絡的加深,便得到不同大小的特徵映射(多尺度特徵)。在不同大小特徵映射中設置不同大小的anchor,有利於檢測不同大小的人臉。
  • 寬度:Inception由多個不同核大小的卷積分支組成。在這些分支中,不同的網絡寬度,也有不同大小的特徵映射。通過Inception,感受野也豐富了一波,有利用檢測不同大小的人臉。

MSCL在多個上尺度進行迴歸和分類,在不同尺度下檢測不同大小的人臉,能夠大大提高檢測的召回率。

2.3 Anchor密度策略

Inception3的anchor大小爲32,64和128,而Conv3_2和Con4_2的anchor大小分別爲256,512。anchor的平鋪間隔等於anchor對應層的步長大小。例如,Con3_2的步長是64個像素點,anchor大小爲256x256,這表明在輸入圖片上,每隔64個像素就會有一個256x256的anchor。關於anchor的平鋪密度文中是這樣定義的:

其中 分別爲anchor的尺度和平鋪間隔。默認的平鋪間隔(等於步長)默分別認爲32,32,32,64和128。所以Inception的平鋪密度分別爲1,2,4,而Con3_2和Con4_2的平鋪密度分別爲4,4。

可以看出來,不同尺度的anchor之間存在平鋪密度不平衡的問題,導致小尺度的人臉召回率比較低,因此,爲了改善小anchor的平鋪密度,作者提出了anchor密度策略。爲了使anchor密集n倍,作者均勻地將 個anchor鋪在感受野的中心附近,而不是鋪在中心,如圖3所示。將32x32的anchor密集4倍,64x64的anchor密集兩倍,以保證不同尺度的anchor有相同的密度。

2.4 訓練

數據擴增

  • 顏色扭曲
  • 隨機採樣
  • 尺度變換
  • 水平翻轉
  • Face Boxes過濾:經過數據擴增的圖片中,如果face boxes的中心還在圖片上,則保留重疊部分,然後把高或者寬<20的過濾掉(這個操作不是很懂了。

匹配策略:訓練期間,需要確定哪些anchor對應臉部的bounding box,我們首先用最佳jaccard重疊將每一張臉匹配到anchor,然後將anchor匹配到jaccard重疊大於閾值的任何一張臉。

Loss function: 對於分類,採用softmax loss,而回歸則採用smooth L1 損失。

Hard negative mining:anchor 匹配後,發現很多anchor是負的,這會引入嚴重的正負樣本不平衡。爲了快速優化和穩定訓練,作者對loss進行排序然後選擇最小的,這樣子使得負樣本和正樣本的比例最大3:1。

3 實驗結果如何?

Runtime

Evaluation on benchmark

在FDDB上SOTA

4.對我們有什麼指導意義?

  • 要在CPU上達到實時,考慮一開始就對特徵進行快速下采樣。
  • 在淺的卷積層考慮使用CReLU,可以減少計算量。
  • MSCL告訴我們,檢測各種不同大小的物體,考慮從深度和寬度上豐富感受野。
  • anchor密度策略告訴我們考慮anchor密度以提高召回率。

5.你可能還喜歡



作者 | Gavin

一個三觀不正的程序猿



本文分享自微信公衆號 - CVpython(CVpython)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章