【筆記】Finding Tiny Faces

作者提出了一個檢測器,該檢測器通過利用尺度,解析度和上下文這些新穎特性來檢測小目標,達到了在有1000個人的圖像中檢測到大約800個人的臉(如上圖)。檢測器的置信度由右側的色標表示。您確信能找到識別錯誤嗎?

Abstract

針對小臉的檢測,作者主要從三個方面做了研究:尺度不變,圖像解析度和上下文。大多數識別方法基於尺度不變模型,但識別一個3像素和一個300像素的人臉從根本上來說是不同的。作者的演算法在FDDB和WIDER FACE取得的state-of-the-art的效果。特別是,在WIDER FACE上,與現有技術相比,作者的結果將誤差降低了2倍。

Instruction

  • Multi-task modeling of scales

一方面,我們想要一個可以檢測小人臉的小模板;另一方面,我們想要一個可以利用詳細特徵(即面部)的大模板來提高準確性。

取代「一刀切」的方法,作者針對不同的尺度(和縱橫比)分別訓練了檢測器。雖然這樣的策略提升了大目標檢測的準確率,但是檢測小目標仍然具有挑戰性。

  • How to generalize pre-trained networks?

關於小目標檢測的問題,作者提出了兩個見解。

(1)如何從預訓練的深度網路中最佳地提取尺度不變的特徵。

(2)雖然許多應用於「多解析度」的識別系統都是處理一個圖像金字塔,但我們發現在插值金字塔的最底層對於檢測小目標尤為重要[5]。

因此,作者的最終方法是:通過尺度不變方式,來處理圖像金字塔以捕獲大規模變化,並採用特定尺度混合檢測器,如下圖:

(a)單一尺度模板和圖像金字塔

(b)不同尺度模板和單一圖像

(c)粗略尺度模板和粗略圖像金字塔,(a)和(b)的結合

(d)含有上下文信息的固定大小多尺度模板和粗略圖像金字塔

(e)定義了從深度模型的多個層中提取的特徵模板,也就是foveal descriptors

  • How best to encode context?

作者證明從多個層中提取的卷積深度特徵(也稱為「hypercolumn」 features)是有效的「foveal」描述符,其能捕獲大感受野上的高解析度細節和粗略的低解析度線索(如上圖2(e)所示)。我們在圖5中展示了我們的中心凹描述符(從較低卷積層提取)的高解析度部分對於精確定位是至關重要的。

  • Our contribution

為了檢測小人臉,我們對圖像解析度,對象尺度和空間上下文進行了深入分析。作者的演算法在FDDB和WIDER FACE取得的state-of-the-art的效果。特別是,在WIDER FACE上,與現有技術相比,作者的結果將誤差降低了2倍。

Exploring context and resolution

首先,作者提出了一個問題:找到固定大小(25x20)的小人臉的最佳方式是什麼?

作者使用 t(h,w,σ) 描述一個模板,該模板用於檢測 t(h/σ,w/σ) 大小的人臉。例如:t(125,100,0.5) 表示在0.5的解析度上檢測 250×200 大小的人臉。

然後,進行了實驗,採用ResNet-50的FCN結構,輸出二分類概率圖。

  • Context

圖4給出了感受野(RF)大小對上下文影響的分析。實驗表明:

(1)較小的感受野對於小臉檢測更有利,因為整個臉部都是可見的;

(2)添加上下文對檢測小臉是有幫助的,但超過300x300像素將會有一定的下降;

在下圖中,作者比較了一下具有和不具有「foveal」描述符,這表明我們的「foveal」描述符的高解析度組件對於小目標實例的精確檢測至關重要。

  • Resolution

如果我們訓練一個模板,其大小不同於要檢測的目標對象,這樣將會怎樣?

實驗表明,在測試圖像上使用「中等」尺寸模板(50x40)檢測小人臉(25x20)。實驗結果如圖7,效果得到了顯著地提高,從69%到75%!我們針對大人臉進行了相反的實驗,同樣效果從89%上升到94%!

是什麼導致這種現象呢?答案是訓練樣本的不平衡:預訓練模型使用的訓練集是ImageNet,而ImageNet中40到140像素之間的「中等」大小的目標佔了80%。

Approach: scale-specific detection

是否有一個一般策略來為特定對象大小選擇模板尺度?也就是σ如何取值才能使得模板t(h,w,σ)性能最佳。為此,作者進行了模板解析度分析,做了很多實驗,結果如下圖:

因此,檢測大目標(高度大於140px),使用0.5X解析度。要檢測小目標(高度小於40像素)使用2X解析度的模板。否則,使用相同的(1X)解析度。

  • Pruning

如果直接採取上面的策略設計模板可能會導致重複。比如,檢測 31×25的目標應該採用的模板為 (62,50,2);而檢測 64×50的目標應該採用的模板為 (64,50,1)。顯然,這兩種模板很接近,可進行修剪冗餘,如下圖。

而且,修剪冗餘後還得到了一些小的提升,如下:

  • Architecture

作者提出的架構如下圖,用來檢測一系列尺寸的人臉。

從輸入圖像開始,我們首先創建一個粗圖像金字塔(包括2X插值)。然後,我們將縮放的輸入圖像輸入到CNN中,以便在每個解析度下預測模板響應(用於檢測和回歸)。最後,我們在原始解析度圖像上應用非最大抑制(NMS)來獲得最終檢測結果。

虛線框代表端到端的可訓練部分。我們在0.5X,1X,2X插值圖像上運行A型模板用於檢測40-140像素的人臉,而僅在2X插值圖像上運行B型模板用於檢測小於20像素的人臉。

對於共享的CNN,我們嘗試了ResNet101,ResNet50和VGG16。試驗結果如下:

簡而言之,這篇論文具有一定的新穎性,在尺度、解析度與上下文做了很多實驗與探討,為人臉檢測的研究提供了新思路。不知道您在看完之後,有沒有新想法,歡迎與我一起探討。

原文鏈接:

Tiny Face Detector, CVPR 2017 Finding Tiny Faces


推薦閱讀:

深度學習入門該用PyTorch還是Keras?熱門公開課換框架背後的學問
python3.6.1及TensorFlow和PyTorch

TAG:PyTorch | 深度学习DeepLearning | 机器学习 |