導語:最近在搞目標檢測,所以閱讀了相關論文,雖然文章有點老了,但是好論文還是值得總結一波。
論文題目:
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密集策略。
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 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源創計劃”,歡迎正在閱讀的你也加入,一起分享。