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

文章目录

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

1、yolo原理

见上一篇博客

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

①下载口罩数据集和yolov4代码包
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第1张图片
②由于该数据集中有xml文件,所以直接将xml文件复制到下面这个位置
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第2张图片win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第3张图片
③将训练图片复制到以下位置
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第4张图片
④划分数据集
代码如下:

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文件:
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第5张图片
⑤复制以下文件到yolov4项目中
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第6张图片
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第7张图片
⑥添加类别信息
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第8张图片
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第9张图片
⑦运行以下两个代码
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第10张图片
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第11张图片
⑧运行train.py,生成权重文件,我设置的训练轮数为5,这里需要等待一段时间
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第12张图片
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第13张图片
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第14张图片
⑨训练完成,将生成以下文件:
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第15张图片
⑩加载权重,修改以下地方的内容:
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第16张图片
⑪将测试照片导入项目中
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第17张图片
⑫运行predict.py进行预测测试
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第18张图片
运行结果:
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第19张图片
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第20张图片
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第21张图片
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第22张图片

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

①运行video.py,调用摄像头测试自己的人脸
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第23张图片
②结果:
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第24张图片
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第25张图片
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第26张图片

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

①输入以下内容:
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第27张图片
②点击该链接:
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第28张图片
③结果如下:
win10下yolov4 keras/tensorflow版本训练口罩数据集并测试、完成摄像头采集自己人脸对表情的实时分类判读_第29张图片

5、总结

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

6、参考链接

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

你可能感兴趣的:(python,tensorflow,深度学习)