最近開始從yolov3開始看起,慢慢的嘗試訓練自己的數據集,這裏從github上的大佬https://github.com/bubbliiiing這裏拷貝下來的yolov4-tf2項目,嘗試用yolov4對自己製作的口罩數據集進行訓練。
使用anaconda進行配置tensorflow-gpu2.3環境。
conda install cudatoolkit=10.1
conda install cudnn=7.6.5
pip install -i https://pypi.douban.com/simple tensorflow-GPU==2.3.0
pip install -i https://pypi.douban.com/simple pandas matplotlib sklearn
pythonimport tensorflow as tfprint("Tensorflow Version: {}".format(tf.__version__))print(tf.test.is_gpu_available())
從githubhttps://github.com/bubbliiiing/yolov4-tf2.git(通過gitee拷貝gitub上的代碼,速度較快,這裏我已經拷貝到代碼倉庫中https://gitee.com/zht342423/yolov4-tf2.git)上拷貝源碼項目,下載完成後把項目解壓放進自己的pycharmproject文件下,打開項目。
將下載好的 yolo4_weights.h5或者yolo4_voc_weights.h5,放入model_data,運行predict.py,輸入
img/street.jpg
可完成預測,預測結果如下。
運行video.py可進行攝像頭檢測。
這裏我將之前yolov3的口罩項目的6000張數據集進行重新分類,選取了500張face和500張face_mask標籤以及50張同時包含face和face_mask標籤的圖片作爲Mask500數據集,防止出現擬合問題。注意,在製作數據集的過程中,保存的xml文件中不要有中文標籤,文件夾中也不要有空格。
這裏是我製作完成的數據集,下載鏈接:https://pan.baidu.com/s/1axPFQkNdkY_Sqe9gvL3wcA 提取碼:sj5f
複製這段內容後打開百度網盤手機App,操作更方便哦。
將下載好的文件中,標籤文件放在VOCdevkit文件夾下的VOC2007文件夾下的Annotation中,圖片文件放在VOCdevkit文件夾下的VOC2007文件夾下的JPEGImages中。利用voc2yolo4.py生成對應的txt,運行結果如下。
再運行根目錄下的voc_annotation.py,運行前需要將classes改成mask_classes,其中包含face和face_mask兩個標籤。
classes = ["face", "face_mask"]
運行結果如下。
在根目錄下生成的三個txt文件中,每一行對應其圖片位置及其真實框的位置。
classes_path = 'model_data/mask_classes.txt'
faceface_mask
修改根目錄文件下的yolo.py文件,將model_path和classes_path分別指向訓練完成的權重文件和classes文件,如下。
"model_path": 'logs/logstrained_weights_stage_1.h5'
"classes_path": 'model_data/mask_classes.txt'
每次迭代都會生成一個權重文件,選擇合適的權重文件作爲測試。
修改完成後,運行predict.py,輸入
test.jpg
預測結果如下。
當然也可以利用video.py可進行攝像頭檢測,帶上口罩測試一下吧!
到此訓練過程結束。
由於數據集只有包含face和face_mask各五百張的數據集,可以看到預測結果並不完成正確,後續還可以通過增加數據集以及對數據進行增強,來逐步提高準確度。
第一次寫博客,只能參考大佬們寫的東西,瑟瑟發抖,有什麼不對的地方歡迎評論指正。