1. 程式人生 > >TensorFlow技術解析與實戰 10 人臉識別

TensorFlow技術解析與實戰 10 人臉識別

10.2 人臉識別的技術流程

        人臉識別系統一般主要包括4個組成部分,分別為人臉影象採集及檢測、人臉影象預處理、人臉影象特徵提取以及人臉影象匹配與識別。    

        人臉識別的第一步就是人臉的影象採集及檢測。

        人臉檢測屬於目標檢測的一部分,主要涉及以下兩個方面:

        (1)對要檢測的目標物件進行概率統計,從而得到待檢測物件的一些特徵,建立起目標檢測模型;

        (2)用得到的模型來匹配輸入的影象,如果有匹配則輸出匹配的區域,沒有就什麼也不做。

         人臉檢測是人臉識別的預處理的一部分,即在影象中準確標定出人臉的位置和大小。人臉影象中包含的模式特徵十分豐富,如直方圖特徵、顏色特徵、模板特徵、結構特徵及哈爾特徵等,人臉檢測就是把這其中有用的資訊挑出來,並利用這些特徵實現人臉檢測。

        在人臉檢測演算法中,有模板匹配模型、Adaboost模型等,其中Adaboost模型在速度與精度的綜合性能上表現最好。該演算法的特點就是訓練慢,檢測快,基本上可以達到視訊流實用檢測效果。

        人臉影象預處理:基於人臉檢測的結果,對影象進行處理,為後面的特徵提取服務。系統獲取的人臉影象可能受到各種條件的限制和隨機干擾,需要進行縮放、旋轉、拉伸、光線補償、灰度變換、直方圖均衡化、規範化、幾何校正、過濾以及銳化等影象預處理。

        人臉影象特徵提取:就是將人臉影象資訊數字化,將一張人臉影象轉變為的一串數字(一般稱為特徵向量)。例如,對一張臉,找到它的眼睛左邊、嘴脣右邊、鼻子、下巴等位置,利用特徵點間的歐氏距離、曲率和角度等提取出特徵分量,最終把相關的特徵連線成一個長的特徵向量。

       人臉影象匹配與識別:就是把提取的人臉影象的特徵資料與資料庫中儲存的人臉特徵模板進行搜尋匹配,根據相似程度對身份資訊進行判斷,設定一個閥值,當相似度超過這一閥值,則把匹配得到的結果輸出。這一過程又分為兩類:一類是確認,是一對一進行影象比較,換句話說就是證明”你就是你“,一般用在金融的核實身份和資訊保安領域;另一類是辨認,是一對多進行影象匹配,也就是說在N個人中找到你,一般的N可以是一個視訊流,只要人走進識別範圍就完成識別工作,一般用在安防領域。

10.3 人臉識別的分類

       在人臉識別領域,主要有以下4個細分方向:人臉檢測、人臉關鍵點檢測、人臉驗證、人臉屬性檢測。


下面和大家一起做兩個練習:一個是關於人臉檢測的,另一個是人臉的性別和年齡識別

10.4 人臉檢測

       參考了 Florian Schroff、Dmitry Kalenichenko 和James Philbin 的論文《FaceNet:A Unified Embedding for Face Recognition and Clustering》 。本節的人臉檢測的過程參考了 https://github.com/davidsandberg/facenet/wiki/Validate-on-lfw 

       git clone --recursive https://github.com/davidsandberg/facenet.git

       LFW 資料集:下載地址為 http://vis-www.cs.umass.edu/lfw

       資料預處理:將資料集校準為和預訓練模型所使用的資料集大小一致。

       export YOURHOME=/home/dong/tensorflow

       export PYTHONPATH=$YOURHOME/facenet/src

       for N in {1..4}; do python src/align/align_dataset_mtcnn.py $YOURHOME/facenet/lfw $YOURHOME/facenet/lfw/lfw_mtcnnpy_160 --image_size 160 --margin 32 --random_order --gpu_memory_fraction 0.25 & done

       採用GitHub上提供的預訓練模型20170216-091149.zip,採用的訓練集是MS-Celeb-1M資料集,是微軟的一個非常大的人臉識別資料庫,它是從名人榜上選擇前100萬的名人,然後通過搜尋引擎採集每個名人約100張人臉圖片而形成的。這個預訓練模型的準確率已經達到0.993+-0.004.

        解壓到facenet/models/facenet/20170216-091149

        進行檢測:

        python src/validate_on_lfw.py    datasets/lfw/lfw_mtcnnpy_160   models

        得到的結果如下:

        Model directory: /media/data/DeepLearning/models/facenet/20170216-091149/
        Metagraph file: model-20170216-091149.meta
        Checkpoint file: model-20170216-091149.ckpt-250000
        Runnning forward pass on LFW images
        Accuracy: 0.993+-0.004
        Validation rate: 0.97533+-0.01352 @ FAR=0.00100
        Area Under Curve (AUC): 0.999
        Equal Error Rate (EER): 0.008  

        為了和基準進行比較,這裡採用 facenet/data/pairs.txt 檔案,它是官方隨機生成的資料,裡面包含匹配和不匹配的人名和圖片編號

10.5 性別和年齡識別

        Adience資料集包含26580張圖片,總共含有2284類,含有噪聲、姿勢、光照等變化,儘可能真實地反映現實世界。

        資料預處理:使用指令碼 把資料處理成 TFRecords 的格式

        構建模型:https://github.com/GilLevi/AgeGenderDeepLearning

        這裡的年齡和性別的訓練模型是參考 Gil Levi 和 Tal Hassner 的論文《Age and GenderClassification Using Convolutional Neural Networks》 構建的。年齡和性別的構建模型的程式碼在https://github.com/dpressel/rude-carnie/blob/master/model.py 中