基於CNN、Opencv、tensorboard的人臉識別

  1. 系統開發環境

2.1系統開發環境

2.1.1硬件

  1. CUP: INTEL CORE I7-6500U
  2. GPU: NVIDIA GeForce 940M
  3. 內存:8G
  4. 硬盤:PCIE SSD 256G

2.1.2軟件

  1. Python 3.5

2.2系統使用工具

集成開發環境(Anaconda或IDLE)

插件:

  1. opencv3.4.3
  2. numpy1.14.6
  3. keras2.2.4
  4. Tensorflow cpu1.11.0
  5. sklearn0.20.
  6. 人臉識別技術
  7. 3.1獲取人臉數據

    首先通過opencv打開攝像頭,獲取視頻流,得到一幀一幀的圖片,用opencv自帶的人臉識別分類器haarcascade_frontalface_alt2檢測出每幀人臉的部分,並保存。將獲取的每幀圖片壓縮成64*64的,並灰度化。

    3.2圖像預處理

    3.2.1劃分數據集

    按照交叉驗證的原則將數據集劃分成三部分:訓練集、驗證集、測試集;交叉驗證屬於機器學習中常用的精度測試方法,它的目的是提升模型的可靠和穩定性。我們會拿出大部分數據用於模型訓練,小部分數據用於對訓練後的模型驗證,驗證結果會與驗證集真實值(即標籤值)比較並計算出差平方和,此項工作重複進行,直至所有驗證結果與真實值相同,交叉驗證結束,模型交付使用。在這裏我們導入了sklearn庫的交叉驗證模塊,利用函數train_test_split()來劃分訓練集和驗證集。train_test_split()會根據test_size參數按比例劃分數據集,在這裏我們劃分出了30%的數據用於驗證,70%用於訓練模型。參數random_state用於指定一個隨機數種子,從全部數據中隨機選取數據建立訓練集和驗證集,所以你將會看到每次訓練的結果都會稍有不同。測試集也調用了這個函數。

    3.2.2改變圖像數據維度

    按照keras庫運行的後端系統要求改變圖像數據的維度順序;因爲keras建立在tensorflow或theano基礎上,換句話說,keras的後端系統可以是tensorflow也可以是theano。後端系統決定了圖像數據輸入CNN網絡時的維度順序,tensorflow的維度順序爲行數(rows)、列數(cols)、通道數(顏色通道,channels);theano則是通道數、行數、列數。所以,我們通過調用image_dim_ordering()函數來確定後端系統的類型(th’代表theano,'tf'代表tensorflow),然後我們再通過numpy提供的reshape()函數重新調整數組維度。

    3.2.3 one-hot編碼

    將數據標籤進行one-hot編碼,使其向量化,對標籤集進行one-hot編碼的原因是我們的訓練模型採用categorical_crossentropy作爲損失函數,這個函數要求標籤集必須採用one-hot編碼形式。因爲one-hot編碼採用狀態寄存器的組織方式對狀態進行編碼,每個狀態值對應一個寄存器位,且任意時刻,只有一位有效。對於我們的程序來說,我們類別狀態只有兩種(nb_classes = 2):0和1,0代表我,1代表others。one-hot編碼會提供兩個寄存器位保存這兩個狀態,如果標籤值爲0,則編碼後值爲[1 0],代表第一位有效;如果爲1,則編碼後值爲[0 1],代表第2爲有效。換句話說,one-hot編碼將數值變成了位置信息,使其向量化,這樣更方便CNN操作。

    3.2.4歸一化圖像數據

    數據集先浮點後歸一化的目的是提升網絡收斂速度,減少訓練時間,同時適應值域在(0,1)之間的激活函數,增大區分度。其實歸一化有一個特別重要的原因是確保特徵值權重一致。舉個例子,我們使用mse這樣的均方誤差函數時,大的特徵數值比如(5000-1000)2與小的特徵值(3-1)2相加再求平均得到的誤差值,顯然大值對誤差值的影響最大,但大部分情況下,特徵值的權重應該是一樣的,只是因爲單位不同才導致數值相差甚大。因此,我們提前對特徵數據做歸一化處理,以解決此類問題。

    3.3構建卷積神經網絡

    3.3.1卷積神經網絡結構

    本實驗的其中一層卷積神經網絡的結構如圖:

     

     

    本程序的神經網絡包含的結構如下

  8. 3個卷積層
  9. 2個池化層
  10. 3個激活函數層
  11. 3個Dropout層
  12. 2個全連接層
  13. 1個Flatten層
  14. 1個分類層
  15. 8,389,120個訓練參數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章