一、項目簡介
fine-tune YOLO v3 + FaceNet進行人臉識別,辨別。
1. 項目結構
--data
--|------baseface 圖片、根據這些圖片訓練的128d向量,以及文件夾與人名的映射文件
---------|------0 第一個人的圖片tag=0
---------|------1 第二個人的圖片tag=1
......
---------|------n 第n個人的圖片tag=n
---------|------map.txt 文件夾與人名的映射,依次放即可
---------|------vector.csv 根據這些圖片得到的128維向量以及其類別(文件夾名)
--|------weights_facenet 模型文件(facenet)
--|------weights_yolo 模型(fune-tuning的yolo v3)
--|------weights_svm 模型(根據csv文件訓練的svm模型)
--|------face-names 預測類別,默認即可
--|------yolo_anchors.txt 訓練yolo v3時聚類得到的anchors框
--net yolo和facenet的網絡
--preprocessing 預處理工具,下文的使用方法前期步驟都需要在這裡運行
--setting 模型參數,可根據需要修改
--utils 封裝的一些方法
--test.py 主體方法
2.模型文件(權重)
yolo_face模型
yolo v3是基於論文作者模型,在Wider Face數據上fine-tuning的。 可以到這裡下載,密碼qli4。
facenet模型
- model-20170512-110547,請到這裡下載,密碼9x2l
- model-20180408-102900,請到這裡下載,密碼jjf1
- model-20180402-114759(推薦),請到這裡下載,密碼56mh
3.yolo v3
YOLO v3的詳細預測和訓練,可到本人另一個項目YOLO_v3_tensorflow瞭解。
4.踩的坑
- fine-tune yolo v3時使用的是wider face數據集,其中有兩個標註框是寬度或高度為0的,錯誤標註,篩選的時候需要去除掉這兩個標註框,否則nms會報除0的異常。
- 訓練svm時,需要標準化,預測時需要用同參數標準化再預測,否則svm預測結果都相同。
- 之前使用model-20170512-110547模型,輸出128d向量,效果不好,換成model-20180402-114759模型,輸出512d向量,效果有所提升。
- 每個人15張臉部圖片,訓練svm效果一般,可以增大樣本量或者使用一些svm的tricks。
三、使用方法
項目需要安裝以下包
<code>numpy==1.16.4
pandas==0.24.2
opencv-python==4.1.1
scikit-learn=0.21.2
tensorflow==1.13.1
pillow==6.1.0/<code>
1.放置模型文件
下載yolo_face和facenet模型文件,放置在data文件夾下,如圖
2.製作自己的人臉數據集
截取需要識別的人物的臉部圖片,一人一個文件夾,文件夾名稱從0開始依次累加,放在路徑data/base_face下。
並修改data/map.txt,以空格分隔,下標和人臉文件夾名一一對應(map.txt中第一條下標為0,對應data/base_face/0文件夾)。
3.使用工具將圖片轉換成向量並存儲
運行preprecessing/pre_tools.py內的save_vector_csv(),自動將圖片使用facenet轉換為128d或512d向量,並存儲為data/base_face/vector.csv。
4.訓練svm分類器
基於已經儲存的vector.csv文件,進行標準化後,運行preprecessing/pre_tools.py內的train_face_svm(),使用scikit-learn訓練svm模型,並儲存在data/weights_svm/svm.pkl中。
5.開始測試
5.1圖片測試
放在data/test_img下,將setting/yolo_args.py中的detect_object改為img,input_image 改為圖片路徑。
運行根目錄下的
test.py文件。另外如果要存儲檢測後的圖片,將setting/yolo_args.py中的output_image改為要存儲的路徑,並保證各層級文件夾存在。
5.2視頻測試
放在data/test_video下,將setting/yolo_args.py中的detect_object改為video,input_video 改為視頻路徑。
運行根目錄下的test.py文件。
另外如果要存儲檢測後的視頻,將setting/yolo_args.py中的output_video改為要存儲的路徑,並保證各層級文件夾存在。
gitee:https://gitee.com/windandwine/Argus
閱讀更多 雲瑄軟件 的文章