人臉檢測綜述

2021-08-21 17:39:14 字數 3945 閱讀 2213

本文原文**:若侵即刪。這篇文章,偏工程實用,不是學術界意義上的檢測綜述,所以,有些闡述,過於絕對化。挑著看吧。

人臉檢測系列博文共分五部分:

《人臉檢測背景介紹和常用資料庫》,介紹人臉檢測的背景,常用資料庫和評價指標,重點介紹各類演算法的發展現狀和各資料庫上目前演算法的效能速度水平;

《非深度學習的人臉檢測》,介紹以vj為代表的非深度學習人臉檢測演算法,重點介紹速度比較快的簡單特徵級聯系列,和效能比較好的通道特徵系列,dpm系列速度太慢會略過;

《深度學習的人臉檢測》,介紹近3-4年深度學習相關的人臉檢測演算法,重點是速度比較快的級聯cnn系列,和ssd/rpn系列,faster-rcnn系列速度太慢可能會略過;

《將級聯cnn人臉檢測的速度做到極致》,包括級聯cnn的**復現,演算法層面優化,cnn壓縮和加速等,分析該系列的優缺點,重點是介紹如何將級聯cnn在arm(單核1.2g)上做到14 fps(vga@48),重點的重點是為mtcnn 和ncnn tencent/ncnn打call;

《cnn模型壓縮之deepcompression和模型加速之mobilenet v1&2》,介紹cnn模型僅壓縮方向最好的方法deepcompression,和從加速角度來說最好的方法mobilenet v1&2,分享cnn演算法落地的關鍵問題和經驗技術。

人臉檢測(face detection),就是給一幅影象,找出影象中的所有人臉位置,通常用乙個矩形框框起來,輸入是一幅影象img,輸出是若干個包含人臉的矩形框位置(x,y,w,h),就像這樣。

人臉檢測對於我們人類非常容易,出於社會生活的需要,我們大腦中有專門的人臉檢測模組,對人臉非常敏感,即使下面這樣的簡筆畫,大腦也能輕易檢測出人臉,和各自的表情。人臉檢測非常重要,那到底有什麼用呢?(2015的a survey)

從問題的領域來看,人臉檢測屬於目標檢測領域,目標檢測通常有兩大類:

從發展歷史來看,深度學習在其中的作用非常明顯:

目前以深度學習為主的cv演算法,研究重點是通用目標檢測,這些方法在人臉檢測問題上效果都不錯,那直接用就好了,為什麼還要研究這個問題呢?

人臉檢測還有特殊的級聯cnn系列,後面會介紹。目前人臉檢測研究抱通用目標檢測的大腿,這是事實和現狀,但其速度和效能雙高的要求還是有挑戰性的。

評價乙個人臉檢測演算法(detector)好壞,常用三個指標:

一般情況下誤檢數越多召回率越高,同等誤檢數量下比較召回率,同等測試環境和影象比較速度,請盡可能保持公平正義。下圖是評價指標的簡單示例,影象總共包含7個人臉(黃色橢圓),某detector給出了8個檢測結果(綠色框),其中5個正確,3個錯誤,這時候誤檢數為3,召回率為5/7=71.43%。

人臉檢測的測試資料庫有很多,這裡僅選擇fddb和wider face,這個兩個資料庫都有官方長期維護,各種演算法都會提交結果進行比較,而且很多早期資料庫目前都已經飽和,沒有比較意義。

第乙個是2023年非約束環境人臉檢測資料庫fddb fddb : main:

fddb總共2845張影象,5171張,人臉非約束環境,人臉的難度較大,有面部表情,雙下巴,光照變化,穿戴,誇張髮型,遮擋等難點,是目標最常用的資料庫。有以下特點:

fddb在非深度學習的年代是極具挑戰性的,很少能做到2000誤檢0.9以上,經典vj detector在2000誤檢也只有0.6593,但在深度學習的年代,這個資料庫目前也快接近飽和了,fddb可以看做是資格賽,選手的正式水平請看下面的wider face。

第二個是目前2023年提出的,目前難度最大的wider face wider face: a face detection benchmark:

wider face總共32203影象,393703標註人臉,目前難度最大,各種難點比較全面:尺度,姿態,遮擋,表情,化妝,光照等。有以下特點有:

wider face是目前最常用的訓練集,也是目前最大的公開訓練集,人工標註的風格比較友好,適合訓練。總之,wider face最難,結果最可靠(頂會**也有不跑wider face的,即使**中用wider face訓練),**給出經典方法vj, dpm, acf和faceness在這個庫上的效能水平,可以看出難度確實很大。

fddb上人臉檢測演算法的水平:

結果太多比較亂,先跳過。

wider face上人臉檢測演算法的水平,sota都在這裡了:

wider face上結果還是清晰明了的,這個資料庫是2023年底提出來的,發表在cvpr 2016,到現在也有兩年了,再看這期間eccv 2016, cvpr 2017和iccv 2017人臉檢測相關工作,也有很多**沒有提交wider face。

fddb上結果有點多有點亂,我這裡整理了一下fddb的提交結果,挑選了有代表性的detector,分非深度學習和深度學習兩個**,分別比較100/200/500/1000/2000誤檢時的召回率,並給出了對應**中的速度情況,方便大家比較。注意速度直接是**資料,不同**的電腦配置不同,多核多執行緒情況不同,測試影象大小和複雜程度不同,等等因素,僅供參考,具體配置請看原**,有source code的自己實測。有的**並未提交fddb,下表中召回率只有小數點後兩位的資料是根據**roc曲線估計的。

非深度學習的人臉檢測演算法比較:

包括2011~2023年的非深度學習人臉檢測方法,還有github上著名專案,深圳大學於仕琪老師的libfacedetection速度最快,和中科院山世光老師的seetafaceengine中的人臉檢測部分召回率很高。注意非深度學習方法有時候給出的速度是正臉檢測模型,多角度模型通常慢數倍。

深度學習的人臉檢測演算法比較:

包括2015~2017的深度學習人臉檢測方法,最後是我優化mtcnn的快速版本fastmtcnn。深度學習方法一般不會有正臉和多角度人臉模型的說法,速度都是召回率對應的。

以上就是截至到2017.12.31的人臉檢測演算法召回率和速度情況,如有疏漏,歡迎補充。

最後,cnn到底能做到多快呢?我們拿非深度學習中最快的libfacedetection中的multiview_reinforce版本,和深度學習中我優化的fastmtcnn(mtcnn的加速版)做速度對比:

當然libfacedetection一直在更新,這裡對比的僅是2023年提交fddb的召回率,用於證明深度學習在很高召回率的情況下,也可以做到實時。

合理懷疑,fastmtcnn真的能跑這麼快嗎?如果您有興趣,可以先測試一下mtcnn,看看優化之前有多快:

alphaqi同學實現的c++版mtcnn-light: alphaqi/mtcnn-light

**有幾處小錯誤需要修改,按照issue 10 你好,這兩個地方可能導致錯誤 · issue #10 · alphaqi/mtcnn-light,稍微修改一下就可以測試了。

另乙個錯誤是mtcnn.cpp中596行,第三階不應該再矯正為正方形:

refineandsquarebbox(thirdbbox_, image.rows, image.cols);
另外,mtcnn-light的畫框**是寫在檢測裡面的,這部分不應該計入檢測時間。

c++版mtcnn-light只需要openblas和opencv就可以跑了,不需要其他第三方庫,用於測試效能完全夠用了,但請不要用於實際專案和產品中,因為**問題較多,具體實現以kaipeng的matlab**為準。動手實測,一起來感受一下吧:

人臉關鍵點檢測綜述

目錄 1.前言 2 人臉檢測資料集 3.人臉檢測方法 4.鏈結以及部分部落格解讀鏈結 根據知乎專欄 整理出來的 綜述。馬住慢慢看總結。序號 時間主要方法 優點缺點1 an introduction to active shape models 1995 asm模型簡單直接,架構清晰明確,易於理解和應...

人臉識別之人臉檢測

人臉識別分為人臉檢測 人臉預處理 蒐集和學習人臉以及人臉識別四個部分,此部分將人臉檢測。本文基於opencv進行的。在opencv中常用的人臉檢測器有基於lbp的特徵檢測 基於haar的特徵檢測,兩者的區別 前者比後者快好幾倍且不需要許可協議,但很多haar檢測器需要許可協議。基於haar的臉部檢測...

OpenCV人臉檢測 眼睛檢測之在人臉以外找眼睛

今天在學習opencv人臉檢測時,發現眼睛檢測是在人臉以外尋找眼睛的,源 如下 import cv2 def detect face cascade cv2.cascadeclassifier cascades haarcascade frontalface default.xml eye casc...