1. 前言
人臉檢測領域目前主要的難點集中在小尺寸,模糊人臉,以及遮擋人臉的檢測,這篇ICCV2017的S3FD(全稱:Single Shot Scale-invariant Face Detector)即是在小尺寸人臉檢測上發力。
2. 出發點&貢獻
S3FD這篇論文的出發點是當人臉尺寸比較小的時候,Anchor-Based的人臉檢測演算法效果下降明顯,因此作者提出了這個不受人臉變化影響的S3FD演算法。這一算整體上可以看做是基於SSD的改進,它的主要貢獻可以概括為:
改進檢測網路並設定更加合理的Anchor,改進檢測網路主要是增加
Stride=4
的預測層,Anchor尺寸的設定參考有效感受野,另外不同預測層的Anchor間隔採用等比例設定。
引入尺度補償的Anchor匹配策略增加正樣本Anchor的數量,從而提高人臉的召回率。
引入
max-out background label
降低誤檢。
3. 小尺寸人臉檢測效果不好的原因研究
下面的Figure1展示了論文對Anchor-Based的人臉檢測演算法在小人臉檢測中效果下降明顯的原因分析。
Figure1
Figure1(a)
中展示的是網路結構本身設計的問題。瞭解過SSD的同學知道在網路結構中有多個特徵層被用於檢測目標,這些特徵層中
stride
最小的是
,這樣原圖中
大小的區域在該預測層中就僅有1個畫素點,這對小人臉的檢測是非常不利的,因為有效的特徵太少了。同樣,對於Faster-RCNN來講,用於檢測目標的特徵層的
stride
是
,這樣用於人臉檢測的有效特徵範圍就更小,這對小臉檢測是致命打擊。
Figure1(b)
中展示了Anchor的尺寸,感受野和人臉的尺寸不匹配的問題。
Figure1(c)
中展示了由於一般設定的Anchor尺寸都是離散的,例如
, 而人臉的尺寸是連續的,因此當人臉的尺寸在設定的Anchor值之間時可以用於檢測的Anchor數量就會很少,如圖中的紅色圓圈部分所示,這樣就會導致人臉檢測的召回率低。
Figure1(d)
指出為了提高小人臉的檢測召回率,很多檢測演算法都會透過設定較多的小尺寸Anchor實現,這樣容易導致較多的小尺寸負樣本Anchor,最終導致誤檢率的增加。這裡兩張圖的解析度是一樣的,左圖中的人臉區域較小,因此主要透過淺層特徵來進行檢測,因此這裡Anchor尺寸設定較小,而右圖中的人臉區域較大,因此主要是透過高層特徵進行檢測,此時Anchor尺寸設定較大。可以看出左圖中標籤為背景的Anchor數量遠遠多於標籤為目標的Anchor,而在右圖中數量比例還是相對較均衡的。
4. S3FD原理
論文針對第三節的問題進行了分析並提出瞭解決方案,也就有了這篇S3FD。
首先針對
FIgure1(a),(b)
的問題,論文對檢測網路的設計以及Anchor的鋪設做了改進,提出了不受人臉尺寸影響的檢測網路,改進的主要內容包括:
預測層的最小
stride
降低到
(具體而言預測層的
stride
範圍為
到
,一共
個預測層),這樣就保證了小人臉在淺層進行檢測時能夠有足夠的特徵資訊。
Anchor的尺寸根據每個預測層的有效感受野和等比例間隔原理進行設定,設定為
到
,前者保證了每個預測層的Anchor和有效感受野大小匹配,後者保證了不同預測層的Anchor再輸入影象中的密度基本類似。
下面的Figure3展示了Anchor尺寸和數量設定的依據。
Anchor尺寸和數量設定的依據
Figure3(a)
展示了有效感受野
「effective receptive field」
和理論感受野
「theoretical receptive field」
的區別,其中整個(a)代表的就是理論感受野,一般都是矩形,而(a)中的白色點狀區域就是有效感受野。這一點可以看我們更詳細的文章:目標檢測和感受野的總結和想法
Figure3(b)
以預測層
conv3_3(stride=4)
為例介紹理論感受野、有效感受野和Anchor尺寸的關係。首先黑色點組成的方形框就是理論感受野,對於
conv3_3
預測層來說是
,而有效感受野是藍色點組成的圓形框,而紅色實線組成的方形框是該預測層設定的Anchor,尺寸是
,可以看到這裡Anchor的尺寸和有效感受野是匹配的。
Figure3(c)
是關於Anchor的等比例間隔設定。假設
是Anchor的尺寸,那麼將Anchor的間隔設定為
。例如對於
stride=4
的
conv3_3
預測層而言,Anchor的尺寸為
,那麼相當於在輸入影象中每隔
個畫素點就有一個
大小的Anchor。可以看出這部分和SSD中關於Anchor尺寸的設定是類似的,只是相同Stride層的Anchor數量比SSD少,因為這裡設定的Anchor寬高比為
,因為人臉一般是正方形的,另外SSD是對特徵圖每個畫素點都設定Anchor。
下面的Table1展示了預測層的
stride
,
anchor
尺寸和感受野之間的關係。
Table1
S3FD的Anchor尺寸設定和SSD最主要的區別在於S3FD中的Anchor大小是隻和
stride
相關的,而SSD的Anchor大小不僅和
stride
有關,還和輸入大小有關。
這裡以
conv3_3
為例子,來手算一下理論感受野,注意這裡說的理論感受野是基於預測層計算的,比如第一行的
conv3_3
,是指在
conv3_3
後接的預測層的感受野,不是
conv3_3
的感受野。
conv3_3
的預測層採用的是
且步長為
的卷積,所以預測層中的一個點對映到預測層的輸入就是
的區域,預測層的輸入是
conv3_3
的輸出,所以
conv3_3
輸出
區域對映到
conv3_3
的輸入就是
的區域,
conv3_3
的輸入又是
conv3_2
的輸出,因此
conv3_2
輸出的
區域對映到
conv3_2
的輸入就是
區域,
conv3_2
的輸入是
conv3_1
的輸出,因此
conv3_1
輸出的
區域對映到
conv3_1
的輸入就是
的區域,
conv3_1
的輸入是
pool2
的輸出,因此
pool2
輸出的
區域對映到
pool2
的輸入就是
的區域,然後對映到
conv2_2
的輸入是
的區域,對映到
conv2_1
的輸入是
的區域,對映到
pool1
的輸入是
的區域,對映到
conv1_2
的輸入是
的區域,對映到
conv1_1
的輸入是
的區域,因為
conv1_1
的輸入就是輸入影象,所以
conv3_3
預測層的感受野就是
,這個層就計算完了,其它層同理,注意這裡計算的方法是從網路頂端算到底端,下面用一張pprp的圖來看一下整個VGG16各層的感受野。
VGG16各層的感受野,made by pprp
接下來的是針對
Figure1(c)
中的問題,論文提出了尺度補償的Anchor匹配策略。這部分主要分兩步,第一步和常規確定Anchor的正負標籤類似,只不過將IOU閾值從
降到
,這樣可以保證每個目標有足夠的Anchor來檢測,這樣相當於間接解決了原本處於不同Anchor尺寸之間的人臉的可用Anchor數量少的問題。經過這一步之後,仍然會有較多的小人臉沒有足夠的正樣本Anchor來檢測,因此第二部的目的就是提高小人臉的正樣本Anchor數量,具體而言是對所有和Ground Truth的IOU大於0。1的Anchor做排序,選擇前N個Anchor作為正樣本,這個N是第一步的Anchor數量均值。
最後獲得的Anchor尺寸和人臉尺寸的匹配數量曲線如
Figure4(a)
所示,相比
Figure1(c)
相比有較大提升。雖然降低IOU閾值能夠提高人臉的召回率,但同時也會帶來一些誤檢,之所以採用這種方式,可能時因為召回率的增加遠遠大於誤檢率並且後面還有減少誤檢的操作。
Anchor和人臉匹配數量及max-out background label的示意圖
最後針對
Figure1(d)
的問題,作者提出了針對
stride=4
的預測層(
conv3_3
)的
「max-out background label」
操作,從而減少誤檢。具體如
Figure4(b)
所示,左邊支路是分類支路,右邊支路是迴歸支路。左邊支路中一共預測
個背景機率和一個目標機率,選擇
個背景機率中最高的機率作為最終的背景機率。這部分其實就相當於集成了
個分類器,有效削弱了負樣本的預測機率,從而降低誤檢率,這種做法在目前不平衡的影象分類任務中也比較常用。
❝ 對max-out background label一個直觀的解釋就是對於每一個小尺寸anchor,進行N次人臉和背景分類,選擇其中某個背景Acore最高的一個作為該Anchor的score。 其實就是對Anchor進行多次預測,然後取其最大背景機率結果,以此降低誤檢為人臉的anchor數量,從而降低假陽性率。
❞
5. S3FD網路結構
最後,S3FD的網路結構如Figure2所示:
S3FD的網路結構
可以看到它和SSD網路結構差不多,不過預測層(
「predicted convolutional layers」
)部分和SSD的區別在於:
預測層整體前移了,也就是
stride=4
到
stride=128
共
個預測層。
stride=4
的預測層通道數和其他
stride
的預測層通道數不同,
stride=4
的預測層通道數是
,其它
stride
的預測層通道數是
,這裡的
其實也可以用
表示,不過對其它
stride
的預測層來說
為
,表示
個前景(人臉)和
個背景(非人臉)共
個類別。而對於
stride=4
的預測層,
,其中
表示前景(人臉),
表示max-out background label數量。
另外,網路的輸入大小為
。
6. 模型訓練
6.1 資料增強方法
模型是在WIDER FACE 的12880張人臉資料上進行訓練的。其資料增強方法如下:
顏色擾動。
隨機裁剪:對小尺寸人臉放大,隨機裁剪5塊,最大的為原圖上裁剪,其他4張為原圖短邊縮放至原圖[0。3,1]的影象上裁剪得到。
裁剪影象縮放為
後,並以0。5的機率隨機左右翻轉。
6.2 損失函式
損失函式包括兩部分,一部分為Anchor是否為人臉的分類損失函式,還有一部分是Anchor為人臉的檢測框座標修正值的迴歸損失函式。最後得到總損失函式如下所示:
其中,
表示Anchor的索引,而
表示Anchor是人臉的機率,
為ground-truth,即實際情況當該anchor為人臉時,其值為1,而不為人臉時,其值為0;
為預測的4個檢測框座標修正值向量,
為檢測框實際座標。分類損失採用softmax 損失函式,迴歸損失採用smooth-L1 損失函式。
表示僅對正樣本的anchor計算迴歸損失。
和
分別表示分類時正負anchor的數量和迴歸的正Anchor數量,
表示平衡引數,用於平衡分類損失和迴歸損失。
6.3 難樣例挖掘
經過Anchor匹配過程後,會存在嚴重的正負樣本不平衡的問題,為了模型訓練時穩定及更快收斂。對於負樣本,選擇loss 值逆序排序的top N ,使得正負樣本比例為3:1,並且設定
以平衡分類和迴歸損失。
7. 實驗結果
下面的Table3展示了S3FD的消融實驗結果,Baseline是Faster RCNN和SSD。S3FD(F)表示只改進檢測網路和Anchor設定,S3FD(F+S)表示改進檢測網路、Anchor設定和尺度補償的Anchor匹配策略,S3FD(F+S+M)是最終的演算法。
S3FD的消融實驗結果
Figure8是S3FD和其它人臉檢測演算法在WIDER FACE資料集上的對比。
S3FD和其它人臉檢測演算法在WIDER FACE資料集上的對比
下面的Table4展示了關於選擇不同預測層對最終模型效果(mAP值)的影響。
重點看下 去掉conv3_3層的效果,因為這是S3FD演算法在改進檢測網路時做的非常重要的一個操作,可以看到去掉這個預測層對hard人臉的檢測效果影響很大,這是因為hard部分主要是小尺寸人臉
8. 結論
這篇論文在小尺寸人臉檢測上發力,提出了一些非常有用的Trick大大提升了在小尺寸人臉上的召回率以及效果,我覺得
9. 參考
論文原文:
https://
arxiv。org/pdf/1708。0523
7。pdf
原始碼:
https://
github。com/sfzhang15/SF
D
https://
blog。csdn。net/u01438016
5/article/details/83477516
歡迎關注GiantPandaCV, 在這裡你將看到獨家的深度學習分享,堅持原創,每天分享我們學習到的新鮮知識。( • ̀ω•́ )✧
有對文章相關的問題,或者想要加入交流群,歡迎新增BBuf微信: