該模型hybrid-resolution model (HR),來自《finding tiny faces》,時間線爲2016年12月網絡
雖然你們在目標識別上有了較好的進步,但是檢測小物體仍然是一個極具挑戰的事情。對於幾乎全部當前的識別和目標檢測系統而言,尺度不變性是一個必須的特性。可是從實際角度來講,尺度不變性也只是必定程度的不變性,由於對於一個3像素的和300像素的縮放來講,的確相差太大了。
而如今大多數的目標檢測任務使用的無外乎2種形式來解決尺度不變性問題:ide
- 基於一個圖像金字塔進行窗口滑動的方式,如MTCNN;
- 基於ROI-pooling方式進行區域分類,如fast-rcnn。
其實,咱們主要是但願有一個小模板可以檢測小模型,大模板可以檢測大模型,那麼這時候就涉及到須要針對不一樣尺度訓練不一樣的檢測器,並且在預測的時候也得處理屢次,而且也缺乏對應的數據集。因此做者這裏爲了權衡之間的問題,經過訓練一個CNN,並基於不一樣的網絡層提取對應的feature map(就和ssd同樣)。不過這樣雖然對大目標有較好效果,對於小的人臉,還須要其餘考慮。
函數
- 圖像金字塔方法:如(a),傳統的方法是創建一個單尺度模板,將其用在圖像金字塔上面;
- 不一樣尺度採用不一樣檢測器:如(b),而若是想要利用到不一樣分辨率上的信息,那麼須要基於不一樣的對象尺度構建不一樣的檢測器(如在一張圖片上,檢測小臉的一個檢測器,檢測大臉的一個檢測器),而這樣的方法在極端對象尺度上仍是會失敗,由於可能這個尺度的根本沒出現過在訓練集中;
- 本文方法:如(c)做者先用粗略的圖像金字塔去抓取極端的尺度變化。而後爲了提高關於小臉的檢測,增長了額外的上下文信息,即經過一個固定大小的感覺野在全部特定尺度上進行抓取,如(d)。而後如(e),基於同一個深度模型,在網絡不一樣層上提取的特徵來定義模板。
ps:在一個網絡模型中,採用一樣大小的劃框在多個feature map上進行局部採樣,這樣造成的特徵叫「超級列(hypercolumns)」,被用在語義分割中《Hypercolumns for object segmentation and fine-grained localization》。測試
要說到尺度不變性,還得追述到SIFT模型,不過隨着fast-rcnn等提出的ROI pooing等深度網絡的興起,還有近來基於不一樣網絡層提取多種尺度信息的SSD(其實就是將圖像金字塔轉換成特徵層金字塔)。做者也有了一些想法和靈感。
做者這裏基於ResNet-50做爲基底模型,並提取每一個殘差快最後一層的feature map做爲特徵,即(res2cx,res3dx,res4fx,res5cx),這裏簡寫成(res2,res3,res4,res5)。經過對不一樣層進行超級列(中央凹)等操做,並基於提取的特徵作二值熱力圖預測(即結果也是一個map,其中每一個值表示以其爲中心的人臉出現的置信度)es5
固定大小的劃框在多層map下的變化
首先設計了一個實驗,首先設計一個固定大小的劃窗,而後不斷的增長層上的區域,從而達到增長感覺野的目的:
spa
這裏還是基於固定大小的劃框,而後是否採用中央凹(多層通道)的結果,能夠看出若是採用了中央凹,那麼就能夠提供更多信息,從而檢測效果上升;若是沒有采用,只是考慮感覺野的增大,發現對大人臉效果是有上升,不過對小人臉卻有過擬合的風險。設計
總結:經過感覺野的增大,且保證劃框恰好框住對象,此時獲得的效果最好,然而固定劃框若是框多了,或者少了,會形成過擬合或者欠擬合。若是此時增長多通道的特徵,能夠起到正則效果,並下降框住太多背景噪音而形成的過擬合,這樣就解決了劃框大小選擇的問題,從而不須要不一樣尺度目標都去設計不一樣的檢測模型了3d
做者還作了實驗,如何讓模板去對應不一樣尺度的目標,
對象
- 他假設採用了一箇中等尺寸的模板(50x40),而後去找小的人臉(25x20),若是進行放大兩倍,那麼結果就從原來的69%上升到75%;
- 反過來,若是當前中等尺寸模板大小爲125x100,去找大的人臉(250x200),將這張圖片縮小兩倍,結果也從原來的89%上升到94%。
能夠看出,若是若是模板的大小和人臉大小基本一致,那麼就能提高檢測結果。
做者猜想,這主要就是基於不一樣的尺度目標下,訓練數據不充分的緣故。
blog
那麼如今問題來了,如何實現多個目標尺度上採用不一樣的模板呢?
- 如圖7所示,假設咱們定義模板爲\(t(h,w,\sigma)\);並假設是用來檢測分辨率爲\(\sigma\)的目標尺度爲\((h/\sigma,w/\sigma)\),好比圖7中,用\(t(250,200,1)\)和\((t(125,100,0.5))\)能夠同時去檢測\(250 \times 200\)的人臉。
那麼問題又來了,怎麼設定模板大小?
- 假設咱們的訓練集有圖像和對應的邊界框,那麼先採用聚類的方式去獲取其中的對象尺度,這裏採用的距離測度是:
\[d(s_i,s_j)=1-J(s_i,s_j)\]
這裏\(s_i=(h_i,w_i)\)和\(s_j=(h_j,w_j)\)是一對邊界框,\(J\)表示標準的jaccrad類似度(IOU)。
如今,對於每一個對象尺度\(s_i=(h_i,w_i)\),咱們想知道\(\sigma_i\)設多大合適呢?
- 經過多任務模型方法,直接將每一個\(\sigma \in \Sigma\)一塊兒作目標函數;並對每一個對象尺度提取最大的,如圖8所示
如圖8所示,對於每一個\((h_i,w_i)\)的最優\(\sigma_i\),咱們用一個多任務模型去訓練一個混合分辨率(HR),在實測中也符合因此曲線的上限。有趣的是,的確存在不一樣策略下的天然懲罰:- 爲了找到大目標(高度超過140像素),使用2X進行縮小;
- 爲了找到小目標(小於40像素),使用2X進行放大;
- 不然就是用1X的分辨率。
咱們的結果也證實了以前關於Imagenet統計的猜想。
剪枝
上面提到的(hybrid-resolution,HR)中仍是有一些冗餘的。例如:模板(62,50,2)能夠用來尋找31x25的人臉,但是他同時也和尋找64x50的人臉的模板(64,50,1)相沖突了。如圖9,冗餘刪除以後,甚至有點小提高。本質來講,咱們的模型能夠進一步減小到只包含幾個具體尺度模板的集合,並在一個粗粒度的圖像金字塔上作計算。