主講人:袁野 | 曠視研究院研究員屈鑫 編輯整理量子位 出品 |
12月27日晚,量子位·吃瓜社聯合Face++論文解讀系列第四期開講,本期中曠視(Megvii)研究院解讀了近期發表的Face Attention Network論文。
本篇論文所提出的Face Attention Network,是基於分層注意力機制的人臉圖像區域檢測器,能夠在不影響速度的情況下顯著提高被遮擋的人臉檢測問題的召回率。
本期主講人為曠視研究院研究員袁野,同時也是論文共同一作,wider face legend board第一。主要負責face detection工作。
量子位應讀者要求,將精彩內容整理如下:
△ 分享視頻回放
這篇論文中主要提出的是如何設計和使用Attention的機制去解決大尺度變化下的遮擋問題。論文通過精心設計的anchor setting和anchor level 的attention機制能夠在不影響速度的情況下顯著提高被遮擋的人臉的召回率。
Face detection的主要背景
從背景上來看,對於Face的檢測,跟General detection一脈相承。從是否需要提取proposal和是否需要對這個proposal進行二次操作的角度來簡單劃分的話,主要分為One stage detector和Two stage detector。
這兩個方法總體來說是各有利弊。One stage detector主要的優勢是快速,這個主要是從工程上來說,假如你在手機上從一個256甚至更高維度的1024的 channel上直接crop一個feature出來,是一個相當耗時的工作,所以one stage天然就有很好的速度優勢。
但是one stage有也存在不足,它由於沒有後面refine的過程,在兩個人臉或者是兩個物體挨得比較近,或者是難以辨認的情況下,one stage通常會在性能上會有一定的劣勢。
Face detection的挑戰
在Face detection上面,相比於其他有哪些特別困難的地方?
首先是scale,由於face自身的特殊性,不論是通用物體或者行人檢測,通常情況下,我們只是在意比較近處的物體。scale的變化遠遠沒有人臉這麼大。
其次是occlusion,也就是遮擋問題。遮擋問題簡單地分為兩部分:物體的遮擋;face的自遮擋。識別戴頭巾或者口罩的人臉,這是一個典型的物體遮擋的問題。如果兩個人挨得特別近,以至於把後面的人擋住了一部分,但是勉強還是可以看到另一部分,這就是face的自遮擋。
那麼去解決這個遮擋問題,我們的motivation是什麼?
對於遮擋的物體,我們首先需要確定這是不是一個臉,或者是至少要確定這是不是一個頭。這就需要context信息,例如能夠看到更多的地方,能看到身軀或者是看到頭的整個區域,這樣就有助於判斷。這些信息可以通過合理的Anchor setting或者是合理的大感受野去隱式地學到。
此外,只看context信息也會產生一些誤導,所以需要可見的部分來輔助確認這塊區域真的是人臉,而不是其他的東西。這個時候我們可以考慮用segmentation或者是attention的機制去處理。
那麼基於這個motivation應該怎麼去設計網絡?
這張圖是我們主要的網絡設計構架。從網絡設計構架上面來說,前面這個紅色和這個白色的區域,可以理解為一個FPN的結構,可以復用多層的信息,通過合理的anchor設計,保證每個anchor都有較大的感覺野,隱式地學習context信息。(c)這個部分是一個attention的子網絡,我們在得到feature之後,會另開一支去學習attention,之後對attention做一個E指數的操作乘到原來的feature map上面,加強可見區域信息。
後面是一個類似於fast R-CNN兩支操作:一支做classification,一支做regression。 Anchor setting設置可以保證每個人臉都有足夠的感受野以及足夠的context信息。底下這個attention的subnet,它可以通過有監督的信息,學到visible的information,也就能提高對遮擋物體檢測的能力。
anchor setting
先統計一下Wider face本身,大概80%以上的人臉其實都是集中在16 pixel到406 pixel這樣的量級上面,還有約10%的量級是在8pixel到16pixel。
所以我們在設計上的時候,需要考慮到如何讓anchor去覆蓋這麼大的一個區域。Ratio上的設置,我們選擇了1和1:1.5,其實是潛在地考慮了正臉和側臉兩種情況,因為通常情況下一個face,在正臉的情況下,1:1都是可以接受的。側臉的情況下,可以近似到1:1.5。
P3、P4、P5、P6、P7是分別是表示我們FPN的各個layer,P3表示的是一個淺層的信息,然後P7表示的是越深層的信息。
在感受野上面,feature的感受野是anchor的4倍左右,例如P3層達到了接近99的水平,是P3 anchor的四倍大小。這樣就可以提供足夠的context信息來保證能夠檢測出輪廓。鋪設密度上,沒有選擇傳統的每一層只有一個anchor的鋪設方式,採用每層3個scale,以2 ^ -1/3 步進。如果每層只鋪設一個anchor,就會導致個別的ground truth,分配不到一個很好的anchor。
當然anchor也不是鋪設得越密越好。如果把anchor鋪設得更密一些,比如每層每個layer鋪4個anchor,這樣會導致的有很多的FP,最終導致性能下降。
還有一個問題是:我們統計出來的anchor只有16到406,而wider face上有大概10%的是在8到16或者是更低的程度,我們可以放棄這一部分嗎?
如果這個face在8pixel量級的情況下,我們把它放大出來,圖像就很糊,基本上也已經沒有什麼紋理的信息。加入訓練會引來大量的噪聲,反而會導致detector性能的下降。就實驗結果來看下降還是比較明顯的,大概會下降2到3個點。
Attention的操作
我們之前說過,只有context的信息,很難分辨這個物體到底是不是一個被遮擋人臉。這個時候需要加入一些attention,或者是加入一些segmentation,把這些區域給學出來,那麼到底怎麼學?
首先ground truth只有bounding box。那麼我們就採用將bounding box的區域填1,直接作為segmentation去學。由於大量的ground truth是沒有遮擋的,當發生遮擋時,最後學出來的segmentation會對於這些未遮擋的信息更加敏感。
其次還有一個細節,在我們的attention網絡裡面,做完attention之後,不是簡單的點乘到原來的feature map上面,而是先做了一個E指數的操作,再去點乘到feature map上面。這樣做就不是只保留attention高量的部分,而是對高量的部分做一些增強,這樣能夠很好地保留它原有的context信息,同時也能夠突出它自身那個可見區域的信息。
然後是attention機制的整體框架。我們相比於其他的attention來說,attention不僅是有監督的,同時不同的層賦予不同的anchor level的監督信息。
我們來簡單看一下左邊這張圖,是unsupervised的attention map,unsupervised attention基本上是在隨機地學,這對我們來說就沒有什麼意義。右邊這張圖,是加了supervised的attention之後,對於一個遮擋的物體,它能夠很好地focus到可見的部分。
其次,我們看這張圖,左邊是全部採用統一監督信號的結果,這表示如果我們把所有的layer都放上同樣的監督信號,網絡主要focus的是一些比較顯著的臉;對於一些比較小的人臉學習的並不理想。右邊是採用了anchor level attention的結果,不同的layer根據anchor去生成不同的ground truth。這保證在不同的layer上面,它focus的地方是不一樣的,就減輕了這些大臉對小臉的幹擾。
然後這是Ablation study的信息。從base model來看,它只有63點多,然後通過修正anchor,它能夠達到79.8的水平。加入attention之後它會有一個80.9的漲幅。後面是scale test的一些技巧,最終可以達到88.8,相比於市面上最好的結果也要高出一個多點。
還有我們在兩個主要數據集上的表現:在widerface數據集上,我們比第二名高了3個點,比現今legend board上第一高1.2個點。在mafa這個遮擋數據集上,我們比之前的AP提升了接近11個點左右。
接下來是Wider face上的檢測結果:不論是尺度變化比較大,還是遮擋比較嚴重的情況都能夠有很好的結果。
接下來是我們在MAFA上的處理的結果,也可以看到對於這些口罩或者是在被遮擋的問題上都能處理得還不錯。
簡單看一下之前做的一個小demo。這是在網上下載的北京地鐵的一個日常的視頻,可以看到我們的detect框在單個人上面是相當穩定的,即使在人流比較密集的情況,畫質不好的情況下,我們依然能夠做到挺不錯的。
Paper總結
簡單對paper做一些總結。
對於大尺度變化以及高遮擋的問題,detector是一個十分艱巨的任務。
對於這樣的任務,首先需要保證它有足夠的感受野來提供context信息,尤其是對小臉或者是遮擋的臉來說。
同時在anchor assign的策略上,比較密集的合理的分布,能夠保證ground truth都有一個很好的proposal。
Attention的機制可以幫助網絡學到很好的可見區域。
最後是Multi anchor-level attention,這樣能夠讓不同的layer去學face scale的information,使小臉更好地得到學習。
除總結之外,還有一些展望。
剛剛看到的視頻上存在有很多的FP,這其實是一個很難調和的問題。比如說在識別小臉這種特別艱巨的問題的時候,為了保證recall,可能就會引入大量的anchor和大量的機制,這樣就會導致FP激增。對於這樣的問題還需要進一步的探索。
現在的Face Attention Network,它的base model是一個很大的model,如何小型化,也是我們下一步將要探索的一個地方。
一則招人硬廣:希望加入曠視科技(Megvii)一起登上CV巔峰的同學可以投簡歷至俞剛:,長期招聘算法實習生。實習優秀者,更有直接跳過面試階段,入職Megvii研究院的機會。
Q&A
小的人臉比較模糊,為了防止引入一些噪聲,就把這些數據給去掉了,那這些小的人臉到底有多小,是怎麼定義的?
一部分是實驗本身得出來的結論,另一方面是本身我們是在8倍pixel上面去做的classification,對於8倍pixel以下的人臉,他在8倍的feature上,它可能最後就變成了1個pixel到2個pixel,本身這個任務就很艱難地完成,所以我們當時就簡單地先按8 pixel來去做,後來實驗表明的確這是一個很合理的setting。
Attention的機制和分割的聯繫?
Segmentation可以理解為一個簡單的per pixel的classification,它有很好的標註信息。但是我們的attention是一個隱式的學習的過程,也就是說attention本身在ground truth的時候,給它大量無遮擋的臉和一些正臉的圖像,讓它去學習。我們在COCO上面其實是用到了segmentation,加入了segmentation之後會有一個很好的漲點。
如果技術落地的話,對哪些場景比較合適?
目前我們發paper的這個model是很難去做一些很實時的東西。以現在paper角度上來看,它可以做一些這樣任務:安防入庫;錄入其他數據。也可以在雲端上去做。如果說它可以小型化,就有很多很開闊的場景,比如說抓拍機,一些人臉解鎖,無人化的超市等等。
框架是怎樣的?
這個框架應該算one stage的detector。因為後面沒有接ROI pooling或者是它之類的這些衍生物,主要是考慮到本身對於速度的要求。加上ROI pooling之後,對高feature數進行crop 的操作會非常耗時。所以我們就採用了one stage的detector。
相關學習資源
以上就是此次曠視研究院袁野帶來分享的全部內容。在量子位界面回復「180107」可獲得完整版PPT以及視頻回放連結。
第一期物體檢測回顧:曠視研究院解讀COCO2017物體檢測算法奪冠論文
第二期人體姿態估計回顧:曠視研究院詳解COCO2017人體姿態估計冠軍論文
第三期Light-Head R-CNN回顧:曠視研究院解讀Light-Head R-CNN:如何在物體檢測中平衡精準度和速度
— 完 —
加入社群
量子位AI社群13群開始招募啦,歡迎對AI感興趣的同學,加小助手入群;
此外,量子位專業細分群(自動駕駛、CV、NLP、機器學習等)正在招募,面向正在從事相關領域的工程師及研究人員。
進群請加小助手,並務必備註相應群的關鍵詞~通過審核後我們將邀請進群。(專業群審核較嚴,敬請諒解)
誠摯招聘
量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位對話界面,回復「招聘」兩個字。
量子位 QbitAI · 頭條號籤約作者
'' 追蹤AI技術和產品新動態