1. 程式人生 > >基於深度卷積神經網路進行人臉識別的原理是什麼?

基於深度卷積神經網路進行人臉識別的原理是什麼?

我這裡簡單講下OpenFace中實現人臉識別的pipeline,這個pipeline可以看做是使用深度卷積網路處理人臉問題的一個基本框架,很有學習價值,它的結構如下圖所示:

1、Input Image -> Detect

輸入:原始的可能含有人臉的影象。

輸出:人臉位置的bounding box。

這一步一般我們稱之為“人臉檢測”(Face Detection),在OpenFace中,使用的是dlib、OpenCV現有的人臉檢測方法。此方法與深度學習無關,使用的特徵是傳統計算機視覺中的方法(一般是Hog、Haar等特徵)。

對人臉檢測這一步感興趣的可以參考下列資料:

2、Detect -> Transform -> Crop

輸入:原始影象 + 人臉位置bounding box

輸出:“校準”過的只含有人臉的影象

對於輸入的原始影象 + bounding box,這一步要做的事情就是要檢測人臉中的關鍵點,然後根據這些關鍵點對人臉做對齊校準。所謂關鍵點,就是下圖所示的綠色的點,通常是眼角的位置、鼻子的位置、臉的輪廓點等等。有了這些關鍵點後,我們就可以把人臉“校準”,或者說是“對齊”。解釋就是原先人臉可能比較歪,這裡根據關鍵點,使用仿射變換將人臉統一“擺正”,儘量去消除姿勢不同帶來的誤差。這一步我們一般叫Face Alignment。

在OpenFace中,這一步同樣使用的是傳統方法,特點是比較快,對應的論文是:

3、Crop -> Representation

輸入:校準後的單張人臉影象

輸出:一個向量表示。

這一步就是使用深度卷積網路,將輸入的人臉影象,轉換成一個向量的表示。在OpenFace中使用的向量是128x1的,也就是一個128維的向量。

我們可以先看一下VGG16的模型:


VGG16是深度學習中一個比較簡單的基本模型。輸入神經網路的是影象,經過一系列卷積後,全連線分類得到類別概率。

在通常的影象應用中,我們可以去掉全連線層,用計算的特徵(一般就是卷積層的最後一層,e.g. 圖中的conv5_3)來當作提取的特徵進行計算。但如果對人臉識別問題同樣採用這樣的方法,即,使用卷積層最後一層做為人臉的“向量表示”,效果其實是不好的。如何改進?我們之後再談,這裡先談談我們希望這種人臉的“向量表示”應該具有哪些性質。

在理想的狀況下,我們希望“向量表示”之間的距離就可以直接反映人臉的相似度:

  • 對於同一個人的人臉影象,對應的向量的歐幾里得距離應該比較小。
  • 對於不同人的人臉影象,對應的向量之間的歐幾里得距離應該比較大。

這種表示實際上就可以看做某種“embedding”。在原始的VGG16模型中,我們使用的是softmax損失,沒有對每一類的向量表示之間的距離做出要求。所以不能直接用作人臉表示。

舉個例子,使用CNN對MNIST進行分類,我們設計一個特殊的卷積網路,讓最後一層的向量變為2維,此時可以畫出每一類對應的2維向量表示的圖(圖中一種顏色對應一種類別):


上圖是我們直接使用softmax訓練得到的結果,它就不符合我們希望特徵具有的特點:

  • 我們希望同一類對應的向量表示儘可能接近。但這裡同一類(如紫色),可能具有很大的類間距離。
  • 我們希望不同類對應的向量應該儘可能遠。但在圖中靠中心的位置,各個類別的距離都很近。

那麼訓練人臉特徵表示的正確姿勢是什麼?其實有很多種方法。一種方法就是使用“center loss”。centor loss實際上是在softmax的loss上再加入一個損失,這個損失對每一類規定了一個“中心”點,每一類的特徵應該離這個中心點比較近,而不同類的中心點離的比較遠。加入center loss後,訓練出的特徵大致長這樣:

順帶一提,除了center loss外。學習人臉特徵表示的方法還有很多,如triplet loss(論文地址:A Unified Embedding for Face Recognition and Clustering)。triplet loss直接這樣的用三元組(A的影象1,A的影象2,B的影象)來訓練網路。去掉了最後的分類層,強迫神經網路對相同的人臉影象(三元組中的同一人A)建立統一的表達。

4、實際應用

輸入:人臉的向量表示。

有了人臉的向量表示後,剩下的問題就非常簡單了。因為這種表示具有相同人對應的向量的距離小,不同人對應的向量距離大的特點。接下來一般的應用有以下幾類:

  • 人臉驗證(Face Identification)。就是檢測A、B是否是屬於同一個人。只需要計算向量之間的距離,設定合適的報警閾值(threshold)即可。
  • 人臉識別(Face Recognition)。這個應用是最多的,給定一張圖片,檢測資料庫中與之最相似的人臉。顯然可以被轉換為一個求距離的最近鄰問題。
  • 人臉聚類(Face Clustering)。在資料庫中對人臉進行聚類,直接K-Means即可。

5、後記

以上給大家介紹了OpenFace中處理人臉問題的pipeline。需要特別指出的是,人臉相關的問題是一個比較大的方向,一篇文章顯然是說不清楚的,這裡只是基於OpenFace,對比較重要的方法還有名詞做了一個解釋。在OpenFace中,為了速度的考慮,提取人臉特徵之前的Face Detection和Face Alignment就是使用的傳統方法。實際上也可以換用精度更高的深度學習相關方法,比如在中科院山世光老師開源的人臉識別引擎seetaface/SeetaFaceEngine中,Face Alignment使用就是一個基於autoencoder網路的方法。另外,學習人臉特徵同樣有適合不同場景的不同方法,這些都是要進一步學習的。

以上。大家有什麼問題可以在評論中提出~

相關推薦

基於深度神經網路進行人臉識別原理是什麼?

我這裡簡單講下OpenFace中實現人臉識別的pipeline,這個pipeline可以看做是使用深度卷積網路處理人臉問題的一個基本框架,很有學習價值,它的結構如下圖所示:1、Input Image -> Detect輸入:原始的可能含有人臉的影象。輸出:人臉位置的bounding box。這一步一般我

基於深度神經網路的單通道人聲與音樂的分離-論文翻譯

主體內容:作為當前的一大熱門,語音識別在得到快速應用的同時,也要更適應不同場景的需求,特別是對於智慧手機而言,由於元器件的微型化導致對於語音處理方面的器件不可能很大,因此單通道上的語音分離技術就顯得極為重要,而語音分離正是語音識別的前端部分。而傳統的技術由於資

基於深度神經網路(D-CNN)的影象去噪方法

基於深度卷積神經網路的影象去噪方法   摘要:影象去噪在影象處理中仍然是一個具有挑戰性的問題。作者提出了一種基於深度卷積神經網路(DCNN)的影象去噪方法。作者設計的不同於其他基於學習的方法:一個DCNN來實現噪聲影象。因此,通過從汙染影象中分離噪聲影

論文理解:基於神經網路人臉識別方法

本文是對陳耀丹、王連明的基於卷積神經網路的人臉識別方法的理解。 摘要:實現了一種基於卷積神經網路的人臉識別方法,該網路由兩個卷積層,兩個池化層、一個全連線層和一個softmax迴歸層組成,它能自動提取人臉特徵並進行分類,網路通過批量梯度下降法訓練特徵提取器和分

基於深度神經網路的高光譜遙感影象分類---PCA+2D-CNN(偽空譜特徵)

論文地址基於深度卷積神經網路的高光譜遙感影象分類西華大學學報同時利用高光譜影象的光譜資訊和空間資訊的深度卷積神經網路分類模型。基於深度學習到的深度特徵,用邏輯迴歸分類器進行分類訓練。高光譜影象面臨的挑戰

基於神經網路人臉識別專案_使用Tensorflow-gpu+dilib+sklearn

https://www.cnblogs.com/31415926535x/p/11001669.html 基於卷積神經網路的人臉識別專案_使用Tensorflow-gpu+dilib+sklearn 概述 學期末了啊,,,最後這個人臉識別的專案弄完了,,有很多的不足,,很多東西都是隻知道怎麼用,但是不知道其背

基於3D神經網路的行為識別

人工智慧/機器學習/深度學習交流QQ群:811460433程式設計師深度學習微信公眾號:       最近看Deep Learning的論文,看到這篇論文:3D Convolutional Neural

深度學習(十五)基於級聯神經網路人臉特徵點定位

基於級聯卷積神經網路的人臉特徵點定位作者:hjimce一、相關理論本篇博文主要講解2013年CVPR的一篇利用深度學習做人臉特徵點定位的經典paper:《Deep Convolutional Netwo

基於動態場景去模糊的多尺度深度神經網路

Deep Multi-scale Convolutional Neural Network for Dynamic Scene Deblurring- CVPR2017 主要貢獻 1、提出 多尺度學習CNN框架,實現由粗到細的方法提高了網路的收斂速度 之後多尺度

基於FPGA的深度神經網路的加速器設計

翻譯:卜居 【0. 摘要】 CNN已經廣泛用於影象識別,因為它能模仿生物視覺神經的行為獲得很高識別準確率。最近,基於深度學習演算法的現代應用高速增長進一步改善了研究和實現。特別地,多種基於FPGA平臺的深度CNN加速器被提出,具有高效能、可重配置、快速開發週期等優勢。

優化基於FPGA的深度神經網路的加速器設計

翻譯:卜居【0. 摘要】CNN已經廣泛用於影象識別,因為它能模仿生物視覺神經的行為獲得很高識別準確率。最近,基於深度學習演算法的現代應用高速增長進一步改善了研究和實現。特別地,多種基於FPGA平臺的深度CNN加速器被提出,具有高效能、可重配置、快速開發週期等優勢。儘管目前FP

基於全域性誤差重構的深度神經網路壓縮方法

最近在看這篇文章,翻譯出來略作整理,本人能力有限,翻譯不足之處還請諒解 摘要 近年來,在影象分類、目標檢測、目標分析和人臉校正等諸多領域,卷積神經網路(CNNs)都取得了巨大的成功。通過百萬級甚至十億級的引數,CNN模型在處理數量巨大的訓練資料時顯示出強大的能力。然而,由於

tensorflow學習筆記(第一天)-深度神經網路

一、在這裡首先需要了解一些概念性的東西,當然我是才接觸,還不太熟悉: 1.numpy      NumPy系統是Python的一種開源的數值計算擴充套件。這種工具可用來儲存和處理大型矩陣,比Python自身的巢狀列表(nested l

實時神經網路實現人臉檢測和情感/性別分類

本文提出了一種通用的實現方法卷積神經網路(CNN)構建框架設計實時CNN。建立實時面部檢測視覺系統,實現性別分類和情緒分類。 其中:IMDB性別分類測試準確率:96%;fer2013情緒分類測試準確率:66%。 具體效果如下圖:  這裡提供下資料集下載: 1、情緒

keras 使用神經網路進行序列處理

本文主要介紹使用卷積神經網路進行序列處理。 下面是示例程式碼: # coding: utf-8 # In[2]: ''' 使用convnet進行序列處理: 在Keras中,通過`Conv1D`層使用1D convnet,它具有與`Conv2D`非常相似的介面。 它需要具有shape`

利用神經網路進行手寫數字識別詳解

import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data ‘’‘可分別用這兩個函式建立卷積核(kernel)與偏置(bias)’’’ #返回一個給定形狀的變數,並自動以截斷正態分佈

深度神經網路學習(一)

卷積神經網路的基礎模組為卷激流包括卷積(用於維數拓展)、非線性(洗屬性、飽和、側抑制)、池化(空間或特徵型別的聚合)和批量歸一化(優化操作,目的是為了加快訓練過程中的收斂速度,同事避免陷入區域性最優)等四種操作。下面簡單介紹這四種操作。 1、卷積:利用卷積核對輸入影象進行處

深度學習 --- 深度神經網路詳解(AlexNet 網路詳解)

  本篇將解釋另外一個卷積神經網路,該網路是Hinton率領的谷歌團隊(Alex Krizhevsky,Ilya Sutskever,Geoffrey E. Hinton)在2010年的ImageNet大賽獲得冠軍的一個神經網路,因此本節主要參考的論文也是這次大賽的論文即“Imag

利用神經網路進行阿爾茨海默病分類的神經影像模式融合 論文研讀筆記

原文連結 發表: 2018.11.13 摘要 阿爾茨海默病(AD)分類的自動化方法具有巨大的臨床益處,並可為防治該疾病提供見解。深層神經網路演算法通常使用諸如MRI和PET的神經學成像資料,但是還沒有對這些模式進行全面和平衡的比較。為了準確確定每個成像變體的相對強度,本研究使用阿爾茨海默病神經成像倡議(A

使用神經網路進行圖片分類 1

卷積神經網路原理一、實驗介紹1.1 實驗內容本課程將會先帶你理解卷積神經網路的原理,瞭解卷積神經網路的一些特性。然後動手使用caffe深度學習框架訓練一個卷積神經網路模型,並用訓練好的模型進行圖片分類。學習本課程之前,請先學習課程814 使用python實現深度神經網路以瞭解必要的基本概念,本實驗中涉及到的深