【目标检测】【Ultralytics-YOLO系列】Windows11下YOLOV5人脸目标检测

【目标检测】【Ultralytics-YOLO系列】Windows11下YOLOV5人脸目标检测

文章目录

  • 【目标检测】【Ultralytics-YOLO系列】Windows11下YOLOV5人脸目标检测
  • 前言
  • YOLOV5模型运行环境搭建
  • YOLOV5模型运行
    • 数据集准备
    • YOLOV5运行
      • 模型训练
      • 模型验证
      • 模型推理
  • 总结


前言

Ultralytics YOLO 是一系列基于 YOLO(You Only Look Once)算法的检测、分割、分类、跟踪和姿势估计模型,由 Ultralytics 公司开发和维护,YOLO 算法以其快速和准确的目标检测能力而闻名。从最初的YOLOv1到最新的YOLOv11,每一代版本都在特征提取、边界框预测和优化技术等方面引入了重要的创新。这些改进特别是在骨干网络(backbone)、颈部(neck)和头部(head)组件上的进步,使得YOLO成为实时目标检测领域的领先解决方案。
【YOLO的发展历程参考】YOLOv5 旨在实时提供高速、高精度的结果,本博文将通过人脸检测项目简要介绍Ultralytics–YOLOv5的使用。【官方教程】【官方源码】


YOLOV5模型运行环境搭建

在win11环境下装anaconda环境,方便搭建专用于YOLOV5模型的虚拟环境。

  • 查看主机支持的cuda版本(最高)
    # 打开cmd,执行下面的指令查看CUDA版本号
    nvidia-smi
    
  • 安装GPU版本的torch【官网】
    博主的cuda版本是12.2,博主选的11.8也没问题。

    其他cuda版本的torch在【以前版本】找对应的安装命令。
  • 博主安装环境参考
    # 创建虚拟环境
    conda create -n ultralytics python=3.10
    # 查看新环境是否安装成功
    conda env list
    # 激活环境
    activate ultralytics
    # cd到合适的位置下载yolov5源码 
    git clone https://github.com/ultralytics/yolov5 
    cd yolov5
    # 切换到一个特定的v7.0版本
    git checkout tags/v7.0
    # 安装pytorch和torchvision,否则容易自动安装成CPU版本(不知原因)
    pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
    # 安装运行所需的包,修改requirements中Pillow==9.5,删除torch和torchvision部分
    pip install -r requirements.txt
    # 安装 opencv
    # 查看所有安装的包
    pip list
    conda list
    

YOLOV5模型运行

数据集准备

  1. 数据集下载:人脸目标检测数据集WIDER_FACE_VOC2007.zip【百度云下载,提取码:u2b9 】,以下是下载的数据集格式

     WIDER_VOC2007└── Annotations		标签	├── 000001.xml├── 000002.xml├── ...└── ImageSets├── Main|   ├── train.txt	训练集|   ├── val.txt		验证集└── JPEGImages		图片├── 000001.jpg├── 000002.jpg├── ...
    
  2. 数据集格式转化:将原始标签的xml格式转化Ultralytics-YOLO的txt格式。

    每幅图像对应一个txt文件,如果图像中没有检测对象则不需要txt文件。
    每个对象占一行,每一行中包含的内容为:类别(class )、中心X坐标(x_center)、中心Y坐标(y_center)、图像宽度(width)和图像高度(height)。
    中心坐标已经宽高都做了归一化处理,从0到 1;类别编号从0开始。
    在这里插入图片描述

    这里博主提供了转化的python代码。

    import os
    import xml.etree.ElementTree as ETdef parse_xml(xml_file):# 解析XML文件tree = ET.parse(xml_file)root = tree.getroot()# 获取图像尺寸size = root.find('size')width = int(size.find('width').text)height = int(size.find('height').text)# 初始化结果列表objects = []# 遍历所有的object标签for obj in root.findall('object'):name = obj.find('name').textdifficult = int(obj.find('difficult').text)# 只处理name为'face'且difficult为0的对象if name == 'face' and difficult == 0:bndbox = obj.find('bndbox')xmin = int(bndbox.find('xmin').text)ymin = int(bndbox.find('ymin').text)xmax = int(bndbox.find('xmax').text)ymax = int(bndbox.find('ymax').text)# 计算中心点坐标和宽高x_center = (xmin + xmax) / 2.0y_center = (ymin + ymax) / 2.0box_width = xmax - xminbox_height = ymax - ymin# 归一化处理x_center /= widthy_center /= heightbox_width /= widthbox_height /= height# 添加到结果列表objects.append((0, x_center, y_center, box_width, box_height))return objectsdef save_to_txt(objects, txt_file):with open(txt_file, 'w') as f:for obj in objects:line = ' '.join([str(x) for x in obj]) + '\n'f.write(line)def process_directory(input_directory, output_directory):# 确保输出目录存在if not os.path.exists(output_directory):os.makedirs(output_directory)# 遍历输入目录下的所有XML文件for filename in os.listdir(input_directory):if filename.endswith('.xml'):xml_file = os.path.join(input_directory, filename)txt_file = os.path.join(output_directory, filename.replace('.xml', '.txt'))# 解析XML并获取所需信息objects = parse_xml(xml_file)# 将结果保存到TXT文件save_to_txt(objects, txt_file)if __name__ == "__main__":input_directory = r'Annotations'  # 替换为你的XML文件所在目录output_directory = r'labels'  # 替换为你的输出目录process_directory(input_directory, output_directory)
    
  3. 数据集组织结构:将原始数据划分成训练集和测试集,并在当前yolov5工程下新建路径datasets/facedetection,将train和val数据集放到该路径下。

     facedetection└── train├── images|   ├── 000001.jpg|   ├── 000002.jpg|   ├── ...├── labels|   ├── 000001.txt|   ├── 000002.txt|   ├── ...└── val├── images|   ├── 000007.jpg|   ├── 0000010.jpg|   ├── ...├── labels|   ├── 000007.txt|   ├── 0000010.txt|   ├── ...
    

    这里博主提供了转化的python代码。

    import os
    import shutil
    import random# 原始文件路径
    image_dir = r'JPEGImages'
    label_dir = r'labels'# 新的文件路径
    train_dir = r'train'
    val_dir = r'val'# 创建新的文件夹
    os.makedirs(os.path.join(train_dir, 'images'), exist_ok=True)
    os.makedirs(os.path.join(train_dir, 'labels'), exist_ok=True)
    os.makedirs(os.path.join(val_dir, 'images'), exist_ok=True)
    os.makedirs(os.path.join(val_dir, 'labels'), exist_ok=True)# 获取所有图像文件名
    image_files = [f for f in os.listdir(image_dir) if f.endswith('.jpg')]# 设置随机种子以保证结果可复现
    random.seed(42)# 打乱文件列表
    random.shuffle(image_files)# 计算训练集和验证集的数量
    split_index = int(0.8 * len(image_files))
    train_files = image_files[:split_index]
    val_files = image_files[split_index:]# 复制训练集文件
    for file_name in train_files:image_path = os.path.join(image_dir, file_name)label_path = os.path.join(label_dir, os.path.splitext(file_name)[0] + '.txt')# 复制图像文件shutil.copy(image_path, os.path.join(train_dir, 'images', file_name))# 复制标签文件shutil.copy(label_path, os.path.join(train_dir, 'labels', os.path.splitext(file_name)[0] + '.txt'))# 复制验证集文件
    for file_name in val_files:image_path = os.path.join(image_dir, file_name)label_path = os.path.join(label_dir, os.path.splitext(file_name)[0] + '.txt')# 复制图像文件shutil.copy(image_path, os.path.join(val_dir, 'images', file_name))# 复制标签文件shutil.copy(label_path, os.path.join(val_dir, 'labels', os.path.splitext(file_name)[0] + '.txt'))print("数据集划分完成")
    
  4. 配置facedetection.yaml:博主根据data/coco128.yaml文件,在data目录下同样配置了人脸目标检测的facedetection.yaml。

    path: datasets/facedetection		# 数据集路径
    train: train/images					# 训练集
    val: val/images						# 验证集
    names:								# 标签序号0: face
    

YOLOV5运行

模型训练

train.py配置训练参数:在有标注的者训练集进行模型的训练,并在验证集上评估。

常用参数含义
weights:指定预训练模型的权重文件;
cfg:存储模型结构的配置文件;
data:存储训练、测试数据的配置文件;
batch-size:一次训练的图片数量;
img-size:输入图片宽高,根据需求和硬件条件修改;
device:模型运行的设备,cuda 0,1,2,3或者cpu.
其他参数在后续讲解具体代码的过程中再去解释。

训练运行以下命令:

python train.py --img 640 --epochs 300 --data data/facedetection.yaml --batch 16 --weights yolov5s.pt --cfg yolov5s.yaml --device 0  

weights 参数和 cfg 参数对应的模型有冲突,以 cfg 指定的模型为基准。

模型验证

val.py参数验证配置:在有标注的者验证集上进行模型效果的评估模型好坏,目标检测中最常使用的评估指标为mAP。

常用参数含义
data:存储训练、测试数据的配置文件;
weights:指定预训练模型的权重文件;
batch-size:一次验证的图片数量;
img-size:输入图片宽高,根据需求和硬件条件修改;
device:模型运行的设备,cuda 0,1,2,3或者cpu;
augment:额外的数据增强.
其他参数在后续讲解具体代码的过程中再去解释。

验证运行以下命令:

python val.py --img 640  --data data/facedetection.yaml --batch 16 --weights runs/train/exp/weights/best.pt  --device 0 --augment

这里博主随便找了一次训练过程中的中间训练权重进行演示,所以精度不是很高。

模型推理

detect.py配置推理参数:没有标注的数据集上进行推理。

常用参数含义
weights:指定预训练模型的权重文件;
img-size:输入图片宽高,根据需求和硬件条件修改;
device:模型运行的设备,cuda 0,1,2,3或者cpu;
–conf-thres:指定置信度阈值;
–iou-thres:非极大值抑制IoU 阈值;
–augment:额外的数据增强.
其他参数在后续讲解具体代码的过程中再去解释。

推理运行以下命令:

python detect.py --weights runs/train/exp/weights/best.pt --source data/images --device 0 --conf-thres 0.7 --iou-thres 0.3

总结

尽可能简单、详细的介绍了YOLOV5的安装流程以及YOLOV5的使用方法。后续会根据自己学到的知识结合个人理解讲解YOLOV5的原理和代码。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【启明智显分享】5G CPE与5G路由器到底有什么区别?

5G路由器和5G CPE在功能和应用场景上存在很明显的差异,小编做了详细比较,希望能帮助到你进一步了解他们的区别及应用。 一、定义与功能 5G路由器 5G路由器是一个将5G网络连接转换为Wi-Fi信号的设备,使多个Wi-Fi设备可以通过5G网络进行连接…

【go从零单排】File Paths文件路径

🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在 Go 中,处理文件路径通常使用 path/filepath 包。这个包提供了一系…

【数据分享】中国渔业统计年鉴(1979-2024) pdf

数据介绍 一、《中国渔业统计年鉴》以正式出版年份标序。其统计数据起讫日期:渔民家庭收支调查起讫时间为 2022年11月1日至2023年10月31日,其他数据起讫时间为2023年1月1日至2023年12月31日。 二、统计数据中,远洋渔业数据按照远洋渔业管理办法进行统计…

Windows10“大限”将至或加速政企信创进程

近日,微软公司正式宣布将于2025年10月14日终止对Windows 10系统的支持服务。Windows 10“退休”在即,信息安全风险陡增——对此,360织语的安全专家认为,对于政企用户而言,不管是选择继续使用Windows 10,还是…

文本嵌入方案大总结:从词向量到句向量

这里写目录标题 文本嵌入方案总结一、文本嵌入三种层次 词向量应用: 句向量应用: 扩展:文本嵌入和句子相似度、文本匹配的逻辑关系? 二、词向量有哪些方案、优缺点、工具?方案一:统计编码方案二&…

第23天Linux下常用工具(二)

目录 第四章 GDB调试工具 4.1gdb的作用 4.2调试代码的流程 4.3gdb的安装 4.4 gdb的使用 第五章 makefile工程管理工具 5.1makefile的作用 5.2makefile的运行 5.3make的安装 5.4makefile的编写方法 5.5makefile的语法 5.6makefile使用示例 第四章 GDB调试工具 4.1g…

ubuntu22.04与ubuntu24.10使用Remmina远程桌面共享

1. ubuntu22.04启用远程桌面共享 点击Remote Desktop,按下图设置 成功启用 2.ubuntu24.10远程桌面启用 选择远程桌面选项 启用远程桌面共享与远程控制 启用远程登陆

基于51单片机的高压锅控制系统proteus仿真

地址: https://pan.baidu.com/s/16BuxmKYUprTGbkEj_BWGvQ 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectro…

D3的竞品有哪些,D3的优势,D3和echarts的对比

D3 的竞品 ECharts: 简介: ECharts 是由百度公司开发的一款开源的 JavaScript 图表库,提供了丰富的图表类型和高度定制化的配置选项。特点: 易于使用,文档详尽,社区活跃,支持多种图表类型(如折线图、柱状图、饼图、散点…

2024年11月13日

1.创业法律指南 留置权和其他三个权 定金和订金 一般保证和连带保证 1.案例 物权编之担保法律制度案例一 冯系养鸡专业户,为改建鸡会和引进良种需资金20万元。冯向陈借款10万元,以自己的一套价值10万元的音响设备抵押,双方立有抵押字据&a…

从电动汽车到车载充电器:LM317LBDR2G 线性稳压器在汽车中的多场景应用

附上LM317系列选型: LM317BD2TG-TO-263 LM317BTG-TO-220 LM317BD2TR4G-TO-263 LM317D2TG-TO-263 LM317D2TR4G-TO-263 LM317TG-TO-220 LM317LBDR2G-SOP-8 LM317LDR2G-SOP-8 LM317MABDTG-TO-252 LM317MABDTRKG-TO-252 LM317MA…

健康之路三度冲击港交所,数字健康医疗平台IPO前景引关注

健康之路股份有限公司(HealthyWay Inc.)再次向港交所递交招股书,拟在主板上市。此前两次尝试未果,但公司用户基础坚实,业务覆盖广泛,包括健康医疗服务和企业服务及数字营销服务。股东阵容强大,营…

SpringCloud篇(配置中心 - Nacos)

目录 一、Nacos 配置中心 1. 统一配置管理 1.1. 在nacos中添加配置文件 1.2. 从微服务拉取配置 1.2.1. 引入nacos-config依赖 1.2.2. 添加bootstrap.yaml 1.2.3. 读取nacos配置 1.2.4. 页面访问 2. 配置热更新:两种 2.1. 方式一 2.2. 方式二 3. 配置共享…

vue2和vue3的区别详解

vue2 VS vue3 对比vue2vue3配置脚手架cmd命令行可视化方式创建脚⼿架组件通信props、$emit、provide、$arrts、EventBus等props、$emit、provide、inject、arrts等数据监听watch,computedwatch,watchEffect,computed双向绑定Object.definePropertyProxyAPI⽣命周期四个阶段befo…

高中数学:概率-相关运算性质

文章目录 一、概率定义二、运算性质三、事件相互独立四、频率与概率五、练习 一、概率定义 二、运算性质 基本性质 互斥事件的性质 对立事件性质 包含事件的性质 有交集但不包含的事件性质 三、事件相互独立 注意: 四、频率与概率 五、练习

我要学kali-linux之shell脚本编程1

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…

概率密度与功率谱密度的理解与仿真

引言 概率密度(Probability Density)是统计学中十分重要的概念之一,其应用广泛;功率谱密度(power spectral density, PSD)则在电子电气行业用得比较多。 在基于雷达的目标检测中:概率密度和功率…

数据中台解决方案

文件是关于数据中台解决方案的详细介绍,内容涵盖了数据中台的定义、建设方案、实施步骤、以及在数字化转型中的作用。以下是对文件内容的分析和总结: 1. 数字化转型背景 国家政策支持:提到了《中华人民共和国国民经济和社会发展第十四个五年…

Spring Task详细讲解

✨Spring Task简介 Spring Task 是 Spring 提供的轻量级定时任务工具,也就意味着不需要再添加第三方依赖了,相比其他第三方类库更加方便易用。可以按照约定的时间自动执行某个代码逻辑。 使用场景: 信用卡每月还款提醒银行贷款每月还款提醒…

RabbitMQ运维

1. 单机多节点 1.1 搭建RabbitMQ ①安装RabbitMQ 略 ②确认RabbitMQ运⾏没问题 #查看RabbitMQ状态 rabbitmqctl status 节点名称: 端口号: 25672:Erlang分布式节点通信的默认端⼝, Erlang是RabbitMQ的底层通信协议.15672: Web管理界⾯的默认端⼝, 通过这个端⼝可以访问R…