天天看點

深度學習人臉檢測綜述

深度學習在計算機視覺的應用中已經十分廣泛,其效果相比于傳統方法也有很大的提高。本文就人臉檢測這個領域,介紹深度學習在人臉檢測領域的發展。

深度學習人臉檢測綜述

深度學習人臉檢測最早的代表作之一是2015年CVPR的一篇論文《A Convolutional Neural Network Cascade for FaceDetection》,下文簡稱CascadeCNN。這篇文章保留了傳統人臉檢測方法中Cascade的概念,使用3個輸入大小分别為12、24、48的淺層網絡,在每個分類網絡之後接一個矯正網絡用于回歸人臉框的位置。對比CascadeCNN和傳統人臉檢測方法,本文總結其相同點和不同點。相同點如下:1. 使用了Cascade級聯結構,使用前面的stage快速過濾簡單樣本,後面的stage得到更為準确的分類結果;2. 圖像金字塔結構,對于不同scale的人臉大小,通過縮放圖像得到圖像金字塔再進行處理;3. 滑動視窗加步長的處理模式;4. 最後處理結果根據IOU(intersection over union)大小使用NMS(Non-maximum suppression)方法進行視窗合并。不同點如下:1. 每個stage中CNN的分類器代替了傳統的分類器;2. 每個分類stage之後應用了一個矯正網絡使得人臉框的位置更為精确。該論文是當時基于CNN的人臉檢測方法中速度最快的。

深度學習人臉檢測綜述

CascadeCNN 測試流程

15年另一篇文章關于深度學習人臉檢測比較有代表性的文章是《Multi-view Face Detection Using Deep Convolutional Neural Networks》。這篇文章使用的網絡是AlexNet,由于網絡的分類能力相對較強,該文沒有采用Cascade結構。是圖像金字塔依舊采用,每一層金字塔用AlexNet處理一遍。這篇文章的一個亮點是使用了全卷積網絡,将全連接配接層修改參數排列方式變成卷積層,對輸入圖像的大小沒有了限制。金字塔的每一層由AlexNet處理後出來的是一個HeatMap,HeatMap的每個點對應原圖中一個區域。

深度學習人臉檢測綜述

原圖與HeatMap圖

2016年深度學習人臉檢測相關的文章都流行起來multi-task的概念,将人臉檢測(分類)和人臉框位置矯正(回歸)以及人臉關鍵點定位、姿态、姿态等屬性的檢測相結合(筆者在實驗中發現,除了人臉框位置回歸,其他的task對人臉檢測的精度沒有任何提高)。相關文章有:《HyperFace: A Deep Multi-task Learning Framework for Face Detection, Landmark Localization, Pose Estimation, and Gender Recognition》、《Joint Training of Cascaded CNN for Face Detection》(後文簡稱JTCCNN)、《Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks》(後文簡稱MTCNN)。HyperFace的網絡結構也是基于Alexnet的變形,其特點對每個task有一個512大小的fc層,在對應到不同的任務,具體網絡結果參見附圖。

深度學習人臉檢測綜述

HyperFace網絡結構

JTCCNN和MTCNN兩篇文章在思路和網絡結構上有很多相同之處。這兩個方法都是基于15年CascadeCNN這篇文章的思路進行延伸的。最大的不同點在于,JTCCNN将低層的特征連接配接到了高層,12net的特征會拼接到24net上,12和24拼接得到的特征又會進一步拼接到48net上,級聯的機率展現在了網絡内部,12net、24net、48net對應有自己的門檻值,沒有通過門檻值的樣本被判斷為負樣本。MTCNN則保持每個Cascade之間的net互不幹涉,它在CascadeCNN的基礎上,改進了網絡結構,12net應用了全卷積的網絡,應用到了multi-task引用人臉框回歸和關鍵點,進一步調高了人臉檢測的速度和精度。

深度學習人臉檢測綜述

JTCCNN網絡結構

深度學習人臉檢測綜述

MTCNN網絡結構

今年人臉檢測相關的文章更多關注到了人臉的scale,能否不需要這麼多層的圖像金字塔就能檢測出不同尺度的人臉呢?《Finding tiny face》給出的答案是減少金字塔的層數,同時增加模闆尺度這兩種方式相結合,該文章同時實驗驗證,對于小人臉(圖像中人臉大小小于20個像素),加入人臉周圍的context上下文資訊能極大的提高該人臉的檢測率。《Scale-Aware Face Detection》這篇文章的思路比較奇特,先有一個Scale Proposal Network (SPN)得到圖像上所有人臉的尺度大小資訊,然後根據此對圖像進行resize(在resize的圖像上,所有的人臉大小在同一尺度),然後隻需要對該sacle的一個尺度的網絡便可檢測出所有人臉。《Face Detection through Scale-Friendly Deep Convolutional Networks》Scale-friendly在提供propose方法的時候從圖像中提取各種尺度的anchor,力求覆寫到各種尺度大小。

深度學習人臉檢測綜述

Scale-Aware Face Detection 測試流程

深度學習人臉檢測綜述

Scale-friendly 訓練流程

到此很多讀者可能會疑惑,為啥沒有提到RCNN、fastRCNN、fasterRCNN、sppnet、YOLO、SSD、DenseBox等相關物體檢測的文章,也有很多工作是将這些方法應用到人臉檢測的,考慮到其通用性,這裡沒有一一介紹,後續筆者會就物體檢測系列的文章進行較長的描述。

總結來說,全卷積網絡代替滑動視窗加步長的方式,利用到時卷積層共享計算的特性;Cascade結構其實和目标檢測的proposal是同一思想,都是想通過一個快速的方法擷取人臉候選位置,排除掉大量的負樣本;圖像金字塔、特征級别金字塔、不同尺度的anchor、不同尺度的模型大小都是為了解決人臉sacle的問題,例如同一個檢測器很難同時檢測出來20*20大小和200*200大小,加入了人臉框回歸可一定程度的提高尺度的魯棒性。

最後說一下,人臉檢測速度的問題。提到人臉檢測速度,不說圖像大小和最小檢測尺度都是耍流氓的行為。最小檢測尺度翻一倍,速度可能要提升不止一倍。上述所有的方法中,結合速度和檢測率,表現最優秀的是MTCNN的方法(但凡涉及到VGG16、Resnet34這種大的網絡結構的檢測算法很難實用起來),後續筆者會詳盡介紹MTCNN的訓練測試流程。

繼續閱讀