人臉識別系列三 | MTCNN算法詳解上篇

2021-02-19 GiantPandaCV
前言

我們前面分享了PCA,Fisher Face,LBPH三種傳統的人臉識別算法,Dlib人臉檢測算法。今天我們開始分享一下MTCNN算法,這個算法可以將人臉檢測和特徵點檢測結合起來,並且MTCNN的級聯結構對現代的人臉識別也產生了很大的影響。上篇為大家介紹MTCNN的算法原理和訓練技巧,下篇為大家解析MTCNN算法的代碼和進行demo演示。論文地址為:https://arxiv.org/ftp/arxiv/papers/1604/1604.02878.pdf

原理

MTCNN是英文Multi-task Cascaded Convolutional Neural Networks的縮寫,翻譯過來就是多任務級聯卷積神經網絡。該網絡在誕生之初是表現最優的,雖然當前表現已經不是最優的了,但該網絡具有很大的意義,第一次將人臉檢測和人臉特徵點定位結合起來,而得到的人臉特徵點又可以實現人臉校正。該算法由3個階段組成:

第二階段,通過更複雜一點的CNN精煉候選窗體,丟棄大量的重疊窗體。第三階段,使用更強大的CNN,實現候選窗體去留,同時回歸5個面部關鍵點。

第一階段是使用一種叫做PNet(Proposal Network)的卷積神經網絡,獲得候選窗體和邊界回歸向量。同時,候選窗體根據邊界框進行校準。然後利用非極大值抑制去除重疊窗體。第二階段是使用R-Net(Refine Network)卷積神經網絡進行操作,將經過P-Net確定的包含候選窗體的圖片在R-Net中訓練,最後使用全連接網絡進行分類。利用邊界框向量微調候選窗體,最後還是利用非極大值抑制算法去除重疊窗體。第三階段,使用Onet(Output Network)卷積神經網絡進行操作,該網絡比R-Net多一層卷積層,功能與R-Net類似,只是在去除重疊候選窗口的同時標定5個人臉關鍵點位置。

MTCNN網絡在經過3個卷積網絡處理之前,先進行了多尺度變換,將一幅人臉圖像縮放為不同尺寸的圖片,這樣就構成了圖像金字塔。然後這些不同尺度的圖像作為3個階段的輸入數據進行訓練,這樣可以令MTCNN檢測到不同尺寸的人臉。MTCNN三個階段所做的事情如下圖:

網絡結構在這裡插入圖片描述訓練

MTCNN的訓練是一件極為複雜的事,沒有真正訓練過的人是難以體會其中的困難的。我也只能從理論方面說明一下,有興趣可以去參與訓練一下。

損失函數

MTCNN特徵描述子主要包括3個部分,分別是人臉-非人臉二分類器、邊界框回歸、以及人臉特徵點。下面分別介紹這3個部分的損失函數。首先要對人臉進行分類,即判斷該區域是否包含人臉的二分類器。人臉分類的交叉熵損失函數如下:其中,為人臉出現的概率,為該區域真實標籤。除了判斷該區域是否存在人臉之外,我們還希望人臉圈定出來的區域儘可能準確,這自然是一個回歸問題,MTCNN使用常見的邊界框回歸(bounding box regression)來實現。邊界框回歸採用歐氏距離作為距離度量的損失函數,如下式:

其中,為通過網絡預測得到的邊框坐標,為實際的邊框坐標,即一個表示矩形區域的四元組,具體形式如下:

和邊界回歸過程相同,人臉關鍵點定位也是一個回歸問題,該步驟的損失函數仍然是計算經過預測的關鍵點位置和實際位置之間的偏差,距離度量使用歐氏距離。關鍵點定位過程中的損失函數如下:

其中,為預測結果,為實際關鍵點位置。由於一共需要預測5個人臉關鍵點,每個點2個坐標值,所以是10元組。

最終MTCNN要優化的損失為:其中,N為訓練樣本數量,表示任務的重要性,為樣本標籤,為上面的損失函數。作者在訓練pnet和rnet的時候,並沒有加入landmark回歸的任務,分類和人臉框回歸的loss_weight之比為1:0.5,onet加入landmark回歸,分類、人臉框回歸和關鍵點回歸的loss_weight之比為1:0.5:0.5。

在訓練過程中,為了取得較好的結果,MTCNN作者每次只反向傳播前70%樣本的梯度,用以保證傳遞的都是有效數據。

訓練MTCNN復現論文結果

論文中作者主要使用了Wider_face 和CelebA資料庫,其中Wider_face主要用於檢測任務的訓練,CelebA主要用於關鍵點的訓練。訓練集分為四種:負樣本,正樣本 ,部分樣本,關鍵點樣本. 三個樣本的比例為3: 1: 1: 2。Wider_face包含人臉邊框標註數據,大概人臉在20萬,CelebA包含邊框標註數據和5個點的關鍵點信息.對於三個網絡,提取過程類似,但是圖像尺寸不同。

訓練包含三大任務,即是:

正負樣本,部分樣本,關鍵點樣本提取

1.從Wider_face隨機選出邊框,然後和標註數據計算IOU,如果大於0.65,則為正樣本,大於0.4小於0.65為部分樣本,小於0.4為負樣本。2.計算邊框偏移.對於邊框,(x1,y1)為左上角坐標,(x2,y2)為右下角坐標,新剪裁的邊框坐標為(xn1,yn1),(xn2,yn2),width,height。則offset_x1 = (x1 - xn1)/width,同上,計算另三個點的坐標偏移。3.對於正樣本,部分樣本均有邊框信息,而對於負樣本不需要邊框信息。4. 從celeba中提取關鍵點樣本,可以根據標註的邊框,在滿足正樣本的要求下,隨機裁剪出圖片,然後調整關鍵點的坐標。

Caffe訓練Loss修改

由於訓練過程中需要同時計算3個loss,但是對於不同的任務,每個任務需要的loss不同。所有在整理數據中,對於每個圖片進行了15個label的標註信息。具體如下:1.第1列:為正負樣本標誌,1正樣本,0負樣本,2部分樣本,3關鍵點信息2.第2-5列:為邊框偏移,為float類型,對於無邊框信息的數據,全部置為-13.第6-15列:為關鍵點偏移,為floagt類型,對於無邊框信息的數據,全部置為-1

所以,我們需要修改softmax_loss_layer.cpp增加判斷,只對於1,0計算loss值,修改euclidean_loss_layer.cpp 增加判斷,對於置為-1的不進行loss計算。

困難樣本選擇

論文中作者對於人臉分類任務,採用了在線困難樣本選擇,實現過程如下:修改softmax_loss_layer.cpp,根據計算出的loss值,進行排序,只對於70%的值較低的數據。

MTCNN訓練自己的數據

這一部分已經有非常多的開原始碼了,可以白用,推薦下面這一個:https://github.com/dlunion/mtcnn。訓練非常方便,並且有一個配套的純c++版本的mtcnn-light,非常利於進行源碼理解,我的MTCNN算法詳解下篇即會深入到該代碼中進行源碼解析。

後記

雖然MTCNN當時取得了人臉檢測的最高SOAT結果,但是技術的發展是非常快的,當前在人臉檢測權威數據集WIDER FACE上,MTCNN的前列已經有比較多了。WIDER FACE的官方地址如下:http://mmlab.ie.cuhk.edu.hk/projects/WIDERFace/WiderFace_Results.html,我們從下面的PR曲線看出這點。(這三張圖像分別代表針對不同難度的樣本的PR曲線)可以看出DFS算法真的很棒啊,有機會看一看?

相關焦點

  • 乾貨 | MTCNN實時人臉檢測網絡詳解與代碼演示
    整個模型分為三個階段,第一階段通過一個淺層的CNN網絡快速產生一系列的候選窗口;第二階段通過一個能力更強的CNN網絡過濾掉絕大部分非人臉候選窗口;第三階段通過一個能力更加強的網絡找到人臉上面的五個標記點;完整的MTCNN模型級聯如下:該模型的特徵跟HAAR級聯檢測在某些程度上有一定的相通之處,都是採用了級聯方式,都是在初期就拒絕了絕大多數的圖像區域,有效的降低了後期CNN
  • Python系列之三——人臉檢測、人臉識別
    之前有利用C++和OpenCv寫過人臉識別的系列文章,對於人臉識別的基本理解和步驟流程等基本知識不做反覆敘述。比詹小白還要白的童鞋可以查看往期文章進行了解噢1.人臉識別(一)——從零說起2.人臉識別(二)——訓練分類器3.人臉識別(二)——訓練分類器的補充說明4.人臉識別(三)——源碼放送一、人臉檢測      python版人臉檢測基本上可以參照C++版本的程序,根據語法不同進行改寫即可。
  • 深度學習之視頻人臉識別系列三:人臉表徵
    作者 | 東田應子編輯 | 安可出品 | 磐創AI技術團隊【磐創AI導讀】本文是深度學習之視頻人臉識別系列的第三篇文章在本系列第一篇文章裡我們介紹了人臉識別領域的一些基本概念,分析了深度學習在人臉識別的基本流程,並總結了近年來科研領域的研究進展,最後分析了靜態數據與視頻動態數據在人臉識別技術上的差異;在第二篇文章中介紹了人臉檢測與對齊的相關算法。歡迎大家關注我們的公眾號:磐創AI。
  • 應用層下的人臉識別(三):人臉比對
    本文作者根據多年人臉識別項目經驗,總結了人臉識別技術在安防、商業領域應用及產品設計細節,匯總成應用層下的人臉識別系列文章。本文為系列文章的第三篇——介紹人臉比對相關內容。全文圍繞人類比對類型、人臉比對要素展開介紹。
  • 人臉識別算法中的一些重要的算法
    這些算法的涉及面非常廣泛,包括模式識別、圖像處理、計算機視覺、人工智慧、統計學習、神經網絡、小波分析、子空間理論和流形學習等眾多學科。所以很難用一個統一的標準對這些算法進行分類。根據輸入數據形式的不同可分為基於靜態圖像的人臉識別和基於視頻圖像的人臉識別。因為基於靜態圖像的人臉識別算法同樣適用於基於視頻圖像的人臉識別,所以只有那些使用了時間信息的識別算法才屬於基於視頻圖像的人臉識別算法。
  • 如何在 Keras 中使用 FaceNet 開發人臉識別系統
    FaceNet 是 Google 工程師 Florian Schroff、Dmitry Kalenichenko、James Philbin 等人於 2015 年開發的人臉識別系統,由於算法原理容易理解、應用方便,成了目前最為流行的人臉識別技術。今天,AI 前線帶領大家跟隨 Jason Brownlee 去學習如何在 Keras 中使用 FaceNet 開發人臉識別系統。
  • OpenCV+Tensorflow實現實時人臉識別演示
    ,它跟其他人臉識別模型最大的一個不同就是它不是一個中間層輸出,而是直接在歐幾裡德低維空間嵌入生成人臉特徵,這個對以後的各種識別、分類、相似度比較都非常方便。FaceNet網絡設計目標任務有如下1.驗證-驗證是否為同一張臉2.識別-識別是否為同一個人3.聚類-發現人臉具有相同之處的人關於什麼是神經網絡嵌入,這個解釋比較複雜,簡單的說神經網絡的嵌入學習可以幫助我們把離散變量表示為連續的向量,在低維空間找到最近鄰,tensorflow中的word2vec就是用了嵌入。
  • 人臉識別經典算法實現
    基於特徵分析的方法,也就是將人臉基準點的相對比率和其它描述人臉臉部特徵的形狀參數或類別參數等一起構成識別特徵向量,這種基於整體臉的識別不僅保留了人臉部件之間的拓撲關係,而且也保留了各部件本身的信息,而基於部件的識別則是通過提取出局部輪廓信息及灰度信息來設計具體識別算法。
  • AI大廠算法測試心得:人臉識別關鍵指標有哪些?
    僅僅在幾年前,程式設計師要開發一款人臉識別應用,就必須精通算法的編寫。但現在,隨著成熟算法的對外開放,越來越多開發者只需專注於開發垂直行業的產品即可。  由調查機構發布的《中國AI產業地圖研究》中也有一組有趣的數據,目前中國的AI企業中,有近8成集中在應用層,其中AI行業解決方案佔比高達40.7%,從上下班的人臉識別考勤,到金融App的人臉身份核驗,再到醫院和政務大廳的人臉識別取號,以及車站的人臉核驗檢票……  目前市面上既有OpenCV等開源算法庫,很多晶片廠商的產品也自帶簡單算法,同時專業算法大廠也會開放相關技術,
  • 重磅|中科視拓開源SeetaFace2人臉識別算法
    今天,來自中科院計算所的人工智慧國家隊中科視拓宣布,開源商用級SeetaFace2人臉識別算法。SeetaFace2採用商業友好的BSD協議,這是在2016年9月開源SeetaFace1.0人臉識別引擎之後,中科視拓在人臉識別領域的又一次自我革命。
  • 最先進的人臉識別算法:在口罩面前也不靈了
    本周一,美國標準化與技術研究所(NIST)公布最新發現,即便是最先進的人臉識別算法,面對戴口罩的被識別對象,會有至少5%的失敗率,遠超可被接受的0.3%失效率。人臉識別算法依賴於獲取儘可能多的數據點位,而佩戴口罩後,大量有價值的信息被帶走。
  • 人臉識別開發技巧揭秘
    隨著人臉識別終端設備的廣泛應用,很多開發者在實踐中會產生疑惑:為什麼同一款主板,運行性能相仿的算法時,系統資源佔用會相差懸殊?為什麼同樣配備了活體檢測,防攻擊能力卻可以差好幾個級別?事實上,人臉識別算法在實際部署中存在一些編程開發策略,能對識別效果和識別速度產生顯著影響。
  • 人臉識別算法常用性能評價指標
    01算法性能測試要到實際場景中人臉識別算法的準確率是
  • 人臉識別(一)——從零說起
    人臉識別的英文名稱是 Face Recognition,前段時間查找資料學的時候發現,不少人將人臉識別和人臉檢測(Face Detection)混為一談,很大程度上增加了查詢學習資料的難度,這裡在參照一些前輩的基礎上,自己動手敲寫代碼,整理出了一個完整的版本。
  • NIST全球權威人臉識別算法測試結果:中國包攬前五名中三位
    近日,由美國國家標準與技術研究院 NIST(National Institute of Standards and Technology) 組織的人臉識別算法測試 FRVT 2018 結果公布,前五名被三家中國公司和兩家俄羅斯公司包攬,其中冠軍被中國公司依圖科技再度摘得。本文對比賽結果進行了介紹。
  • 人臉識別考勤機哪個品牌好_人臉識別考勤機排行榜
    人臉識別考勤機哪種品牌好。人臉識別考勤機,作為一種全新的技術領域,目前在有些企業中已經廣泛得到運用。本文主要介紹了人臉識別考勤機的幾大優秀品牌,一起來看下文。   漢王科技以核心技術為基礎,面向市場需求,已形成了以識別技術為核心的、針對不同細分市場的軟硬體產品系列,既有通用產品,如漢王電紙書、漢王筆、文本王、名片通、繪圖板等,也有針對教育、金融等行業應用的文表識別解決方案、交通管理的識別監控系統;既有手寫手機、OCR等多種技術授權方案,也有輔助方案實施的硬體產品,如證照識別等。
  • 中國在人臉識別算法方面處於世界領先地位
    中國的人臉識別算法在世界上處於領先地位,其最好的算法能夠在不到一秒的時間內識別出一千萬人,而不會出現任何錯誤。美國商務部國家標準與技術研究院周五發布了2018年人臉識別測試結果,根據該測試,全球39種人臉識別算法中排名前五的均來自中國。
  • 基於深度學習的人臉識別算法
    基於深度學習的人臉識別算法,如何讓神經網絡從訓練數據中學習到有效、魯棒的生物特徵是至關重要的。
  • 中科視拓開源SeetaFace2人臉識別算法
    集微網消息(文/春夏)近日,中科視拓(北京)科技有限公司(以下簡稱「中科視拓」)宣布,開源商用級SeetaFace2人臉識別算法。SeetaFace2支持的上層應用包括但不限於人臉門禁、無感考勤、人臉比對等。與2016年開源的SeetaFace1.0相比,SeetaFace2在速度和精度兩個層面上均有數量級的提升。
  • 全民戴口罩,人臉識別算法抓瞎:多種算法出錯,最高錯誤率達50%
    而且,黑色口罩比藍色口罩更容易出錯,口罩遮住口鼻的範圍越大,算法就越難識別人臉。一些算法錯誤率高達50%NIST 計算機科學家、該研究報告的作者之一 Mei Ngan 說:「隨著新冠疫情的到來,我們想要了解人臉識別技術是如何處理帶口罩的面孔。我們首先關注的是,在疫情大流行之前開發的算法可能會因識別對象戴口罩而受到影響。