yolov4-tf2使用VOC格式對Mask500進行訓練

文章目錄


前言

  最近開始從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

  安裝完成後,在命令行中測試是否安裝成功。
 
python
 
import tensorflow as tf
 
print("Tensorflow Version: {}".format(tf.__version__))
 
print(tf.test.is_gpu_available())
 
  已知配置tensorflow環境是個巨坑,這配置的過程中可能經過無數次的重新安裝,但是不要放棄,總會有安裝成功的時候,如有問題,自行百度和谷歌。
  安裝成功後,打開pycharm新建一個project,將在anaconda中創建的環境直接導入pycharm中(File→Settings→Project→Project Interpreter),稍作等待,便可以正常使用。
 

二、拷貝項目,導入pycharm中

  從githubhttps://github.com/bubbliiiing/yolov4-tf2.git(通過gitee拷貝gitub上的代碼,速度較快,這裏我已經拷貝到代碼倉庫中https://gitee.com/zht342423/yolov4-tf2.git)上拷貝源碼項目,下載完成後把項目解壓放進自己的pycharmproject文件下,打開項目。

三、準備權重文件

  訓練所需的yolo4_weights.h5可在百度網盤中下載。
  鏈接:  https://pan.baidu.com/s/1DNv71lDkeWff2BmnVpgHeg  提取碼: myz8

四、使用預訓練好的權重文件進行預測

 

1.測試圖片

將下載好的 yolo4_weights.h5或者yolo4_voc_weights.h5,放入model_data,運行predict.py,輸入

img/street.jpg

可完成預測,預測結果如下。

2.攝像頭檢測

  運行video.py可進行攝像頭檢測。

五、製作Mask500數據集

  這裏我將之前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文件中,每一行對應其圖片位置及其真實框的位置。

七、修改train.py 正式訓練

   在訓練前需要務必在model_data下新建一個txt文檔,文檔中包含 face和face_mask兩個標籤 ,在train.py中將classes_path指向該文件 ,如下:
classes_path = 'model_data/mask_classes.txt'
 
model_data/mask_classes.txt文件內容爲:
face
face_mask
 
  運行train.py即可開始訓練,訓練時間則根據顯卡來決定,訓練生成的權重會保存在logs文件夾中

八、對訓練完成的權重進行測試

修改根目錄文件下的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各五百張的數據集,可以看到預測結果並不完成正確,後續還可以通過增加數據集以及對數據進行增強,來逐步提高準確度。

  第一次寫博客,只能參考大佬們寫的東西,瑟瑟發抖,有什麼不對的地方歡迎評論指正。