基于YOLOv5的人脸目标检测

本文是在之前的基于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)

新建mydata.yaml

上面完成了数据集的划分,然后和正常的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(需要的可以自己继续训练),评价指标如下:

RPmAP_0.5mAP_0.5:0.95
0.521
0.7987
0.59592
0.28344

 

batch中标签预览图: 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/42447.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ STL容器:序列式容器-堆pirority_queue

摘要: CC STL(Standard Template Library,标准模板库)在C编程中的重要性不容忽视,STL提供了一系列容器、迭代器、算法和函数对象,这些组件极大地提高了C程序的开发效率和代码质量。 STL 容器 分为 2 大类 …

[Python学习篇] Python文件操作

文件操作 打开文件 open 语法: file open(name, mode) 说明: file:文件对象。 name:要打开的目标文件名的字符串(可以包含文件所在的具体路径)。 mode:设置打开文件的模式(访问模式):只读、写入、追加等…

批导会计凭证程序报错,通过监控点和消息类来定位触发的位置

ZFIU001 批导会计凭证报错,通过监控点和消息类来定位触发的位置 在使用程序导入会计凭证的时候,发现报错,后面找了很久很久的系统标准程序,打断点才找到这个位置,使用监控点还是可以比较快速找到报错的原因的&#xff…

QWidget窗口抗锯齿圆角的一个实现方案(支持子控件)2

QWidget窗口抗锯齿圆角的一个实现方案(支持子控件)2 本方案使用了QGraphicsEffect,由于QGraphicsEffect对一些控件会有渲染问题,比如列表、表格等,所以暂时仅作为研究,优先其他方案 在之前的文章中&#…

C# LINQ 详细用法以及概念

LINQ(Language Integrated Query)是C#和.NET框架中的一个强大功能,它允许开发者使用查询语法来访问和操作数据集合。LINQ提供了一种一致且直观的方式来处理不同类型的数据源,如集合、XML文档、数据库等。本文将详细讲解LINQ的各种…

计算机网络-第4章 网络层

4.1网络层的几个重要概念 4.1.1网络层提供的两种服务 电信网面向连接通信方式,虚电路VC。 互联网设计思路:网络层要设计得尽量简单,向其上层只提供简单灵活的,尽最大努力交付的数据报服务。 网络层不提供服务质量的承诺&#…

使用 Spring 配置邮件服务器

在现代的企业应用开发中,邮件发送是一个常见的需求。Spring 提供了强大的邮件支持,使得配置和发送邮件变得非常简单。本文将介绍如何在 Spring 应用中配置邮件服务器并发送电子邮件。 1. 引入 Spring 邮件依赖 首先,在项目的 pom.xml 文件中…

昇思学习打卡-10-ShuffleNet图像分类

文章目录 网络介绍网络结构部分实现对应网络结构 模型训练shuffleNet的优缺点总结优点不足 网络介绍 ShuffleNet主要应用在移动端,所以模型的设计目标就是利用有限的计算资源来达到最好的模型精度。ShuffleNetV1的设计核心是引入了两种操作:Pointwise G…

Activity启动模式探究

一、概括 Activity的启动模式主要分为四种:standard(标准模式)、singleTop(栈顶复用模式)、singleTask(栈内复用模式)和singleInstance(单例模式)。每种模式都有其特定的…

日常学习--20240705

1、IO流 按照IO操作的数据类型分为字节流和字符流: 字节流:又分为输入流(其他程序传递过来的数据,读取流中的数据)和输出流(往流中写数据,传递给其他程序);可以操作二进制文件&…

国内采用docker部署open-metadata

背景 最近看看开源的元数据管理项目,比较出名点的有open-metadata、datahub、OpenLineage、atlas。 open-metadata有1千多的贡献者,4.8K的stars,社区现在也比较活跃,支持的数据库类型还蛮多,基本市面上常见的都有支持…

使用Python连接本地MySQL数据库并创建表后添加数据

一、使用Python连接本地MySQL数据库并创建表后添加数据 端口号:3307 用户名:root 密码:lms123456 数据库:test_01 from orm import *# 数据库连接对象 db MySQLDatabase(host"localhost",port3307,user"root…

【每日一练】python三目运算符的用法

""" 三目运算符与基础运算的对比 """ a 1 b 2#1.基础if运算判断写法: if a > b:print("基础判断输出:a大于b") else:print("基础判断输出: a不大于b")#2.三目运算法判断:…

揭秘IP:从虚拟地址到现实世界的精准定位

1.IP地址介绍 1.内网 IP 地址(私有 IP 地址) 内网 IP 地址,即私有 IP 地址,是在局域网(LAN)内部使用的 IP 地址。这些地址不会在公共互联网中路由,因此可以在多个局域网中重复使用。私有 IP 地…

股票Level-2行情是什么,应该怎么使用,从哪里获取数据

行情接入方法 level2行情websocket接入方法-CSDN博客 相比传统的股票行情,Level-2行情为投资者打开了更广阔的视野,不仅限于买一卖一的表面数据,而是深入到市场的核心,提供了十档乃至千档的行情信息(沪市十档&#…

解决Java中的跨平台开发与部署问题

解决Java中的跨平台开发与部署问题 大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 1. 跨平台开发的挑战与需求 随着软件应用的普及和多样化,开发人员经常面临将应用程序在不同操作系统…

STM32第十六课:WiFi模块的配置及应用

文章目录 需求一、WiFi模块概要二、配置流程1.配置通信串口,引脚和中断2.AT指令3.发送逻辑编写 三、需求实现代码总结 需求 完成WiFi模块的配置,使其最终能和服务器相互发送消息。 一、WiFi模块概要 本次使用的WiFi模块为ESP-12F模块(安信可&#xf…

【LLM第8篇】Delta Tuning

如何对large-scale PLM进行调整呢? 一个有效的方式是delta tuning;只更新PLM中的一小部分参数,其它参数不动。 把解决任务的能力具象化成delta object这样的参数,只需要几十兆参数存储。 过去模型参数是随机的,现在预…

【MySQL】逻辑架构与存储引擎

一、逻辑架构 1、MySQL逻辑架构 我们可以根据上图来对sql的执行过程进行分析 第一步:客户端与服务器建立一个连接,从连接池中分配一个线程处理SQL语句第二步:SQL接口接受SQL指令第三步:如果是5.7版本,就会先去缓存中…