尺度不變人臉檢測:Group Sampling

我愛計算機視覺發表於2019-09-11


尺度不變人臉檢測:Group Sampling

本筆記記錄針對尺度不變性的人臉檢測策略Group Sampling,西交大、MSRA作品;這篇論文文筆流暢、公式不多、圖表清晰、實驗對比有針對性,模型效能也很好,是一篇不錯的美文;

現階段wider face上的效能已經刷到快飽和了(hard set可能還能繼續提升點,但已經是很極端的場景了,如果整合各種tricks弄成一個超級模型,效能是棒棒的,但個人覺得是有過擬合的風險),各類方案為了百尺竿頭更進一步,取得sota,各種tricks無所不用其極,導致整套方案相對來說是比較臃腫的;有些論文做了很多很多的消融實驗,整合了很多有效的tricks(無效的當然就不會寫在論文裡面啦~~~),效能是上去了,但看著心裡總是有點犯嘀咕的,一來不好復現、技巧性太強,二來也會質疑其普適性;

Group Sampling和Soft-NMS、SNIP等方案比較類似,發現了現階段人臉檢測中存在的一個問題,提出解決這個問題的方案,最終效能也比較好,沒有太多的工程技巧,看完論文後也會想,嗯,要不我也拿來用用,也容易實現,實驗結果很好,說不定在我的任務上也能有幫助呢對吧;


名詞定義:

1 Group Sampling:本文提出的人臉檢測演算法,嚴格意義上並不能稱為一個演算法,應該是模型訓練階段的資料組織策略,將作為訓練樣本的anchors按其尺度劃分到各個groups,並確保各個group間的訓練樣本總數量大致相當,正負樣本數量比例相似,最終就能減緩訓練階段正負樣本比例不均衡的困擾,可參見fig 1、2;


Abstract

1 為了檢測影像中不同尺度的人臉,現有策略一般是影像 / 特徵金字塔,影像金字塔的弊端就是多尺度影像多次輸入模型,檢測速度比較慢;特徵金字塔僅需輸入一次影像(也有結合影像金字塔 + 特徵金字塔的多尺度輸入方案,不在本次討論範圍內),但透過多層次、多尺度的金字塔特徵圖,達到檢測不同尺度人臉的目標,SSD、FPN等就是此類方案,利用多層特徵圖生成特徵金字塔,不同解析度的特徵圖檢測不同尺度的人臉,大尺度人臉在高層特徵圖上檢測,小尺度人臉在低層特徵圖上檢測;

2 但本文透過實驗發現(table 1):其實根本不需要透過多層次的特徵金字塔上的多個分支做人臉檢測,僅使用單層feature map上的特徵,做人臉檢測也能達到sota;那麼,問題出在哪?單層feature map做人臉檢測,效能如何提升?

3 文中發現,對於大尺度範圍跨度的人臉,影響檢測器的效能之處在於訓練樣本的不均衡問題,特別是不同人臉尺度上(對應到不同尺度anchor)的正負樣本均衡問題,才是導致模型效能有無提升的關鍵(the balance of training samples, including both positive and negative ones, at different scales is the key);

4 本文進一步提出group sampling策略,將anchors按尺度劃分到不同的groups裡面,使得訓練階段每個group內正負樣本的數量大致是相同的,核心思想可參照4.2小節;

5 文中僅使用FPN最後一層特徵(the last layer of FPN as features,如fig 1,指的是P2的finest layer),未使用影像 / 特徵金字塔的多分支檢測,再結合group sampling,就能取得sota;實驗 + 分析部分,也能充分證明group sampling本身是有效的,最終無需bells and whistles,就在FDDB、wider face、FDDB上取得了sota;


1. Introduction

人臉檢測的場景中,小尺度、大尺度範圍內變化的人臉是一個很大的挑戰;Fast R-CNN / Faster R-CNN based人臉檢測演算法,都使用單尺度的feature map來檢測各種尺度的人臉,但在小尺度人臉上效能一般,兩個原因:

1 人臉尺度小,經過若干層conv + pooling操作後,人臉特徵已淹沒在feature map(如conv 4_3,下同)中,無法進一步做高質量的人臉判別;

2 conv4_3上anchor對應的stride = 16,導致小尺度人臉gt bbox本身就很難匹配到足夠多、尺度合適的anchors,這樣匹配上的anchor不僅尺度與之不是最匹配,數量也較少,大部分anchors都歸類於負樣本了,訓練過程中正負樣本不均衡的問題將比較嚴重;----- S3FD、ZCC還是提出了等比例密度的anchor取樣策略,能緩解此類問題;


那麼,為了解決此類小尺度人臉,人臉大尺度範圍內變化的問題,一些解決方案如下:

1 如HR、SNIP,使用影像金字塔完成訓練、預測;

2 如IO-Net、HyperNet,聯合高低層特徵圖完成訓練、預測;

3 如U-Net,使用top-down、skip connection結構,融合高低層特徵圖,最終僅使用高解析度的單張特徵圖預測(a single high-level feature map with fine resolution);

4 如SSD、FPN,高低層特徵圖都用上,多個分支、全家桶似地檢測不同尺度的人臉 / 目標;

以上四種方案都很牛逼,各有千秋,方案4效果最深入人心,對小尺度人臉檢測效果最好,用的比例也最高;


此前大家經驗主義地認為,SSD、FPN-style等檢測器效能如此之好的原因,是因為使用了多層次、多尺度的特徵表達,對比在單層次、單尺度上的特徵圖,有更多的尺度不變性,也帶來了更多的魯棒性;但本文發現,最起碼在人臉檢測中,事實的真相併不是這樣子的(有點扎心了~~),文中發現在特徵金字塔上做目標檢測,將會為每層特徵圖上生成不同尺度、數量各異的anchors(各個尺度的anchors還對應到不同的stride,而非RPN中不同尺度的anchor使用相同的stride),這才是特徵金字塔上目標檢測效能優於單尺度特徵圖上結果的原因,而非特徵金字塔本身的特徵表達能力強,在FPN的實驗中,也沒有重視這個問題;在本文實驗中,發現如果在單尺度特徵圖上也使用和FPN一樣,相同數量的anchors,也能取得差不多的效能;---- 起碼fig 1 + table 1中的結果能支援這個結論;

基於以上發現,文中做了海量實驗,最終定位到當前anchor-based人臉檢測器中存在的一個大問題:不同尺度目標上對應的anchor數量是不均衡的,且各個尺度anchor間正負樣本的比例更不均衡;文中使用了Faster R-CNN中的RPN、FPN作為baseline,各個演算法流程對比如fig 1:並進一步計算了訓練階段,各個anchor尺度下正負樣本所佔比例(橫座標為anchor尺度),如fig 2(a)、(b);

尺度不變人臉檢測:Group Sampling

fig 1中,64/16,64表示anchor尺度,16表示anchor所在特徵圖上對應的stride;

尺度不變人臉檢測:Group Sampling

對RPN而言,單層特徵圖上提取特徵並生成不同尺度的anchor,所有尺度的anchor對應相同的stride,小尺度anchor將很難匹配到合適尺度的目標(對比大尺度目標和大尺度anchor,小尺度anchor取樣密度過低,過於稀疏,可參照S3FD、ZCC的解釋),那麼對於小尺度gt bbox而言,其匹配的anchor正樣本就非常少,負樣本數量繁多,最終效能也不會很好;

FPN使用低層高解析度特徵圖檢測小尺度目標,小尺度anchor專職操作於該feature map,如fig 1(b),P2上anchor的stride也不會與P3、P4、P5一刀切地保持一致,這樣對比RPN,小尺度anchor的取樣密度更高,負樣本的絕對數量增加了很多(gives rise to several more times negative training samples for small objects than large objects),但anchor正樣本的絕對數量也同步增加了,最終在coco、wider face上,FPN-based檢測器效能優於RPN-based檢測器,特別是在小尺度目標上效能更好;---- 也即,作者認為效能提升的關鍵,不在於特徵金字塔的多層次多分支預測,而在於訓練階段正負樣本的比例更均衡,以及帶來的更多正樣本;

再就是如fig 1(d)、fig 2(d),僅使用FPN的最後一層feature map操作(網路結構圖顯示的是finest layer,一個概念),分析正負樣本的比例情況,可以發現與fig 2(a) RPN分佈類似,僅在絕對數量上所有差異,此時小尺度anchor的取樣密度高了,匹配的anchor數量也不錯,但有一個問題:各個尺度anchor下對應的正負樣本比例卻不均衡了,大尺度anchor上正負樣本比例明顯更高,此類不均衡問題就冒出來了;那麼FPN-finest最終在小尺度目標上的效能也很一般,原因也歸結於:insufficient positive samples for small anchors;

再對比fig 2(d)、fig 2(e),多了group sampling策略(原理很簡單:在訓練階段的每次迭代中,隨機取樣正負樣本,保持各個尺度anchor間大致相同的正負樣本比例和數量:randomly sample the same number of positive samples as well as the same number of negative samples at each scale during each iteration of the training process),參與訓練的各個anchor尺度上,正負樣本數量明顯更加均衡了,那麼FPN-finest-sampling還是很牛逼的,單層特徵圖上檢測人臉,最終在wider face上效能優於FPN;

此外,文中進一步發現,Faster R-CNN的2nd-stage Fast R-CNN中同樣面對著資料不均衡的問題(資料集中各個尺度上目標數量的分佈是不均衡的),group sampling也可以應用於此,在對不同尺度的proposals經過RoI pooling提取特徵和,再按尺度劃分做一次均衡的取樣(evenly sampling the features after RoI Pooling for different scales),還可以進一步提升檢測效能;


本文貢獻有三:

1 文中發現anchor不同尺度間的正負樣本比例分佈不均衡,而非特徵金字塔上各個尺度feature map的特徵表達能力,影響到多分支的檢測效能,這點與之前對FPN的認知有點不一致;

2 文中發現anchor-based檢測器的效能瓶頸在於:不同anchor尺度上正負樣本比例分佈不均衡;

3 本文提出group sampling,實現簡單,確保了不同anchor尺度上正負樣本的比例分佈比較均衡,最終對檢測效能有了較大的提升;


2. Related Work

Single scale feature for multi-scale detection

經典的如Fast R-CNN、Faster R-CNN,透過RoI pooling操作提取scale-invariant features,在單層、單尺度的feature map上檢測多尺度目標,在效能 / 速度上達到了很好的平衡,但在小尺度目標上效能一般,文中認為原因出在對小尺度目標而言,缺乏足夠數量的正樣本參與訓練(insufficient positive training samples),但group sampling可以消除此類弊端,並取得不錯的效能提升;

Top-down architecture with lateral connections

top-down + lateral connection很經典,在U-Net、SharpMask、Stacked Hourglass Network中都效能棒棒噠,該結構的優勢在於,將低層高解析度細節資訊豐富、高層低解析度語義資訊豐富的特徵圖,融合進一個single high-resolution feature map (優勢互補),在本文的實驗中也發現,top-down + lateral connection對人臉檢測的幫助很大;

Multi-scale feature for multi-scale detection

SSD、MS-CNN、FPN,特徵金字塔、多特徵圖分支、在各個尺度特徵圖上檢測不同尺度的目標,FPN也使用了top-down + lateral connection來增強特徵表達能力,類似SSH、S3FD中也有采用,但文中發現這些演算法效能提升的關鍵之處在於,anchor的取樣分佈對小尺度目標更有利(得到了更均衡的正負樣本數量),而非多層次化的特徵表達能力;

Data imbalance

資料類別間不均衡的問題在機器學習資料探勘深度學習等方向上已經存在了很多年,也取得了很多研究成果;經典做法就是對訓練資料的重取樣策略,對資料量較多的類過取樣、資料量較少的類重取樣;或者使用cost-sensitive learning,對資料量少的訓練樣本對應的loss,給予更高權重的loss;在目標檢測任務中,訓練樣本尺度不均衡的問題,也可以認為是類別不均衡的一種,經典的方案如OHEM、focal loss等能解決部分問題;再如S3FD中發現了,對小尺度目標而言,缺乏足夠數量的訓練正樣本與之匹配,因此也使用了更小的IoU閾值以提升小目標所對應的正樣本數量;

本文發現,尺度分佈不均衡問題在正負訓練樣本中都存在,group sampling恰好為此而生,專門解決該問題,並取得了不錯的效能;


3. Motivation: Scale Imbalance Distribution

本節進一步分析兩個影響檢測效能的因素:特徵金字塔上的多尺度特徵表達、不同尺度anchor間的正負樣本均衡;

文中使用ResNet-50主幹網 + top down + skip connections,如fig 3:

尺度不變人臉檢測:Group Sampling

各個block conv對應的輸出特徵表示為C2、C3、C4、C5,先透過1 x 1 conv歸一化feature map通道數,與上一層up-sampled操作後的特徵層做element-wise addition,輸出P2、P3、P4、P5等feature map(P5操作方式有點不同,不再贅述),Pi / Ci有相同的尺度,各個anchor尺度為:{16,32,64,128},長寬比:1,最後結合fig 1、fig 2,對比如下:

1 RPN:僅使用C4做人臉檢測,所有尺度anchor都在C4上分佈並提特徵,對應stride = 16;

2 FPN:經典的演算法,{P2、P3、P4、P5}上做人臉檢測,anchor尺度 = {16,32,64,128},對應stride = {4,8,16,32};

3 FPN-finest-stride:與FPN類似,但所有尺度anchor都只作用於P2上,anchor尺度 = {16,32,64,128},對應stride = {4,8,16,32};---- This is implemented by sub-sampling P2 for larger strides,還多了這麼一句話,費解;進一步上取樣P2?

4. FPN-finest:所有尺度anchor都只作用於P2上,各個anchor的stride = 4;

5. FPN-finest-sampling:與FPN-finest一致,但新增了group sampling,使得訓練階段不同尺度anchor上的正負樣本比例保持一致;


5個方案在wider face上使用相同的訓練、測試策略,並在val set上測試,得到的結論如下:

Using multiple layer features is little helpful

FPN、FPN-finest-stride(fig 2(b)、(c))差異在於:在單層feature map還是多層feature map分支上完成目標檢測,結果如table 1,FPN在easy / medium / hard上AP效能分別為90.9%、91.3%、87.6%,FPN-finest-stride分別為:90.4%、91.0%、87.1%,差異不大,說明兩個問題:

1 多尺度feature map上的人臉檢測對效能提升有限;

2 單尺度feature map上做人臉檢測也是可以的,效能是足夠的;

尺度不變人臉檢測:Group Sampling


Scale imbalance distribution matters

進一步對比FPN-finest-stride、FPN-finest,從fig 1中可看到二者區別:二者為不同尺度anchor設定的stride不一樣,後者保持stride = 4不變;從實驗結果table 1中有以下發現:

1 FPN-finest在easy / medium上效能很好,因為對比FPN-finest-stride,前者可以獲取更多的大尺度anchor參與訓練;

2 儘管各個金字塔層上都是stride = 4(anchor尺度為16 pixel的也是如此),但FPN-finest在hard上效能一般;

從fig 2中可知不同檢測演算法中,各個尺度anchor中正負樣本數所對應的比例,對應的結果如table 1,結論如下:

1 FPN、FPN-finest-stride效能相當,從fig 2(b)、(c)中可知,二者不同尺度anchor上正負樣本數量比例也類似,說明之前的一個假設是有道理的,即:在總體anchor數量相當,不同尺度anchor下正負樣本數量比例類似時,二者效能差異不大;

2 從fig 2(c)、(d)中可知,FPN-finest-stride、FPN-finest的不同尺度anchor間正負樣本的分佈比例是不均衡的,但二者分佈情況也存在很大的差異,FPN-finest-stride在小尺度anchor上有更多數量的負樣本,因此hard上效能也更好點、FPN-finest在大尺度anchor上有更多數量的正樣本,因此easy上效能更好點;

結論:檢測模型的效能,應該是有受到anchor內正負樣本數量不均衡的影響,這從fig 2(a)中RPN在大尺度anchor上,對比FPN-finest-stride有更多的正樣本數量,最終在easy上效能優於其2%,也可以得到證明;

受以上分析的啟發,本文提出group sampling方案來處理各個尺度anchor間正負樣本分佈不均衡的問題,從fig 2(e)中也可知,對比其他4個方案,FPN-finest-sampling在訓練階段得到的anchor間正負樣本比例明顯更加均衡,table 1中得到的效果也是最好的;


4. Group Sampling Method

anchor based人臉檢測器訓練階段的要點:將gt bbox、anchors按照IoU比例,對anchors劃分正負樣本標籤,本小節先介紹本文使用的anchor匹配策略,再介紹group sampling方案;


4.1. Anchor Matching Strategy

當前經典的gt bbox、anchor的兩步匹配方案:

1st-pass:每一個anchor與所有gt bbox計算一遍IoU,若IoU大於閾值λ1,則該anchor被劃為正樣本,小於閾值λ2,則被劃分為負樣本;--- 這種操作對某些小尺度gt bbox不利,因為可能某個小尺度gt bbox並不能匹配到合適的anchor;---- 可結合某些程式碼學習下,簡單點說就是,若anchor_i與gt bbox_big IoU_1 > λ1,且anchor_i與gt bbox_small IoU_2 > λ1,但IoU_1 > IoU_2,此時會優先匹配anchor_i與gt bbox_big IoU_1,二者相互配對,此時若gt bbox_small與其他任意anchor_j的IoU < λ1,此時就相當於沒有與gt bbox_small匹配的正樣本anchor了;再通俗點,anchor_i是女神,gt bbox_big IoU_1是高帥富,gt bbox_small IoU_2是高帥富三缺二,此時高帥富與女神配對是天經地義,高帥富三缺二就只能對女神望而興嘆了,其他任意anchor_j就是某個默默陪伴高帥富三缺二的妹紙,奈何人家不降低擇偶標準,也只能落花有意流水無情,gt bbox_small就只能這樣孤注身,所有anchor都不配對了;---- 當然了,現實情況並不是這樣,高帥富三缺二。。。嗯,理論上只要不缺錢,拿下女神並不是難題~~~ 跑偏了,收;

2nd-pass:進一步為1st-pass中未與anchor匹配的gt bbox(也即gt bbox_small)尋找匹配的anchor,下面會進一步介紹;

先做些定義:

{pi}_i = 1~n:anchor的定義,i:anchor的indx,n:所有尺度anchor的總數量;

{gj}_j = 1~m:gt bbox的定義,j:gt bbox的dinx,m:所有gt bbox的總數量;

匹配階段,先生成匹配矩陣M ∈ R^(n×m),表徵gt bbox與anchor的匹配關係,且M(i, j) = IoU(pi, gj);在1st-pass中,每個anchor pi與所有gt bbox匹配一波,以尋找最大IoU,表示為:C(i) = max(1≤j≤m) M(i, j),此時,pi對應的標籤L(i)為:

尺度不變人臉檢測:Group Sampling

λ1=0.6、λ2=0.4:預定義閾值,1:正樣本anchor,0:負樣本anchor,-1:未被gt bbox匹配的anchor,訓練階段棄用;

剛才提到了,在1st-pass階段,一些小尺度gt bbox可能不會匹配到任何anchor,2nd-pass就要避免此類悲劇的發生(也是本著對標註的gt bbox高效利用的原則,不然豈不是白白做標定了?make full use of all gt boxes to increase the number of positive training samples),那麼對任意未被匹配的gt bbox gj,若anchor pi同時滿足以下三個條件,也可以認為是匹配成功(三個條件,缺一不可):

1 該anchor pi此前未與其他gt bbox匹配;---- 煩請女神專一點,嚴禁腳踏兩隻船,高帥富三缺二卑微的尊嚴神聖不可侵犯;

2 IoU(pi, gj) ≥ λ2;---- 高帥富三缺二,你要是找不到女神就放低標準撒,還真準備單身一輩子啊;

3 j = argmax(1≤u≤m) IoU(pi, gu);---- 妹紙也可以權利反轉,找一個最適合的gt bbox gj匹配;


4.2. Group Sampling

anchor與gt bbox匹配後,作為訓練樣本的anchor間,存在以下兩種不平衡情況:

1 anchor內正負樣本數量不均衡:負樣本數量遠超正樣本數量,目標檢測任務中很常見,畢竟大部分割槽域都是背景;

2 各個尺度anchor間,正負樣本數量也不均衡:現有的gt bbox與anchor匹配策略,導致小尺度gt bbox要匹配合適的anchor,比大尺度gt bbox勢必要付出更多的艱辛與妥協;---- 心酸,屌絲就只配跪舔白富美,不配擁有完美的愛情;


問題1在之前已經被發現,並廣泛且深入地研究了,如OHEM,訓練階段控制正負樣本比例為1:3(按score排序),但問題2被研究得偏少;

那麼為了解決以上2個問題,group sampling(scale aware sampling strategy)應運而生,操作如下:

1 將所有參與訓練的anchors按其尺度,劃分為若干個groups;---- divide all the training samples into several groups according to the

anchor scale, i.e., all anchors in each group have the same scale;

2 對每個group內的訓練樣本做隨機取樣,確保數量相同,且每個sampled group內正負樣本比例1:3,若正樣本欠缺,那就提升負樣本的取樣數量,使得所有group間訓練樣本的數量保持一致;---- 這種情況下,anchor間正負樣本比例不會完全一致了,會有些許可接受的波動;


公式表示為,Ps、Ns:尺度 s 下,隨機取樣的正、負anchor樣本:

Ps ⊆ {pi|L(i) = 1, S(i) = s}

Ns ⊆ {pi|L(i) = 0, S(i) = s} ---- 比較好理解;

group sampling先確保|Ps| + |Ns| = N(常數:N),再在每個anchor尺度 s 上,確保3|Ps| = |Ns|,此時對每個尺度 s 而言,都能保證足夠數量、且均衡比例的正負樣本參與模型訓練;----- 整篇論文核心思想就這一部分,還是比較容易理解的;


Grouped Fast R-CNN

Fast R-CNN的2nd-stage中,得到RoIs後,透過RoI pooling提取特徵,再進一步做cls + reg,文中發現,各個RoIs尺度內,正負樣本分佈也是不均衡的(the scale distribution of the training samples for Fast RCNN is also unbalanced),也可以使用group sampling操作使得每個group內總訓練樣本數保持一致,且正負樣本比例1:3,實驗部分也證明Grouped Fast R-CNN是有效果的;---- anchor確實是有不同的尺度和分佈,但要看程式碼層面是怎麼操作的;


Relation to OHEM and Focal Loss

OHEM:bp操作中篩選top-k難分樣本參與模型引數更新;--- keep the top K samples with highest training loss for back propagation;

Focal Loss:給予每個訓練樣本一個動態調整的權重;--- give each sample a specific weight;

整體上就是,對難分樣本給予更高的權重,更多的關注度,對每個訓練樣本分別採用hard / soft manner(比較容易理解,OHEM是一刀切,focal loss按score動態地降低權重),也即implicitly / dynamic地處理資料不平衡問題,但group sampling屬於explicitly地處理資料不均衡的方案;


5. Training Process

介紹訓練資料集、損失函式、實現細節等;

Training dataset

wider face訓練+測試,FDDB測試,不再贅述;

Loss function

分類還是經典的softmax loss,迴歸採用了新的loss,替代Smooth L1 loss:IoU based loss,IoU least square loss:

尺度不變人臉檢測:Group Sampling

(pi, gj):匹配的anchor pi、gt bbox gj對;

對比smooth-L1 loss,新的損失函式直接最佳化的IoU ratio本身,這也是與我們按照IoU計算mAP的評估標準保持一致的(可參照IoU-Net),文中提到UnitBox中IoU loss function = - ln(IoU),但當IoU = 1時,UnitBox中IoU損失函式得到的梯度不為零(non-zero gradient,畫個ln(x)函式圖就明白了),但IoU least square loss不會,得到zero gradient,起碼網路收斂也會更穩定;

Optimization details

基於pytorch,使用torchvision的ResNet-50作為主幹網的預訓練模型,在wider face train set上訓練,lr、epoch、wd、syn SGD等引數參照論文;

資料增強:scale jitter + random horizontal flip,尺度擾動區間[1,8],從中隨機選擇數字n,影像將會按0.25 x n的比例做resize,再從resized後的影像中,randomly crop出一個子區域,確保其長寬不超過1200 pixels,最後加入到訓練資料集中;

預測:基於影像金字塔的多尺度測試,所有檢測結果合併後再做NMS,測試影像長邊尺度不超過3000 pixels;


6. Experiments

分析影響人臉檢測效能的因素,消融實驗證明group sampling的效能,並基於FPN finest-layer在FDDB、wider face上取得了sota;


6.1. Factors Affecting Detection Accuracy

對fig1、2中介紹的五個檢測器,做深入分析,五個檢測器主要有2點差異:

1 anchor放置於feature map的不同層上;

2 anchor在feature map上的stride不同;stride越小,feature map層數越低,一般配置的anchor數量也越少;feature map尺度也是與原圖尺度,按stride關係對應的,對FPN-finest-stride,特徵圖P2上對應的anchor尺度 = {16, 32, 64, 128},等價於原圖上stride = {4, 8, 16, 32};

評估標準:在easy / medium / hard set上計算AP,但並不能反映檢測器在各個特定目標尺度範圍內的效能(原因是模型測試一般使用到了影像金字塔,我們無法確定一個128 x 128 pixel的人臉,是被預定義的128 pixel anchor檢測到的,還是被影像金字塔中縮小版影像的16 pixel anchor檢測到的),為了評估每個sub-detector的效能,分別對應@16,@32,@64,@128,結果如table 1:

尺度不變人臉檢測:Group Sampling

結論如下:

Imbalanced training data at scales leads to worse (better) accuracy for the minority (majority)

anchor訓練樣本各個尺度間,正負樣本數量均衡很重要,正樣本數量越多,效能會更好點;FPN-finest、FPN-finest-stride唯一的差異在於anchor尺度(fig 2(c)、(d)),這樣每個anchor尺度上對應的anchor數量不一致,正負樣本比例也不一致,scale = 16下,stride一致,anchor數量一致,但table 1中@16對應的效能卻不一致(65.6% 、72.2%),原因如fig 2,FPN-finest中@16下正樣本數量對比其他尺度比較不足,效能自然比較弱;但在FPN-finest-stride中,@16下正負樣本數量都比其他尺度多,效能自然好點;


Similar anchor distribution, similar performance

各個anchor尺度下,正負樣本分佈比例類似,效能也會類似;FPN、FPN-finest-stride效能接近,二者唯一差異體現在用單層、還是多層feature map做目標檢測,從結果上來看,多層feature map上的檢測並不能帶了效能上的提升,那麼另一個問題:是不是各個anchor尺度間,相似的anchor正負樣本比例分佈,導致了相似的效能?再對比RPN、FPN-finest,二者有一處比較類似:anchor大尺度下,正樣本數量比較多,那麼對比FPN,在@16下效能都比較弱,但@128下效能都比較強,也同樣能說明相似的anchor正負樣本數量分佈,會有相似的效能;---- 這個例子的解釋,我覺得有點牽強;


Data balance achieves better result

各個anchor尺度下,,正負樣本分佈均衡會帶來更好的效能;fig 2中(a) ~ (d)四個演算法都存在各個尺度anchor間正負樣本分佈不均衡的問題,FPN-finest-sampling對比FPN-finest有更均勻的正負樣本分佈,從table 4中也可以發現效能是更好的;


6.2. Ablation Experiments

The effect of feature map

尺度不變人臉檢測:Group Sampling

table 2比較了使用不同feature map做人臉檢測 + 是否使用group sampling下的效能,結論如下:

1 top down + lateral connection操作對模型效能有提升,從P3 / P4效能優於C3 / C4可知;

2 若使用高解析度的低層feature map做人臉檢測,會生成更多小尺度的訓練樣本,這有助於小尺度人臉的檢測;

3 group sampling對所有feature map上做人臉檢測的效能都有提升;本文最終在P2上輸出檢測結果;


The effect of the number of training samples N

尺度不變人臉檢測:Group Sampling

在每個anchor尺度下,隨機選擇N個訓練樣本參與模型訓練,如fig 4,結論如下:

1 N越大,模型效能越好;

2 N大於2048後,模型效能保持平穩,不再提升;

3 FPN、FPN-finest有點例外,隨著N數量增大,效能下降了,原因也很簡單,此時正負樣本數量更不均衡了;


The effect of the proposed loss

尺度不變人臉檢測:Group Sampling

檢測器使用FPN-finest-sampling,對比兩個經典loss + 本文提出的least square IoU loss,本文提出的loss更牛逼,同時也是因為直接最佳化的IoU,與評估標準mAP計算依照IoU方式保持一致,後兩者效能明顯優於Smooth L1 loss;


Comparison with OHEM and Focal Loss

本小節對比OHEM、Focal loss、group sampling三種方案,都用於處理訓練資料不平衡;

OHEM:在所有訓練樣本中,動態選擇B個highest loss樣本參與模型引數更新,實驗中設定B = 1024;

Focal Loss:與原論文保持一致,α = 0.25、γ = 2;

尺度不變人臉檢測:Group Sampling

可以發現三者對模型效能提升都有幫助,特別是對小尺度人臉效能提升明顯,但group sampling對模型在所有尺度上的效能提升是非常具有持續性和一致性的,最終All上效能也最好的;


6.3. Grouped Fast R-CNN

尺度不變人臉檢測:Group Sampling

table 5使用FPN-finest-sampling為baseline,可以發現使用Fast R-CNN後效能有所提升,group sampling進一步提升模型效能,並在wider face hard上取得sota,充分說明二者可以完美結合;


7. Comparison with State-of-the-Art

與其他sota在FDDB、wider face上比較一下;

wider face:

尺度不變人臉檢測:Group Sampling

使用group sampling策略訓練的模型效能如fig 5,在hard set上領先還是蠻多的;

FDDB:

尺度不變人臉檢測:Group Sampling

採用S3FD原始碼中提供的工具,將group sampling模型輸出的矩形bbox轉換為橢圓形bbox,最終在dis-continuous score上的效能如fig 6,ROC曲線面積最大,是sota;


8. Conclusion

1 本文仔細分析了影響人臉檢測效能的因素,發現人臉檢測任務中,根本不需要利用多層次的特徵金字塔上的多分支檢測,僅使用單層feature map做人臉檢測也能達到sota,並定位到對於大尺度跨度範圍內的人臉,影響檢測器的效能之處在於訓練樣本的不均衡問題,特別是不同人臉尺度上的正負樣本均衡問題,才是導致模型效能有無提升的關鍵;

2 本文提出group sampling策略,將anchors按尺度劃分為不同的groups裡面,使得訓練階段每個group內正負樣本的數量、比例大致是相同的,核心思想可參照4.2小節;

3 文中僅使用FPN最後一層特徵(last layer of FPN as features,如fig 1,指的是P2的finest layer),未使用影像 / 特徵金字塔,再結合group sampling,就能取得sota,實驗 + 分析部分,也能充分證明group sampling能帶來效能的提升,最終無需bells and whistles,就在FDDB、wider face上取得了sota;

4 進一步地,將來會繼續探索group sampling在通用目標檢測器上的有效性;


論文參考

http://openaccess.thecvf.com/content_CVPR_2019/papers/Ming_Group_Sampling_for_Scale_Invariant_Face_Detection_CVPR_2019_paper.pdf

程式碼:

暫未公佈(until 2019-09-10);

相關文章