win10下yolov4 kerastensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读

    技术2025-10-16  9

    文章目录

    1、yolo原理2、采用yolov4对口罩数据集正负样本划分、模型训练和测试3、调用摄像头采集自己的人脸对表情实时分类判读4、查看loss曲线和val_loss曲线变化5、总结6、参考链接

    1、yolo原理

    见上一篇博客

    2、采用yolov4对口罩数据集正负样本划分、模型训练和测试

    ①下载口罩数据集和yolov4代码包 ②由于该数据集中有xml文件,所以直接将xml文件复制到下面这个位置 ③将训练图片复制到以下位置 ④划分数据集 代码如下:

    import os import numpy as np import codecs import json from glob import glob import cv2 import shutil from sklearn.model_selection import train_test_split labelme_path = "D:\\kouzhao\\mask\\train" + os.sep # 原始labelme标注数据路径 saved_path = "D:\\kouzhao\\mask\\train" + os.sep + "VOC2007" + os.sep # 保存路径 # 2.创建要求文件夹 if not os.path.exists(saved_path + "Annotation"): os.makedirs(saved_path + "Annotations") if not os.path.exists(saved_path + "JPEGImages" + os.sep): os.makedirs(saved_path + "JPEGImages" + os.sep) if not os.path.exists(saved_path + "ImageSets" + os.sep + "Main" + os.sep): os.makedirs(saved_path + "ImageSets" + os.sep + "Main" + os.sep) txtsavepath = saved_path + "ImageSets" + os.sep + "Main" + os.sep ftrainval = open(txtsavepath + os.sep + 'trainval.txt', 'w') ftest = open(txtsavepath + os.sep + 'test.txt', 'w') ftrain = open(txtsavepath + os.sep + 'train.txt', 'w') fval = open(txtsavepath + os.sep + 'val.txt', 'w') # 需要修改路径 total_files = glob("D:\\kouzhao\\mask\\train" + os.sep + "VOC2007" + os.sep + "Annotation" + os.sep + "*.xml") total_files = [i.split(os.sep)[-1].split(".xml")[0] for i in total_files] trainval_files = [] test_files = [] trainval_files, test_files = train_test_split(total_files, test_size=0.1, random_state=55) for file in trainval_files: ftrainval.write(file + "\n") train_files, val_files = train_test_split(trainval_files, test_size=0.1, random_state=55) # train for file in train_files: ftrain.write(file + "\n") # val for file in val_files: fval.write(file + "\n") for file in test_files: print(file) ftest.write(file + "\n") ftrainval.close() ftrain.close() fval.close() ftest.close()

    划分结果,将生成以下txt文件: ⑤复制以下文件到yolov4项目中 ⑥添加类别信息 ⑦运行以下两个代码 ⑧运行train.py,生成权重文件,我设置的训练轮数为5,这里需要等待一段时间 ⑨训练完成,将生成以下文件: ⑩加载权重,修改以下地方的内容: ⑪将测试照片导入项目中 ⑫运行predict.py进行预测测试 运行结果:

    3、调用摄像头采集自己的人脸对表情实时分类判读

    ①运行video.py,调用摄像头测试自己的人脸 ②结果:

    4、查看loss曲线和val_loss曲线变化

    ①输入以下内容: ②点击该链接: ③结果如下:

    5、总结

    可以看到loss曲线和val_loss曲线都呈下降趋势,所以该训练网络正常,训练结果还算比较好,但是由于训练轮数或者训练照片过少,有漏掉目标的情况,后续我会改善这些地方,提高模型的精确度。

    6、参考链接

    ①https://blog.csdn.net/shuaigeek/article/details/105210500 ②https://blog.csdn.net/Dongjiuqing/article/details/84763430

    Processed: 0.009, SQL: 9