人臉檢測算法之 S3FD

導言

自從anchor-based method出現之後,物體檢測基本上就離不開這個神奇的anchor了。只因有了它的協助,人類才在檢測任務上第一次看到了real time的曙光。但是,夾雜在通用物體檢測中,某些特定物體的檢測任務由於應用量巨大,以及該物體的特殊性,需要單獨拎出來考慮。其中最有代表性的就是人臉檢測。

人臉相對於其他物體來說有一個普遍的特點,就是在圖像中所佔像素少。比如,coco數據集中,有一個分類是“人”,但是人臉在人體中只佔很少一部分,在全圖像上所佔比例就更少了。本文所要介紹的S3FD[1](Single Shot Scale-invariant Face Detector)正是要解決這個問題。

人臉檢測專用數據集—widerface

Widerface可以說是目前人臉檢測數據集中最難的,放一張圖大家感受一下

人臉檢測算法之 S3FD

圖片像素1024*732,平均人臉像素10*13,難度可想而知。(一共標註了132個人臉,吃飽了撐的讀者可以數數看)

當然了,這張照片只是展示了人臉的大小引發的問題,還有其他像遮擋,大角度,旋轉等問題,由於不是本文的重點,不予過多討論。

SSD簡介

由於該算法是基於SSD來做的改進,首先簡單介紹一下SSD[2]。

人臉檢測算法之 S3FD

如圖為SSD和YOLO的網絡結構,他們也是最早的一批實現了one-stage檢測的算法。可以看到,SSD為全卷積網絡,並且通過不同位置的layer進行預測。換句話說,用低層網絡檢測小物體,高層網絡檢測大物體。

當然了,SSD也有一些明顯的問題,比如對於小物體的recall很一般。部分原因是在利用低層網絡做預測時,由於網絡不夠深,不能提取到有效的語義信息。

總之,SSD檢測速度可以和YOLO媲美的同時,精度又可以和Faster RCNN媲美,而且很適合作為基礎框架進行進一步的改進。

傳統anchor機制在小人臉中遇到的問題

人臉檢測算法之 S3FD

本文作者提出了四個問題:

1.人臉區域本身就小,經過幾個stride之後,特徵圖上就不剩什麼了

2. 相比於感受野和anchor的尺寸來說,人臉的尺寸小的可憐

3. 對於現有的anchor匹配策略,我們可以看到,人臉像素小於10*10的tiny face基本上一個anchor都匹配不到。而outer face這個問題其實是anchor-based方法的通病,每級anchor間大小差距越大,中間尺寸的mismatch現象就越嚴重。

4. 圖中每一個網格可以看成是某個特定尺寸的anchor。可以看到對於左邊的小人臉,正負比例嚴重失衡,這在訓練時,尤其是first layer,需要特別考慮。

網絡結構

人臉檢測算法之 S3FD

1. 輸入大小640*640,從feature map大小為160*160開始,一直到最後5*5,共有6級預測網絡,anchor scale從16*16到最後512*512,依次指數加一(看了網絡結構強迫症表示很舒服)。

2. 每一個預測層,每個位置anchor只有一個(一個scale,ratio為1:1),因為在不扭曲圖片的場景下,人臉的比例大概就是1:1(可能有少部分大長臉比例達到了1:2,但是太少了忽略不計)。因此,預測conv輸出的特徵維度是2+4=6

3. 在作為預測的最低層的layer(即feature map大小為160*160)下面可以看到預測出來的特徵維度為Ns+4,不是2+4,然後跟了一個叫Max-out Background label的東西,這個後面會講到。

4. 中間的conv_fc6,conv_fc7是從VGG的fc層提取出來然後reshape,作為初始權重。

5. Normalization layers就是SSD_caffe中的Normalize。感興趣的可以去Github看weiliu89的SSD版本的Caffe代碼[2]。

如何解決問題

1. Anchor與anchor之間重疊區域多。比如第一級,stride是4,但是anchor scale是16,所以相鄰兩個anchor之間有很大一塊重疊區域,一定程度上解決了前文提到的outer face的問題。

2. 改進了anchor匹配策略。

如果按照SSD中的匹配策略,jaccard overlap高於閾值(一般取0.5),平均每個人臉只能匹配到3個anchor,而且tiny face和outer face能匹配的anchor數量大部分為0。

作者設計了新的匹配策略:

第一步,將閾值從0.5降到0.35

第二步,對於那些仍然匹配不到anchor的人臉,直接將閾值降到0.1,然後將匹配到的anchor按照jaccard overlap排序,選取top-N個。這個N作者設計為第一步中匹配到anchor的平均值。

再來直觀的對比一下新老匹配策略:

人臉檢測算法之 S3FD

可以看到,average line和局部都有所提升。

3. 前面提到,小人臉導致正負樣本比例嚴重失衡。尤其對於最淺層的預測層,一方面anchor本來就多(像本文中的結構,第一級中anchor就佔了總數的75%),另一方面由於大部分anchor是背景,導致false positive顯著增高。所以為了減少這裡的false positive,作者採用了max-out background。

前面我們看到第一級預測出來的特徵維度是Ns+4,這裡NS=Nm+1。對於不採用max-out策略的網絡層,Nm可以看成是1,即只預測一個該anchor為背景的分數。但是這裡取3,可以理解為重複三次預測該anchor為背景的分數,然後取這三個分數中最高的那一個。最直接的結果就是提高了該anchor被預測為背景的概率,因此能夠減小false positive。

最後在widerface medium和hard等級上看看本文的成果(測試代碼可以在作者提供的github代碼中查看[3])

人臉檢測算法之 S3FD

可以看到尤其是hard等級上,本文算法有巨大的提升。

人臉檢測算法之 S3FD


分享到:


相關文章: