【深度学习】安全帽检测,目标检测,yolov10算法,yolov10训练

文章目录

  • 一、数据集
  • 二、yolov10介绍
  • 三、数据voc转换为yolo
  • 四、训练
  • 五、验证
  • 六、数据、模型、训练后的所有文件

寻求帮助请看这里:

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

一、数据集

安全帽佩戴检测
数据集:https://github.com/njvisionpower/Safety-Helmet-Wearing-Dataset
基准模型:
在这里插入图片描述

二、yolov10介绍

听说过yolov10吗:https://www.jiqizhixin.com/articles/2024-05-28-7

论文:

https://arxiv.org/abs/2405.14458

代码:

https://github.com/THU-MIG/yolov10

三、数据voc转换为yolo

调整一下,整成这样:

VOC2028 # tree -L 1
.
├── images
├── labels
├── test.txt
├── train.txt
├── trainval.txt
└── val.txt2 directories, 4 files

写为绝对路径:

# 定义需要处理的文件名列表
file_names = ['test.txt', 'train.txt', 'trainval.txt', 'val.txt']for file_name in file_names:# 打开文件用于读取with open(file_name, 'r') as file:# 读取所有行lines = file.readlines()# 打开(或创建)另一个文件用于写入修改后的内容,这里使用新的文件名表示已修改new_file_name = 'modified_' + file_namewith open(new_file_name, 'w') as new_file:# 遍历每一行并进行修改for line in lines:# 删除行尾的换行符,添加'.jpg''images/',然后再添加回换行符modified_line = '/ssd/xiedong/yolov10/VOC2028/images/' + line.strip() + '.jpg\n'# 将修改后的内容写入新文件new_file.write(modified_line)print("所有文件处理完成。")

转yolo txt:

import traceback
import xml.etree.ElementTree as ET
import os
import shutil
import random
import cv2
import numpy as np
from tqdm import tqdmdef convert_annotation_to_list(xml_filepath, size_width, size_height, classes):in_file = open(xml_filepath, encoding='UTF-8')tree = ET.parse(in_file)root = tree.getroot()# size = root.find('size')# size_width = int(size.find('width').text)# size_height = int(size.find('height').text)yolo_annotations = []# if size_width == 0 or size_height == 0:for obj in root.iter('object'):difficult = obj.find('difficult').textcls = obj.find('name').textif cls not in classes:classes.append(cls)cls_id = classes.index(cls)xmlbox = obj.find('bndbox')b = [float(xmlbox.find('xmin').text),float(xmlbox.find('xmax').text),float(xmlbox.find('ymin').text),float(xmlbox.find('ymax').text)]# 标注越界修正if b[1] > size_width:b[1] = size_widthif b[3] > size_height:b[3] = size_heighttxt_data = [((b[0] + b[1]) / 2.0) / size_width, ((b[2] + b[3]) / 2.0) / size_height,(b[1] - b[0]) / size_width, (b[3] - b[2]) / size_height]# 标注越界修正if txt_data[0] > 1:txt_data[0] = 1if txt_data[1] > 1:txt_data[1] = 1if txt_data[2] > 1:txt_data[2] = 1if txt_data[3] > 1:txt_data[3] = 1yolo_annotations.append(f"{cls_id} {' '.join([str(round(a, 6)) for a in txt_data])}")in_file.close()return yolo_annotationsdef main():classes = []root = r"/ssd/xiedong/yolov10/VOC2028"img_path_1 = os.path.join(root, "images")xml_path_1 = os.path.join(root, "labels")dst_yolo_root_txt = xml_path_1index = 0img_path_1_files = os.listdir(img_path_1)xml_path_1_files = os.listdir(xml_path_1)for img_id in tqdm(img_path_1_files):# 右边的.之前的部分xml_id = img_id.split(".")[0] + ".xml"if xml_id in xml_path_1_files:try:img = cv2.imdecode(np.fromfile(os.path.join(img_path_1, img_id), dtype=np.uint8), 1)  # img是矩阵new_txt_name = img_id.split(".")[0] + ".txt"yolo_annotations = convert_annotation_to_list(os.path.join(xml_path_1, img_id.split(".")[0] + ".xml"),img.shape[1],img.shape[0],classes)with open(os.path.join(dst_yolo_root_txt, new_txt_name), 'w') as f:f.write('\n'.join(yolo_annotations))except:traceback.print_exc()# classesprint(f"我已经完成转换 {classes}")if __name__ == '__main__':main()

vim voc2028x.yaml

train: /ssd/xiedong/yolov10/VOC2028/modified_train.txt
val: /ssd/xiedong/yolov10/VOC2028/modified_val.txt
test: /ssd/xiedong/yolov10/VOC2028/modified_test.txt# Classes
names:0: hat1: person

四、训练

环境:

git clone https://github.com/THU-MIG/yolov10.git
cd yolov10
conda create -n yolov10 python=3.9 -y
conda activate yolov10
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

训练

yolo detect train data="/ssd/xiedong/yolov10/voc2028x.yaml" model=yolov10s.yaml epochs=200 batch=64 imgsz=640 device=1,3

在这里插入图片描述

训练启动后:

在这里插入图片描述
训练完成后:

在这里插入图片描述

五、验证

yolo val model="/ssd/xiedong/yolov10/runs/detect/train2/weights/best.pt" data="/ssd/xiedong/yolov10/voc2028x.yaml" batch=32 imgsz=640 device=1,3

在这里插入图片描述
map50平均达到0.94,已超出基准很多了。

预测:

yolo predict model=yolov10n/s/m/b/l/x.pt

导出:

# End-to-End ONNX
yolo export model=yolov10n/s/m/b/l/x.pt format=onnx opset=13 simplify
# Predict with ONNX
yolo predict model=yolov10n/s/m/b/l/x.onnx# End-to-End TensorRT
yolo export model=yolov10n/s/m/b/l/x.pt format=engine half=True simplify opset=13 workspace=16
# Or
trtexec --onnx=yolov10n/s/m/b/l/x.onnx --saveEngine=yolov10n/s/m/b/l/x.engine --fp16
# Predict with TensorRT
yolo predict model=yolov10n/s/m/b/l/x.engine

demo:

wget https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10s.pt
python app.py
# Please visit http://127.0.0.1:7860

在这里插入图片描述

在这里插入图片描述

六、数据、模型、训练后的所有文件

yolov10训练安全帽目标监测全部东西,下载看这里:

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

MySql part1 安装和介绍

MySql part1 安装和介绍 数据 介绍 什么是数据库,数据很好理解,一般来说数据通常是我们所认识的 描述事物的符号记录, 可以是数字、 文字、图形、图像、声音、语言等,数据有多种形式,它们都以经过数字化后存入计算机…

Nuxt3项目实现 OG:Image

目录 前言 1、安装 2、设置网站 URL 3、启用 Nuxt DevTools 4、创建您的第一个Og:Image a. 定义OG镜像 b. 查看您的Og:Image 5、自定义NuxtSeo模板 a. 定义 NuxtSeo模板 b. 使用其他可用的社区模板 6、创建自己的模板 a. 定义组件 BlogPost.vue b. 使用新模板 c.…

vue3 watch学习

watch的侦听数据源类型 watch的第一个参数为侦听数据源,有4种"数据源": ref(包括计算属性) reactive(响应式对象) getter函数 多个数据源组成的数组。 //ref const xref(0)//单个ref watch(x,(newX)>{console.…

Python库之Scrapy-Redis的高级用法深度解析

Python库之Scrapy-Redis的高级用法深度解析 引言 Scrapy-Redis作为Scrapy框架的扩展库,不仅支持基本的分布式爬取功能,还提供了一系列的高级用法,使得爬虫的开发和维护更加灵活和高效。本文将深入探讨Scrapy-Redis的高级用法,帮…

python实训——回归类型数据挖掘任务

回归类型数据挖掘任务 基于ARIMA和多层神经网络模型的地铁站点日客流量预测。有郑州市2015年8月-11月各地铁闸机刷卡数据集。对每日各地铁站的客流量进行分析并进行可视化。基于上一步的分析结果,分别采用ARIMA模型和多层神经网络模型对数据进行建模,训…

Usage - hackthebox

简介 靶场:hackmyvm 靶机:Usage(10.10.11.18) 难度:Easy 靶机链接:https://app.hackthebox.com/machines/Usage 攻击机1:ubuntu22.04 (10.10.16.21) 攻击机2:windows11(10.10.14.33) 扫描 nmap起手 nmap -sT …

Centos7.9环境下keepalived结合nginx实现负载均衡的高可用(亲测版)

目录 一、负载均衡高可用解释 二、安装 三、Nginx检查脚本创建 四、修改keepalived配置文件 一、负载均衡高可用解释 nginx 作为负载均衡器,所有请求都到了nginx,如果nginx服务器宕机后端web服务将无法提供服务,影响严重。这样nginx作为负…

大一C语言课设 服装销售系统 代码实现与项目总结

问题分析 服装信息管理及销售管理系统。方便对库存服装的信息管理和添加新服装数据,同时兼具库存数量管理功能。 功能实现 1、建立服装信息库,包括:服装代码、型号、规格、面料、颜色、单价、数量; 2、建立销售信息库&#xff…

lua拼接字符串

在Lua中,拼接字符串可以使用多种方法,包括使用..操作符、string.format函数,或者使用循环和table.concat函数。下面是一些常见的字符串拼接示例: 使用..操作符 local part1 "Hello" local part2 "World" lo…

类和对象(中)【类的6个默认成员函数】 【零散知识点】 (万字)

类和对象(中) 1.类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数&#xff1…

【Python】如何使用 Python 自动发送每日电子邮件报告

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

整合Spring Boot 框架集成Knife4j

本次示例使用Spring Boot作为脚手架来快速集成Knife4j,Spring Boot版本2.3.5.RELEASE ,Knife4j版本2.0.7 POM.XML完整文件代码如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0…

智能合约引领:探索Web3的商业革新之路

随着区块链技术的迅速发展&#xff0c;智能合约作为其重要应用之一&#xff0c;正在逐步改变着商业世界的格局。Web3作为下一代互联网的代表&#xff0c;正引领着智能合约在商业领域的广泛应用和创新。本文将深入探讨智能合约在Web3中的作用&#xff0c;以及智能合约如何引领着…

【正在线上召开】2024机器智能与数字化应用国际会议(MIDA2024),免费参会

【ACM出版】2024机器智能与数字化应用国际会议&#xff08;MIDA2024&#xff09; 2024 International Conference on Machine Intelligence and Digital Applications 【支持单位】 宁波财经学院 法国上阿尔萨斯大学 【大会主席】 Ljiljana Trajkovic 加拿大西蒙菲莎大…

【JavaScript脚本宇宙】跨越边界:挖掘JavaScript验证库的无限可能

引领技术潮流&#xff1a;六大顶级JavaScript验证库解析 前言 在现代编程中&#xff0c;数据验证是一个非常重要的环节。本文将探索六种不同的JavaScript数据验证库&#xff0c;分别介绍它们的概述&#xff0c;主要特性&#xff0c;使用示例和使用场景。 欢迎订阅专栏&#x…

PHP身份证真假API在线文档、身份证ocr识别、身份证三要素人像核验

翔云PHP身份证真假API文档&#xff0c;为开发者提供了一个详尽的操作指南和接口说明。通过简洁明了的文档&#xff0c;开发者可以轻松集成身份证验证功能到各类网站或应用程序中&#xff0c;无需从零开始编写复杂的验证逻辑&#xff0c;大大缩短了开发周期&#xff0c;降低了技…

使用画图工具修改图片文字

方法思路&#xff1a; 使用背景色将需要修改的文字覆盖&#xff0c;然后在原来的地方加入修改后的字。 第一步&#xff1a; 选中图片后右键&#xff0c;选择“编辑”&#xff08;默认会使用画图工具打开&#xff09; 第二步&#xff1a; 选取颜色选取器&#xff0c;如下图 使…

cpprestsdk https双向认证小测

概述 因项目需要在系统中引入https双向认证&#xff0c;由于程序使用C/C和cpprestsdk库编写&#xff0c;从网上经过一顿检索折腾&#xff0c;总算测试通过&#xff0c;故而博文记录用以备忘。 系统环境 Ubuntu 22.04.3 LTS libcpprest-dev&#xff08;jammy,now 2.10.18-1bu…

【Text2SQL 论文】DIN-SQL:分解任务 + 自我纠正 + in-context 让 LLM 完成 Text2SQL

论文&#xff1a;DIN-SQL: Decomposed In-Context Learning of Text-to-SQL with Self-Correction ⭐⭐⭐⭐ NeurIPS 2023, arXiv:2304.11015 Code: Few-shot-NL2SQL-with-prompting | GitHub 文章目录 一、论文速读1.1 Schema Linking Module1.2 Classification & Decompo…

【每日刷题】Day52

【每日刷题】Day52 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 2965. 找出缺失和重复的数字 - 力扣&#xff08;LeetCode&#xff09; 2. 350. 两个数组的交集 II …