本文來自《Detecting Faces Using Region-based Fully Convolutional Networks》,又是騰訊ai實驗室的做品。時間線爲2017年9月。express
如圖所示,影響人臉檢測的涉及到人臉遮擋,人臉尺寸,光照條件,各類姿態,豐富的表情等等。fast/faster rcnn模型都是基於r-cnn模型的方法,並經過ROI的方式逐區域的進行檢測。然而直接在全卷積網絡上(例如ResNet)使用特定區域操做的方法,由於強大的分類能力反而致使檢測性能不足。相較而言,R-FCN是都經過全卷積方式來處理該問題的。R-FCN的卷積網絡是基於整個圖片進行計算共享的,這是的對訓練和測試的性能都有提高。相比於R-CNN,R-FCN提出了使用更少的逐區域層來平衡分類和檢測的訓練,天然地將全卷積網絡與基於區域的模塊相結合。網絡
做爲目標檢測中的一個子領域,人臉檢測由於採用了基於區域的方法而效果大大提高。且基於R-FCN的模型效果更優於基於R-CNN的人臉檢測效果。基於通用人臉的尺寸,做者精心設計了錨和ROI的尺度。由於考慮到人臉的部分結構比較難檢測,因此做者引入了一個位置敏感平均池化來生產嵌入特徵,以此加強辨識性,並消除了每一個人臉部分中非均勻分佈的影響。而且,做者採用了多尺度訓練和測試方法。同時也引入了在線硬樣本挖掘方法加速訓練。
本文主要貢獻以下:架構
- 提出了一我的臉檢測框架,經過整合幾種新想法去考慮人臉的特殊屬性。由於提出的方法是基於R-FCN,因此也適合人臉檢測,故而得名face rfcn;
- 引入一個新穎的位置敏感平均池化去從新權重化得分map上的嵌入響應,並消除每一個人臉部分上非均勻貢獻的影響。
- 在WIDER FACE和FDDB上得到了最好;
爲了提高R-FCN架構對人臉檢測的性能,這裏有三方面的改進:框架
- 引入額外更小的錨,並將位置敏感ROI池化改的更小以適應很小人臉的檢測;
- 提出在R-FCN最後一層特徵投票層使用位置敏感平均池化而不是一般的平均池化;
- 採用多尺度訓練。在訓練階段採用在線硬樣本挖掘策略,在測試階段將多尺度檢測結果聚合起來去提高效果。
R-FCN是一個基於區域的全卷積網絡,最初是用來作目標檢測的。不一樣於其餘基於區域的檢測器(例如Faster RCNN),R-FCN構建一個更深的全卷積網絡,且經過在整個圖片上共享計算,從而沒有增長速度負載。R-FCN創建在ResNet 101上,包含了RPN和一個R-FCN模塊。
在R-FCN中的ResNet結構主要扮演特徵提取器。ResNet構建了一個很是深的網絡,用於提取高度表徵的圖像特徵。這些特徵能夠抓取至關大的感覺野,而這其中很小的人臉檢測也能得益於其抓取的上下文信息。從ResNet的最終輸出feature map上,RPN能夠根據錨生成一系列ROI。這些ROI再送入兩個分離的R-FCN模塊中位置敏感ROI池化層,以生成類別得分map和邊界框預測map。在R-FCN的最後,在分類得分map和邊界框預測map上分別使用全局平均池化以各自融合類別得分和邊界框預測。性能
有兩個採用R-FCN而不是R-CNN的優點:測試
- 位置敏感ROI池化巧妙的經過池化一組特徵map到一個輸出得分map的具體位置上,從而將位置信息編碼到每一個ROI中;
- 在ResNet中,沒有非天然的加入全鏈接網絡層,R-FCN的feature map能夠訓練更具表達性和更容易的學到類別得分和人臉的邊界框。
基於R-FCN,做者提出了幾個修改點以提高檢測效果。對於更好的檢測小臉,做者引入了更多更小尺度的錨(1到64個像素)。這些更小的錨 很是有助於抓取極端小的人臉。另外,做者設定了更小的池化尺度以池化位置敏感ROI,以此減小冗餘信息。並修正了後續的投票機制(平均池化)並提出了位置敏感平均池化。最終在ResNet的最後階段採用了atrous卷積,從而在更大感覺野中沒有丟失上下文信息下保證feature map的尺度。編碼
在原始R-FCN中,全局平均池化是將位置敏感ROI池化後的特徵融合到一個維度上。該操做會致使每一個位置人臉呈現均勻分佈。然而人臉的每一個位置在檢測而言都是非均勻的。例如在人臉識別中,《Recognizing imprecisely localized, partially occluded, and expression variant faces from a single sample per class》人眼一般須要比嘴巴得到更多關注。直觀上,咱們相信這樣的假設,即不一樣的人臉區域的重要性確定是不一樣的。所以,做者提出了對位置敏感ROI池化的輸出中每一個位置進行權重化,從而從新權重每一個區域,這被稱爲位置敏感平均池化。spa
形式化上,假設\(\bar{X}=\{X_i|i=1,2,...M\}\)表示一個位置敏感ROI池化層的輸出M個featuremap,而且\(X_i=\{x_{i,j}|j=1,2,...,N^2\}\)表示第\(i_{th}\)個feature map,這裏\(N\)表示池化的feature map的尺度,位置敏感平均池化計算特徵響應值的權重化後的平均值,以此從\(\bar{X}\)獲得平均特徵\(Y=\{y_i|i=1,2,...M\}\),這裏\(y_i\)表示爲:
\[y_i=\frac{1}{N^2}\sum_{j=1}^{N^2}w_jx_{i,j}\]
這裏\(w_j\)表示第\(j-th\)個位置的權重,注意到位置敏感平均池化就是在每一個響應的位置上執行特徵嵌入而後進行平均池化。所以,在大多數流行的DNN結構上均可以方便的實現位置敏感平均池化。設計
受到《Face R-CNN》的啓發,做者也採用了多尺度訓練和測試的策略。在訓練階段,將輸入的圖片最短邊resize成1024或者1200個像素。這裏的訓練策略保證模型能夠魯棒性的檢測不一樣尺度的目標,特別是小型人臉。在線硬樣本挖掘也是一個簡單可是有效的策略。在訓練階段,採用OHEM保證每一個mini-batch上正負樣本比例1:3。在測試階段,對每一個測試圖片創建一個金字塔,金字塔的每一個尺度都獨立進行測試(即一張圖片會通過網絡好幾回)。而後將每一個尺度的結果最後融合到原尺度圖片上。blog
這裏訓練時候的超參數相似face r-cnn。不過不一樣於face rcnn,做者採用的ResNet 101是在imagenet上預訓練過的。特別是,在整個訓練過程當中將ResNet101模型的核參數固定住,以此保證特徵提取器的穩定。
在RPN階段,face rfcn枚舉了多個錨的配置以準確的搜索人臉。經過結合大範圍的尺度和長寬比,從而構建多尺度錨。這些錨而後映射到原始圖像上以計算與ground-truth的IOU的得分,而後採用下列規則:
- 最高IOU得分的錨被標記爲正樣本;
- IOU超過0.7的被標記爲正樣本;
- 若是IOU低於0.3,則標記爲負樣本。
R-FCN隨後基於處理過的錨(候選框)進行訓練,這裏正樣本和負樣本的IOU分別是大於0.5的,和在0.1與0.5之間的。RPN和R-FCN同時基於softmax loss和平滑L1 loss聯合訓練。 在某個IOU得分上,會採用NMS來規範化這些錨。並經過OHEM來訓練硬樣本。RPN的minibatch大小爲256,R-FCN的batchsize爲128.大體上實現了end-to-end的訓練方式。 .