論文題目:《FaceBoxes: A CPU Real-time Face Detector with High Accuracy》python
論文連接:https://arxiv.org/pdf/1708.05234.pdfapi
年份:2017網絡
論文做者:Shifeng Zhang等人框架
做者單位:中國科學院自動化研究所等工具
公衆號CVpython同步發佈優化
要保持高精度,還要在CPU上達到實時?還真有點難,可是Shifeng Zhang等人針對這個問題,提出了人臉檢測模型FaceBoxes,表現SOTA。lua
FaceBoxes框架如圖1所示,主要包括Rapidly Digested Convolutional Layers (RDCL)和Multiple Scale Convolutional Layers (MSCL)模塊,還有anchor密集策略。blog
RDCL的目的是爲了快速下采樣,讓模型可以在CPU上面能達到實時。RDCL採用的方法是縮小空間大小,選擇合適的卷積核大小和減小輸出通道。排序
MSCL是爲了獲得更好地檢測不一樣尺度的人臉。圖片
MSCL在多個上尺度進行迴歸和分類,在不一樣尺度下檢測不一樣大小的人臉,可以大大提升檢測的召回率。
Inception3的anchor大小爲32,64和128,而Conv3_2和Con4_2的anchor大小分別爲256,512。anchor的平鋪間隔等於anchor對應層的步長大小。例如,Con3_2的步長是64個像素點,anchor大小爲256x256,這代表在輸入圖片上,每隔64個像素就會有一個256x256的anchor。關於anchor的平鋪密度文中是這樣定義的:
$$
A_{density}=A_{scale}/A_{interval}
$$
其中$A_{density}$和$A_{interval}$分別爲anchor的尺度和平鋪間隔。默認的平鋪間隔(等於步長)默分別認爲32,32,32,64和128。因此Inception的平鋪密度分別爲1,2,4,而Con3_2和Con4_2的平鋪密度分別爲4,4。
能夠看出來,不一樣尺度的anchor之間存在平鋪密度不平衡的問題,致使小尺度的人臉召回率比較低,所以,爲了改善小anchor的平鋪密度,做者提出了anchor密度策略。爲了使anchor密集n倍,做者均勻地將$A_{number}=n^2$個anchor鋪在感覺野的中心附近,而不是鋪在中心,如圖3所示。將32x32的anchor密集4倍,64x64的anchor密集兩倍,以保證不一樣尺度的anchor有相同的密度。
數據擴增:
匹配策略:訓練期間,須要肯定哪些anchor對應臉部的bounding box,咱們首先用最佳jaccard重疊將每一張臉匹配到anchor,而後將anchor匹配到jaccard重疊大於閾值的任何一張臉。
Loss function: 對於分類,採用softmax loss,而回歸則採用smooth L1 損失。
Hard negative mining:anchor 匹配後,發現不少anchor是負的,這會引入嚴重的正負樣本不平衡。爲了快速優化和穩定訓練,做者對loss進行排序而後選擇最小的,這樣子使得負樣本和正樣本的比例最大3:1。
Runtime
Evaluation on benchmark
在FDDB上SOTA。
本文由博客羣發一文多發等運營工具平臺 OpenWrite 發佈