当前位置: 首页 > news >正文

【深度学习】YOLOv8训练,交通灯目标检测

文章目录

  • 一、数据处理
  • 二、环境
  • 三、训练
  • 数据下载

一、数据处理

在这里插入图片描述

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 or int(difficult) == 1:continuecls_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 = ["red", "green", "yellow", "off"]root = r"/ssd/xiedong/lightyolov5"img_path_1 = os.path.join(root, "Traffic-Lights-Dataset-Domestic/JPEGImages")xml_path_1 = os.path.join(root, "Traffic-Lights-Dataset-Domestic/Annotations")img_path_2 = os.path.join(root, "Traffic-Lights-Dataset-Foreign/JPEGImages")xml_path_2 = os.path.join(root, "Traffic-Lights-Dataset-Foreign/Annotations")dst_yolo_root = os.path.join(root, "Traffic-Lights-Dataset-YOLO")dst_yolo_root_img = os.path.join(dst_yolo_root, "images")os.makedirs(dst_yolo_root_img, exist_ok=True)dst_yolo_root_txt = os.path.join(dst_yolo_root, "labels")os.makedirs(dst_yolo_root_txt, exist_ok=True)index = 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:new_name = f"{index:06d}.jpg"img = cv2.imdecode(np.fromfile(os.path.join(img_path_1, img_id), dtype=np.uint8), 1)  # img是矩阵cv2.imwrite(os.path.join(dst_yolo_root_img, new_name), img)new_txt_name = f"{index:06d}.txt"yolo_annotations = convert_annotation_to_list(os.path.join(xml_path_1, img_id[:-4] + ".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))index += 1except:traceback.print_exc()img_path_1_files = os.listdir(img_path_2)xml_path_1_files = os.listdir(xml_path_2)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:new_name = f"{index:06d}.jpg"img = cv2.imdecode(np.fromfile(os.path.join(img_path_2, img_id), dtype=np.uint8), 1)  # img是矩阵cv2.imwrite(os.path.join(dst_yolo_root_img, new_name), img)new_txt_name = f"{index:06d}.txt"yolo_annotations = convert_annotation_to_list(os.path.join(xml_path_2, img_id[:-4] + ".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))index += 1except:traceback.print_exc()if __name__ == '__main__':main()

二、环境

conda create -n py310_yolo8 python=3.10 -yconda activate py310_yolo8conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=11.8 -c pytorch -c nvidiapip install ultralytics

data.yaml

path: /ssd/xiedong/lightyolov5/Traffic-Lights-Dataset-YOLO/
train: images
val: images
test: # test images (optional)# Classes
names:0: 'red'1: 'green'2: 'yellow'3: 'off'

三、训练

教程:

https://docs.ultralytics.com/modes/train/#comet

新建训练代码文件train.py:

from ultralytics import YOLO# Load a model
model = YOLO("yolov8s.pt")  # load a pretrained model (recommended for training)# Train the model with 2 GPUs
results = model.train(data="data.yaml", epochs=100, imgsz=640, device=[0, 1, 2, 3], batch=128)

开启训练:

python -m torch.distributed.run --nproc_per_node 4 train.py

结果会存在这里:

在这里插入图片描述
训练截图:

在这里插入图片描述
数据分布:

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

      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size99/100      8.53G     0.7946     0.3619     0.7988         13        640: 100%|██████████| 104/104 [00:15<00:00,  6.91it/s]Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 207/207 [00:31<00:00,  6.62it/s]all      13194      31308        0.9      0.632       0.74       0.54Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size100/100      8.54G      0.744     0.3433     0.7975          2        640: 100%|██████████| 104/104 [00:15<00:00,  6.88it/s]Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 207/207 [00:31<00:00,  6.58it/s]all      13194      31308      0.902      0.632      0.739       0.54100 epochs completed in 1.325 hours.
Optimizer stripped from runs/detect/train3/weights/last.pt, 22.5MB
Optimizer stripped from runs/detect/train3/weights/best.pt, 22.5MBValidating runs/detect/train3/weights/best.pt...
Ultralytics YOLOv8.2.19 🚀 Python-3.10.14 torch-2.1.2 CUDA:0 (NVIDIA A100-PCIE-40GB, 40339MiB)CUDA:1 (NVIDIA A100-PCIE-40GB, 40339MiB)CUDA:2 (NVIDIA A100-PCIE-40GB, 40339MiB)CUDA:3 (NVIDIA A100-PCIE-40GB, 40339MiB)
Model summary (fused): 168 layers, 11127132 parameters, 0 gradients, 28.4 GFLOPsClass     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 207/207 [00:37<00:00,  5.51it/s]all      13194      31308      0.902      0.632      0.739       0.54red      13194      13150      0.958      0.768      0.879      0.666green      13194      16030      0.961      0.727      0.866      0.655yellow      13194        830      0.901       0.58      0.677      0.469off      13194       1298      0.787      0.455      0.536      0.369
Speed: 0.0ms preprocess, 0.5ms inference, 0.0ms loss, 0.5ms postprocess per image
Results saved to runs/detect/train3

数据下载

链接:https://pan.baidu.com/s/1z2wpvnt40y-o0228rU7IIQ?pwd=buzx 
提取码:buzx 

帮助:

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

相关文章:

【深度学习】YOLOv8训练,交通灯目标检测

文章目录 一、数据处理二、环境三、训练数据下载 一、数据处理 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,…...

紧固件松动的危害及原因——SunTorque智能扭矩系统

智能扭矩系统-智能拧紧系统-扭矩自动控制系统-SunTorque 紧固件松动&#xff0c;这一看似微小的机械问题&#xff0c;实际上可能引发一系列严重的后果。在机械设备中&#xff0c;紧固件扮演着至关重要的角色&#xff0c;它们通过紧固作用将各个部件紧密连接在一起&#xff0c;…...

Android-okhttp调接口传参简单举例

步骤1&#xff1a;在主线程中创建thread调接口 new Thread(new Runnable() {Overridepublic void run() {getServiceList();}}).start();步骤2&#xff1a;okhttp调接口 private void getServiceList(){Message msg new Message();try{OkHttpClient okHttpClient new OkHttp…...

复习java5.26

面向对象和面向过程 面向过程&#xff1a;把一个任务分成一个个的步骤&#xff0c;当要执行这个任务的时候&#xff0c;只需要依次调用就行了 面向对象&#xff1a;把构成任务的事件构成一个个的对象&#xff0c;分别设计这些对象&#xff08;属性和方法&#xff09;、然后把…...

学 Python 具体能干什么?

Python 是一种功能强大、用途广泛的编程语言&#xff0c;因其简洁易读的语法和丰富的库生态系统而备受欢迎。学习 Python后&#xff0c;你可以从事以下几方面的工作&#xff1a; 1. Web 开发 Python 有很多流行的 Web 框架&#xff0c;如&#xff1a; Django&#xff1a;一个…...

福昕PDF使用技巧

因为突然间学校的企业版WPS突然很多功能就不能使用了&#xff0c;所以转向福昕PDF。 一、合并文件 添加需要合并的文件&#xff0c;可以使用ctrla等方式全选 找到最上方的“合并文件” 二、文本注释...

条款8:了解各种不同意义的new和delete

有时候我们觉得&#xff0c;C的术语仿佛是要故意让人难以理解似的。 这里就有一个例子&#xff1a;请说明new operator 和operator new 之间的差异&#xff08;译注&#xff1a;本书所说的new operator&#xff0c;即某些C教程如C Primer 所谓的new expression) 当你写出这样…...

windows 搭建 go开发环境

go语言&#xff08;或 Golang&#xff09;是Google开发的开源编程语言&#xff0c;诞生于2006年1月2日下午15点4分5秒&#xff0c;于2009年11月开源&#xff0c;2012年发布go稳定版。Go语言在多核并发上拥有原生的设计优势&#xff0c;Go语言从底层原生支持并发&#xff0c;无须…...

Android 布局中@NULL的使用和代码实现方式详解

文章目录 1、使用场景2、示例代码实现2.1、移除背景2.2 、移除文本2.3、移除布局宽度或高度2.4、移除提示文本2.5、移除图像资源 3、综合示例3.1、布局文件 activity_main.xml3.2、主活动文件 MainActivity.java3.4、资源文件3.5、运行结果 4、优点5、缺点6、综合分析6.1、适用…...

服务器数据恢复—同友存储raid5阵列上层虚拟机数据恢复案例

服务器数据恢复环境&#xff1a; 某市教育局同友存储&#xff0c;存储中有一组由数块磁盘组建的raid5阵列&#xff0c;存储空间划分若干lun。每个lun中有若干台虚拟机&#xff0c;其中有数台linux操作系统的虚拟机为重要数据。 存储结构&#xff1a; 服务器故障&#xff1a; r…...

我得近况说明

最近转入了Django开发工作&#xff0c;所以主要方向在Python开发。...

C语言——在头⽂件中#if、_STDC_等字⾏起什么作⽤?

一、问题 通常&#xff0c;⼀些程序员都不会去研究头⽂件中的内容是什么含义&#xff0c;总觉得乱乱的&#xff0c;有很多 #if、_STDC_、#line 等字符&#xff0c;那么这些字符都各代表什么呢&#xff0c;在头⽂件中又起到什么作⽤呢&#xff1f; 二、解答 在头⽂件中存在类似…...

解密MySQL中的临时表:探究临时表的神奇用途

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 解密MySQL中的临时表&#xff1a;探究临时表的神奇用途 前言临时表的定义与分类创建与使用临时表临时表的操作与管理优化与性能提升注意事项与最佳实践 前言 在数据库管理中&#xff0c;临时表是一个…...

Go 语言简介 -- 高效、简洁与现代化编程的完美结合

在现代软件开发领域&#xff0c;选择合适的编程语言对于项目的成功至关重要。Go 语言&#xff08;又称 Golang &#xff09;自 2009 年由Google发布以来&#xff0c;以其简洁的语法、高效的并发模型以及强大的性能&#xff0c;迅速成为开发者们的新宠。Go语言不仅融合了传统编译…...

绝缘鞋计量校准周期多长时间合适?校验检测方法是什么?

绝缘鞋的计量校准&#xff0c;通常是应用在电学相关领域&#xff0c;因此也是属于计量校准机构中的电学室管辖的范围&#xff0c;而绝缘鞋为了安全防护&#xff0c;也是采用了绝缘材料&#xff0c;其标准要求耐电压至少在15KV以下&#xff0c;可应用于工频&#xff08;50到60F&…...

python-13(案例讲解)

目录 抓取链家前十页的数据 计算均价和总价 计算的类型&#xff08;整租&#xff0c;合租&#xff09; 计算的房型 抓取boss直聘前十页的数据 抓取boss直聘前十页的数据 将获取数据本地序列化 计算每个区的需求个数与均价 抓取链家前十页的数据 链家网址&#xff1a;长…...

【深度学习】最强算法之:人工神经网络(ANN)

人工神经网络ANN 1、引言2、人工神经网络(ANN)2.1 定义2.1.1 定义2.1.2 应用场景 2.2 核心原理2.3 实现方式2.4 算法公式2.5 代码示例 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c;看新闻没&#xff1f; 小鱼&#xff1a;新闻天天看&#xff0c;啥事大惊小怪的。 小屌…...

Unity vscode在mac上的编译环境设置

在settings.json文件中配置以下信息。 settings.json路径一般在/Users/xxx/Library/Application Support/Code/User/settings.json {"omnisharp.useGlobalMono": "always","editor.fontLigatures": false,"omnisharp.useModernNet": …...

【Java】在高并发场景下,保证 Redis 缓存一致性的几种方案

在高并发场景下&#xff0c;保证 Redis 缓存一致性是一个常见的挑战。以下是几种常见的解决方案及其优缺点&#xff0c;以及相应的代码示例。 1. Cache Aside Pattern (旁路缓存模式) 原理 读取数据时&#xff0c;先读缓存&#xff0c;如果缓存没有命中&#xff0c;再从数据…...

GaussDB数据库的备份与恢复

1.逻辑备份-gs_dump gs_dump是一款用于导出数据库相关信息的工具&#xff0c;支持导出完整一致的数据库对象&#xff08;数据库、模式、表、视图等&#xff09;数据&#xff0c;同时不影响用户对数据库的正常访问。 备份sql语句 gs_dump是openGauss用于导出数据库相关信息的工…...

01-16-15 模板方法模式 - Activity生命周期的模板方法

01-16-15 模板方法模式 - Activity生命周期的模板方法 模式定义 模板方法模式&#xff08;Template Method Pattern&#xff09;属于行为型设计模式&#xff0c;其核心思想是&#xff1a;在父类中定义一个算法的骨架&#xff0c;将某些步骤的具体实现延迟到子类。子类在不改变…...

终极指南:如何提升实时多人姿态估计算法的可解释性与可信度

终极指南&#xff1a;如何提升实时多人姿态估计算法的可解释性与可信度 【免费下载链接】Realtime_Multi-Person_Pose_Estimation Code repo for realtime multi-person pose estimation in CVPR17 (Oral) 项目地址: https://gitcode.com/gh_mirrors/re/Realtime_Multi-Perso…...

OpenClaw+SecGPT-14B技能扩展:自动化渗透测试报告生成

OpenClawSecGPT-14B技能扩展&#xff1a;自动化渗透测试报告生成 1. 为什么需要自动化渗透测试报告 每次红队演练结束后&#xff0c;最让我头疼的就是整理渗透测试报告。传统流程需要手动整理Nmap扫描结果、Burp Suite截图、漏洞验证步骤&#xff0c;再粘贴到Word模板里调整格…...

Wan2.2-I2V-A14B模型生成复古像素艺术与游戏角色Sprite

Wan2.2-I2V-A14B模型生成复古像素艺术与游戏角色Sprite 1. 复古像素艺术的魅力重现 还记得小时候玩红白机时&#xff0c;那些由简单像素点构成的游戏世界吗&#xff1f;虽然画面简单&#xff0c;但那些8-bit和16-bit风格的图像却承载着我们最美好的游戏记忆。如今&#xff0c…...

广州SEO优化服务有哪些

广州SEO优化服务&#xff1a;全面提升网站排名的关键策略 在当前竞争激烈的互联网环境中&#xff0c;广州SEO优化服务显得尤为重要。搜索引擎优化&#xff08;SEO&#xff09;不仅能够提高网站在搜索结果中的排名&#xff0c;还能有效地吸引更多的潜在客户。广州SEO优化服务有…...

使用VS Code开发SenseVoice-Small模型应用的完整指南

使用VS Code开发SenseVoice-Small模型应用的完整指南 1. 开发环境配置 1.1 基础环境准备 在开始开发SenseVoice-Small模型应用之前&#xff0c;需要先确保你的开发环境准备就绪。VS Code作为轻量级但功能强大的代码编辑器&#xff0c;非常适合这类AI模型的开发工作。 首先确…...

OpenClaw多通道管理:飞书+钉钉同时接入Phi-3-mini-128k-instruct

OpenClaw多通道管理&#xff1a;飞书钉钉同时接入Phi-3-mini-128k-instruct 1. 为什么需要多通道管理 上周我在整理团队周报时遇到了一个典型问题&#xff1a;部分同事习惯在飞书群里提交需求&#xff0c;另一些则偏好通过钉钉直接我。这种多渠道沟通导致任务分散&#xff0c…...

RWKV7-1.5B-G1A模型部署与MATLAB科学计算联动方案

RWKV7-1.5B-G1A模型部署与MATLAB科学计算联动方案 1. 引言&#xff1a;科研工作者的新助手 科研工作中最耗时的往往不是实验本身&#xff0c;而是数据处理后的文字工作。想象这样一个场景&#xff1a;你刚完成一组复杂的MATLAB仿真实验&#xff0c;面对密密麻麻的数据图表&am…...

使用Phi-4-mini-reasoning优化算法设计:从思路到代码的智能转换

使用Phi-4-mini-reasoning优化算法设计&#xff1a;从思路到代码的智能转换 1. 算法工程师的新助手 作为一名算法工程师&#xff0c;你是否经常遇到这样的场景&#xff1a;面对一个复杂的业务需求&#xff0c;脑海中已经有了初步的算法思路&#xff0c;但要把这个思路转化为可…...

Audio Pixel Studio保姆级教程:Windows/Mac/Linux三平台本地部署详解

Audio Pixel Studio保姆级教程&#xff1a;Windows/Mac/Linux三平台本地部署详解 1. 引言&#xff1a;极简像素音频工作站 Audio Pixel Studio是一款基于Streamlit开发的轻量级音频处理Web应用&#xff0c;它将专业级音频处理能力封装在清新简约的界面中。无论你是内容创作者…...