赞
踩
本文是在之前的基于yolov5的人脸关键点检测项目上扩展来的。因为人脸目标检测的效果将直接影响到人脸关键点检测的效果,因此本文主要讲解利用yolov5训练人脸目标检测(关键点检测可以看我人脸关键点检测文章)
基于yolov5的人脸关键点检测:人脸关键点检测
torch>=1.5.0
这里使用的人脸数据集为WIDER FACE。
该数据集共有12880张图像
引用说明:
@inproceedings{yang2016wider, Author = {Yang, Shuo and Luo, Ping and Loy, Chen Change and Tang, Xiaoou}, Booktitle = {IEEE Conference on Computer Vision and Pattern Recognition (CVPR)}, Title = {WIDER FACE: A Face Detection Benchmark}, Year = {2016}}
下载数据集并解压至datasets,images中是图像,labels中是对应标签文件(已经做了归一化)
其中train_bak.txt是所有图像的相对路径(注意此时还没有划分真正的训练集、验证机和测试集),格式为:
./images/xxx.jpg
数据集百度云:
链接:https://pan.baidu.com/s/1O7pgjy77ur21jMm4lwwuQw
提取码:yypn
tran_bak.txt包含了12880张图像的相对路径
该脚本可以生成train.txt、val.txt和test.txt。如果你感觉训练过程毕竟慢,希望可以先得到一个训练模型,那么可以将lines=lines[:2000]注释去掉,这将仅从数据集中选择2000张图来进行训练和测试
- with open('datasets/train_bak.txt', 'r') as f:
- lines = f.readlines()
- # lines = lines[:2000] # 只取2000张
- # 随机打乱数据
- random.shuffle(lines)
- # 划分比例
- val_ratio = 0.1 # 验证集占比
- test_ratio = 0.1 # 测试集占比
- # 计算划分的索引
- val_index = int(len(lines) * val_ratio)
- test_index = int(len(lines) * (val_ratio + test_ratio))
- # 划分数据集
- val_data = lines[:val_index]
- test_data = lines[val_index:test_index]
- train_data = lines[test_index:]
-
- # 保存划分后的数据集到文件
- with open('datasets/val.txt', 'w') as f:
- f.writelines(val_data)
-
- with open('datasets/test.txt', 'w') as f:
- f.writelines(test_data)
-
- # 剩余的部分作为训练集
- with open('datasets/train.txt', 'w') as f:
- f.writelines(train_data)
上面完成了数据集的划分,然后和正常的yolov5训练一样,需要在data/下新建一个mydata.yaml文件,内容如下:
- train: ./datasets/train.txt
- val: ./datasets/val.txt
- test: ./datasets/test.txt
-
- # number of classes
- nc: 1
-
- # class names
- names: ['face']
python train.py --data data/mydata.yaml --weights yolov5s.pt
我这里仅训练了10个epoch(需要的可以自己继续训练),评价指标如下:
R | P | mAP_0.5 | mAP_0.5:0.95 |
0.521 | 0.7987 | 0.59592 | 0.28344 |
batch中标签预览图:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。