文章目录
前言
最近开始从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())
二、拷贝项目,导入pycharm中
从githubhttps://github.com/bubbliiiing/yolov4-tf2.git(通过gitee拷贝gitub上的代码,速度较快,这里我已经拷贝到代码仓库中https://gitee.com/zht342423/yolov4-tf2.git)上拷贝源码项目,下载完成后把项目解压放进自己的pycharmproject文件下,打开项目。
三、准备权重文件
四、使用预训练好的权重文件进行预测
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 正式训练
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各五百张的数据集,可以看到预测结果并不完成正确,后续还可以通过增加数据集以及对数据进行增强,来逐步提高准确度。
第一次写博客,只能参考大佬们写的东西,瑟瑟发抖,有什么不对的地方欢迎评论指正。