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各五百张的数据集,可以看到预测结果并不完成正确,后续还可以通过增加数据集以及对数据进行增强,来逐步提高准确度。

  第一次写博客,只能参考大佬们写的东西,瑟瑟发抖,有什么不对的地方欢迎评论指正。