人臉識別之人臉檢測算法

        人臉識別的一般步驟:人臉檢測->人臉對齊->人臉特徵提取->(計算人臉的差值)三元組損失/中心損失->差值小於某一閾值則爲同一個人,差值大於某一閾值則不是同一人。

        本文將對每一個步驟的技術現狀,進行分析,並嘗試實現其中最優的幾種技術。

一、現有算法

    1.非監督學習算法

                  

 2. 監督學習算法

                 

      從以上描述可以看出

          1) 傳統人臉檢測方法能在CPU上也能達到很高的速度,其中libfasedetection,速度達到367/1533FPS

      且在100的誤檢率基礎上,召回率高到0.8236

          2) 深度學習算法雖然FasterRCNN的精度很高,但是速度卻非常滿,只有GPU 3FPS,只能用在競賽環境。

       SFD的精度高達0.9438,而且在GPU上的速度能達36FPS,速度也能滿足要求。

        還有fastMTCN/ICC-CNN/MTCNN性能都不錯,都可以進行嘗試。

二、本文嘗試的算法   

1.MTCNN

    1.1 MTCNN的網絡結構

      MTCNN 由三個神經網絡組成,分別是P-Net,R-Net,O-Net。在使用這些網絡之前,首先要先將原始圖片縮放到不同尺度,形成一個“圖像金字塔”,然後在分別通過P-Net,R-Net,O-Net。如下圖所示:

                         

            

      1.2 MTCNN的損失函數

            針對人臉判定部分使用交叉熵損失,針對框迴歸和關鍵點判定使用L2損失

            人臉判定部分:

             

             人臉框:

              

             人臉關鍵點:

               

              總損失函數:這三部分損失各自乘以自身的權重再加起來,就形成最後的總損失。

                  

             在訓練P-Net和R-Net時,更關心框位置的準確性,而較少關注關鍵點判定的損失,因此關鍵點判定損失的權重很小。對於O-Net,關鍵點判定損失的權重較大。       

     1.3 使用MTCNN進行人臉檢測   

            (1) 數據集:

              使用LFW 人臉數據庫,在 LFW 數據庫中人臉的光照條件 、姿態多種多樣,有的人臉還存在部分遮擋的情況,因此識別難度較大 。現在 , LFW 數據庫性能測評已經成爲人臉識別算法性能的一個重要指標 。
                 1) 下載數據集:在網站 http ://vis-www.cs.umass.edu/lfw/lfw. tgz 下載 LFW 數據庫,該數據是完全開源的。
                 2)  解壓數據集:                       

cd ~/datasets
mkdir -p lfw/raw
tar xvf ~/Downloads/lfw.tgz -C ./lfw/raw --strip-components=1

                3) 查看數據集:每個文件夾代表一個人名

           (2)在LFW 數據庫上的人臉檢測和對齊

                1) 下開源代碼:git clone https://github.com/davidsandberg/facenet.git

                2) 進行人臉檢測和對齊:

python src/align/align_dataset_mtcnn.py \
  ~/datasets/lfw/raw \
  ~/datasets/lfw/lfw_mtcnnpy_160 \
  --image_size 160 --margin 32 \
  --random_order

           該命令會創建一個../lfw/lfw_mtcnnpy_160的文件夾,並將所高對齊好的人臉圖像存放到這個文件夾中,數據的結構和原先../lfw/raw 中相同 。 參數 --image_size 160 --margin 32 的含義是在MTCNN 檢測得到的人臉框的基礎上縮小32像素(訓練時使用的數據偏大),並縮放到 160× 160 大小 。 因此最後得到的對齊後的圖像都是 160 x l60 像素的 。這樣的話,就成功地從原始圖像中檢測並對齊了人臉 。

            (3)源碼介紹

              MTCNN 的實現主要在文件夾facenet/src/align 中。其中, detect_ face.py中定義了 MTCNN 的模型結構,由 P-Net 、R-Net 、O_Net 三部分組成 。這三部分網絡已經提供好了預訓練的模型,模型數據分別對應文件 detl.npy 、det2.npy 、 det3.npy 。 align_ dataset_mtcnn.py 是使用 MTCNN 的模型進行人臉的檢測和對齊的入口代碼  該文件夾中還有兩個文件 align_dataset. py 和align_ dlib.py ,官們都是使用 dlib 中的傳統方法對人臉進行檢測,性能比MTCNN 稍差。
                

2. SFD

3. fastMTCNN

4. FasterRCNN

5. 非深度學習的libfasedetection.

 

 

【參考論文】

  1.人臉檢測(十九)--人臉檢測綜述(2018.2):   https://blog.csdn.net/App_12062011/article/details/80537518

  2.OpenCV學習筆記(11):libfacedetection人臉檢測的配置與使用 :https://blog.csdn.net/cv_jason/article/details/78819088

  3.人臉檢測:MTCNN https://blog.csdn.net/tinyzhao/article/details/53236191

  4.《21個項目玩轉深度學習:基於TensorFlow的實踐詳解》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章