【應用】臉部辨識 – TensorFlow x deep learning (三)
上一篇文章帶您初步完成了人臉辨識的實作,現在來到了這系列的最終章,將介紹如何訓練分類器,並評估成果。
在 Tensorflow 創建嵌入 (Embeddings)
處理完數據之後,下一步就是產生每張人臉的嵌入(embedding),而這些嵌入後續可以用來作為分類、回歸或叢集分析使用。
下載權重(Weights)
您將使用 Inception Resnet V1 作為卷積神經網絡。首先,創建一個文件來下載模型的權重。藉由遷移學習,我們可以將預先訓練好的權重應用在新的數據集上。以下將會使用 LFW 數據集為例:
docker run -v $PWD:/medium-facenet-tutorial \
-e PYTHONPATH=$PYTHONPATH:/medium-facenet-tutorial \
-it colemurray/medium-facenet-tutorial python3 /medium-facenet-tutorial/medium_facenet_tutorial/download_and_extract_model.py \
--model-dir /medium-facenet-tutorial/etc
載入遷入
接下來,你將利用 Tensorflow 的 queue API 來平行載入已經預處理好的圖片。通過使用列隊 (queues),可以使用多線程平行載入圖片。使用 GPU 時,這使你可以在 CPU 上執行圖片預處理,並在 GPU上執行行矩陣乘法。
訓練分類器
輸入隊列處理好後,下一步是創建嵌入。
首先,你將從你創建的隊列中載入圖片。在開始訓練前,還有一步額外的預處理步驟:對圖片添加隨機變換,例如翻轉或是亮度及對比的改變,以增加訓練用的資料
在訓練模型時,我們會以 128 張圖片作為一個批次(batch)。而對於每張圖片,此模型會回傳一個 128 維度的嵌入,所以每一個批次會回傳一個 128(每張圖片的嵌入維度) x 128(每個批次的圖片張數) 的矩陣。
接下來,這些嵌入將被做為 scikit-learn SVM 分類器的輸入特徵值,以訓練出一個可以進行身份識別的分類器。如果其中某個身份的人臉資料少於 10 張圖片的話,則該身份資料將忽略不計,此參數可以經由命令行調整。
docker run -v $PWD:/medium-facenet-tutorial \
-e PYTHONPATH=$PYTHONPATH:/medium-facenet-tutorial \
-it colemurray/medium-facenet-tutorial \
python3 /medium-facenet-tutorial/medium_facenet_tutorial/train_classifier.py \
--input-dir /medium-facenet-tutorial/output/intermediate \
--model-path /medium-facenet-tutorial/etc/20170511-185253/20170511-185253.pb \
--classifier-path /medium-facenet-tutorial/output/classifier.pkl \
--num-threads 16 \
--num-epochs 25 \
--min-num-images-per-class 10 \
--is-train
# ~16 mins to complete on MBP
評估結果
訓練好分類器之後,就可以使用訓練資料之外的新圖片進行測試。只要將前述指令中的 is_train 去除就可以評估實驗結果。
docker run -v $PWD:/$(basename $PWD) \
-e PYTHONPATH=$PYTHONPATH:/medium-facenet-tutorial \
-it colemurray/medium-facenet-tutorial \
python3 /medium-facenet-tutorial/medium_facenet_tutorial/train_classifier.py \
--input-dir /medium-facenet-tutorial/output/intermediate \
--model-path /medium-facenet-tutorial/etc/20170511-18253/20170511-185253.pb \
--classifier-path /medium-facenet-tutorial/output/classifier.pkl \
--num-threads 16 \
--num-epochs 5 \
--min-num-images-per-class 10
完成每個圖片的推論後,你會在 console 看到如下結果。
延伸閱讀:
1. 如何在 TensorFlow 使用深度學習建立臉部辨識 (一)
2. 如何在 TensorFlow 使用深度學習建立臉部辨識 (二)
(原文經授權且翻譯自:https://goo.gl/oKQrHa)