谷歌公布亞毫秒級(jí)人臉檢測(cè)算法 人臉檢測(cè)又一突破
谷歌近日發(fā)布了一款專為移動(dòng) GPU 推理量身定制的輕量級(jí)人臉檢測(cè)器—;—;亞毫秒級(jí)的人臉檢測(cè)算法 Blaze Face。它能夠在旗艦設(shè)備上以 200~1000+ FPS 的速度運(yùn)行,并且可以應(yīng)用在諸多需要快速準(zhǔn)確的識(shí)別出人臉區(qū)域的任務(wù)中,例如:2D/3D 面部關(guān)鍵點(diǎn)識(shí)別與幾何評(píng)估、面部特征和表情分類以及面部區(qū)域分割等。谷歌發(fā)表了相關(guān)論文介紹了該研究成果,雷鋒網(wǎng) AI 科技評(píng)論將其編譯如下。
BlazeFace 簡(jiǎn)介
近年來(lái),通過(guò)對(duì)深度神經(jīng)網(wǎng)絡(luò)中各種架構(gòu)的改進(jìn),我們已經(jīng)可以實(shí)現(xiàn)實(shí)時(shí)目標(biāo)檢測(cè)。在移動(dòng)應(yīng)用程序中,實(shí)時(shí)目標(biāo)檢測(cè)通常是視頻處理流程中的第一步,接著是各種特定任務(wù)組件,例如分割,跟蹤或幾何推理。因此,目標(biāo)檢測(cè)模型推理必須盡可能快地運(yùn)行,其性能最好能夠達(dá)到遠(yuǎn)高于標(biāo)準(zhǔn)的實(shí)時(shí)基準(zhǔn)。
我們提出了一種名為 BlazeFace 的新面部檢測(cè)框架,該框架是在單鏡頭多盒檢測(cè)器(SSD)框架上針對(duì)移動(dòng) GPU 推理進(jìn)行的優(yōu)化。我們的主要?jiǎng)?chuàng)新包括:
1、有關(guān)于推理速度
一個(gè)專為輕量級(jí)目標(biāo)檢測(cè)而設(shè)計(jì)的在結(jié)構(gòu)上與 MobileNetV1/V2 相關(guān)的非常緊湊的特征提取器卷積神經(jīng)網(wǎng)絡(luò)。
一種基于 SSD 的新型 GPU-friendly anchor 機(jī)制,旨在提高 GPU 利用率。Anchors(SSD 術(shù)語(yǔ)中的先驗(yàn))是預(yù)定義的靜態(tài)邊界框,作為網(wǎng)絡(luò)預(yù)測(cè)調(diào)整和確定預(yù)測(cè)粒度的基礎(chǔ)。
2、有關(guān)于推理效果
一種替代非最大抑制的聯(lián)合分辨率策略,可在多預(yù)測(cè)之間實(shí)現(xiàn)更穩(wěn)定、更平滑的聯(lián)系分辨率。
基于 AR 的人臉檢測(cè)
雖然該框架適用于各種目標(biāo)檢測(cè)任務(wù),但在本文中,我們致力于探討手機(jī)相機(jī)取景器中的人臉檢測(cè)問(wèn)題。由于不同的焦距和捕獲物體尺寸,我們分別為前置和后置攝像頭構(gòu)建了模型。
除了預(yù)測(cè)軸對(duì)齊的面部矩形外,BlazeFace 模型還生成了 6 個(gè)面部關(guān)鍵點(diǎn)坐標(biāo)(用于眼睛中心、耳、嘴中心和鼻尖),以便我們估計(jì)面部旋轉(zhuǎn)角度(滾動(dòng)角度)。這樣的設(shè)置使其能夠?qū)⑿D(zhuǎn)的面部矩形傳遞到視頻處理流程的后期任務(wù)特定階段,從而減輕后續(xù)處理步驟對(duì)重要平移和旋轉(zhuǎn)不變性的要求。
模型結(jié)構(gòu)與設(shè)計(jì)
BlazeFace 模型架構(gòu)圍繞下面討論的四個(gè)重要設(shè)計(jì)考慮因素而構(gòu)建。
1、擴(kuò)大感受野
雖然大多數(shù)現(xiàn)代卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)(包括 MobileNet,https://arxiv.org/pdf/1704.04861.pdf )都傾向于在模型圖中都使用 3 x 3 卷積核,但我們注意到深度可分離卷積計(jì)算是由它們的點(diǎn)態(tài)部分主導(dǎo)。在 s×s×c 輸入張量上,應(yīng)用可分離卷積操作,其中,k×k 的深度卷積涉及 s^2ck^2 次乘加運(yùn)算,而后續(xù)的 1×1 卷積到 d 個(gè)輸出通道由 s^2cd 次乘加運(yùn)算組成,是深度階段的 d /(k^2)倍。
實(shí)際上,在具有金屬外殼的 Apple iPhone X 上,16 位浮點(diǎn)運(yùn)算中的 3×3 深度卷積對(duì)于 56×56×128 的張量需要花費(fèi) 0.07 ms,相比之下 128 到 128 通道的 1×1 卷積運(yùn)算會(huì)慢 4.3 倍,即后續(xù)的點(diǎn)卷積操作需要 0.3 毫秒(由于固定成本和存儲(chǔ)器訪問(wèn)因素導(dǎo)致的純算術(shù)運(yùn)算計(jì)數(shù)差)。
該觀察表明增加深度部分的核尺寸性價(jià)比更高。我們?cè)谀P图軜?gòu)中使用 5×5 內(nèi)核,這樣使得感受野達(dá)到指定大小所需的 bottleneck 數(shù)量大大減少,得到的 BlazeBlock 有下圖所示的兩種結(jié)構(gòu):
圖 1 單個(gè) BlazeBlock (左) 與 雙 BlazeBlock (右)
2、特征提取器
對(duì)于具體的例子,我們專注于前置攝像頭模型的特征提取器。該特征提取器必須考慮較小范圍的目標(biāo)尺度,因此它具有較低的計(jì)算需求。提取器采用 128×128 像素的 RGB 輸入,包括一個(gè) 2D 卷積和 5 個(gè)單 BlazeBlock 和 6 個(gè)雙 BlazeBlock 組成,完整布局見下表。最大張量深度(通道分辨率)為 96,而最低空間分辨率為 8×8(與 SSD 相比,它將分辨率一直降低到 1×1)。
圖 2 BlazeFace 特征提取器的網(wǎng)絡(luò)結(jié)構(gòu)
3、Anchor 機(jī)制
類似 SSD 的目標(biāo)檢測(cè)模型依賴于預(yù)定義的固定大小的基礎(chǔ)邊界框,稱為先驗(yàn)機(jī)制,或 Faster-R-CNN 術(shù)語(yǔ)中的錨點(diǎn)。為每個(gè)錨預(yù)測(cè)一組回歸(可能還包括分類)參數(shù),例如中心偏移量和尺寸調(diào)整。它們用于將預(yù)定義的錨位置調(diào)整為緊密的邊界矩形。
通常的做法是根據(jù)目標(biāo)比例范圍在多個(gè)分辨率級(jí)別定義錨點(diǎn),同時(shí)下采樣也是計(jì)算資源優(yōu)化的手段。典型的 SSD 模型使用 1×1,2×2,4×4,8×8 和 16×16 特征映射大小的預(yù)測(cè)。然而,金字塔池化網(wǎng)絡(luò) PPN 架構(gòu)(https://arxiv.org/pdf/1807.03284.pdf)的成功意味著在特征圖達(dá)到某個(gè)特征映射分辨率后,將產(chǎn)生大量額外的計(jì)算。
相比于 CPU 計(jì)算,GPU 獨(dú)有的關(guān)鍵特性是調(diào)度特定層計(jì)算會(huì)有一個(gè)顯著的固定成本,這對(duì)于流行的 CPU 定制架構(gòu)固有的深度低分辨率層而言非常重要。例如,在一個(gè)實(shí)驗(yàn)中我們觀察到 MobileNetV1 推理時(shí)間需要 4.9 毫秒,而在實(shí)際 GPU 計(jì)算中花費(fèi) 3.9 毫秒。
考慮到這一點(diǎn),我們采用了另一種錨定方案,該方案停留在 8×8 特征圖尺寸處而無(wú)需進(jìn)一步下采樣(圖 2)。我們已經(jīng)將 8×8,4×4 和 2×2 分辨率中的每個(gè)像素的 2 個(gè)錨點(diǎn)替換為 8×8 的 6 個(gè)錨點(diǎn)。由于人臉長(zhǎng)寬比的變化有限,因此發(fā)現(xiàn)將錨固定為 1:1 縱橫比足以進(jìn)行精確的面部檢測(cè)。
圖 3 錨點(diǎn)計(jì)算,SSD(左)與 BlazeFace(右)
4、后處理機(jī)制
由于我們的特征提取器未將分辨率降低到 8×8 以下,因此給定目標(biāo)重疊的錨點(diǎn)數(shù)量會(huì)隨目標(biāo)尺寸的增加而顯著增加。在典型的非最大抑制方案中,只有一個(gè)錨點(diǎn)被選中作為算法的輸出。這樣的模型應(yīng)用于后續(xù)視頻人臉預(yù)測(cè)時(shí),預(yù)測(cè)結(jié)果將在不同錨之間波動(dòng)并且在時(shí)間序列上檢測(cè)框上持續(xù)抖動(dòng)(人類易感噪聲)。
為了最小化這種現(xiàn)象,我們用一種混合策略代替抑制算法,該策略以重疊預(yù)測(cè)之間的加權(quán)平均值估計(jì)邊界框的回歸參數(shù),它幾乎不會(huì)產(chǎn)生給原來(lái)的 NMS 算法帶來(lái)額外成本。對(duì)于人臉檢測(cè)任務(wù),此調(diào)整使準(zhǔn)確度提高 10%。
我們通過(guò)連續(xù)輸入目標(biāo)輕微偏移的圖像來(lái)量化抖動(dòng)量,并觀察模型結(jié)果(受偏移量影響)如何受到影響。在聯(lián)合分辨率策略修改之后,抖動(dòng)量(定義為原始輸入和移位輸入的預(yù)測(cè)之間的均方根差)在我們的前置攝像頭數(shù)據(jù)集上下降了 40%,在包含較小人臉的后置攝像頭數(shù)據(jù)集上下降了 30%。
實(shí)驗(yàn)
我們?cè)?66K 圖像的數(shù)據(jù)集上訓(xùn)練我們的模型。為了評(píng)估實(shí)驗(yàn)結(jié)果,我們使用了由 2K 圖像組成的地理位置多樣數(shù)據(jù)集。
對(duì)于前置攝像頭模型,它只考慮占據(jù)圖像區(qū)域的 20%以上的面部,這是由預(yù)期的用例決定的(后置攝像頭型號(hào)的閾值為 5%)。
回歸參數(shù)誤差采用眼間距離(IOD)進(jìn)行尺度不變性歸一化,中值絕對(duì)誤差為 IOD 的 7.4%。通過(guò)上述程序評(píng)估的抖動(dòng)度量是 IOD 的 3%。
圖 4 顯示了所提出的正面人臉檢測(cè)網(wǎng)絡(luò)的平均精度(AP)度量(標(biāo)準(zhǔn) 0.5 交叉聯(lián)合邊界框匹配閾值)和移動(dòng) GPU 推理時(shí)間,并將其與基于 MobileNetV2 的目標(biāo)檢測(cè)器(MobileNetV2-SSD)進(jìn)行了比較。我們?cè)?16 位浮點(diǎn)模式下使用 TensorFlow Lite GPU 作為推理時(shí)間評(píng)估的框架。
圖 4 前置相機(jī)人臉檢測(cè)性能
圖 5 給出了更多旗艦設(shè)備上兩種網(wǎng)絡(luò)模型的 GPU 推理速度的透視圖:
圖 5 跨多個(gè)移動(dòng)設(shè)備的推理速度
圖 6 展示了由于模型尺寸較小引起的回歸參數(shù)預(yù)測(cè)質(zhì)量的退化程度。如下一節(jié)所述,這不一定會(huì)導(dǎo)致整個(gè) AR 管道質(zhì)量的成比例降低。
圖 6 回歸參數(shù)預(yù)測(cè)質(zhì)量
應(yīng)用
上述模型可以在完整圖像或視頻幀上運(yùn)行,并且可以作為幾乎任何與人臉相關(guān)的計(jì)算機(jī)視覺應(yīng)用的第一步,例如 2D / 3D 人臉關(guān)鍵點(diǎn)、輪廓或表面幾何估計(jì)、面部特征或表情分類以及人臉區(qū)域分割。因此,計(jì)算機(jī)視覺流程中的后續(xù)任務(wù)可以根據(jù)適當(dāng)?shù)拿娌考舨脕?lái)定義。結(jié)合 BlazeFace 提供的少量面部關(guān)鍵點(diǎn)估計(jì),此結(jié)果也可以旋轉(zhuǎn),這樣圖像中的面部是居中的、標(biāo)準(zhǔn)化的并且滾動(dòng)角接近于零。這消除了 SIG-nifi 不能平移和旋轉(zhuǎn)不變性的要求,從而允許模型實(shí)現(xiàn)更好的計(jì)算資源分配。
我們通過(guò)一個(gè)具體的人臉輪廓估計(jì)示例來(lái)說(shuō)明這種方法。在圖 7 中,我們展示了 BlazeFace 的輸出,即預(yù)測(cè)的邊界框和面部的 6 個(gè)關(guān)鍵點(diǎn)(紅色)如何通過(guò)一個(gè)更復(fù)雜的人臉輪廓估計(jì)模型來(lái)進(jìn)一步細(xì)化,并將其應(yīng)用于擴(kuò)展的結(jié)果。
圖 7 流程示例;紅色代表 BlazeFace 輸出;綠色代表任務(wù)特定的模型輸出
詳細(xì)的關(guān)鍵點(diǎn)可以產(chǎn)生更精細(xì)的邊界框估計(jì)(綠色),并在不運(yùn)行人臉檢測(cè)器的情況下重新用于后續(xù)幀中的跟蹤。為了檢測(cè)該計(jì)算節(jié)省策略的故障,該模型還可以檢測(cè)面部是否存在所提供的矩形裁剪中合理地對(duì)齊。每當(dāng)違反該條件時(shí),BlazeFace 人臉檢測(cè)器將再次在整個(gè)視頻幀上運(yùn)行。