【深度学习】yolov8 seg实例分割训练,交通灯

文章目录

  • 一、类别定义
  • 二、标注后再清洗数据
  • 三、训练yolov8 seg
  • 四、部署
  • 五、代码资料

一、类别定义

类别0:

在这里插入图片描述

类别1:

在这里插入图片描述
类别2:

在这里插入图片描述

类别3:

在这里插入图片描述

类别4:

在这里插入图片描述
类别5:
在这里插入图片描述

类别6:

在这里插入图片描述

类别7:

在这里插入图片描述

二、标注后再清洗数据

删除没有标签json的图:

import os
import json

# Define the source directory containing the images and JSON files
src = r"G:\honglvdeng\images\xuanze_copy"

# List all files in the source directory
files = os.listdir(src)

# Separate image files and JSON files
image_files = [f for f in files if f.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif'))]
json_files = [f for f in files if f.lower().endswith('.json')]

# Create a set of base names of JSON files (without extension)
json_base_names = set(os.path.splitext(f)[0] for f in json_files)

# Iterate over the image files
for image_file in image_files:
    # Get the base name of the image file (without extension)
    base_name = os.path.splitext(image_file)[0]

    # Check if the corresponding JSON file exists
    if base_name not in json_base_names:
        # If not, delete the image file
        image_path = os.path.join(src, image_file)
        os.remove(image_path)
        print(f"Deleted image without annotation: {image_path}")

将圆形标签json转为txt yolo seg 多边形标签:

import os
import json
import math


def circle_to_polygon(center, radius, num_points=40):
    """Convert a circle to a polygon with a given number of points."""
    points = []
    for i in range(num_points):
        angle = 2 * math.pi * i / num_points
        x = center[0] + radius * math.cos(angle)
        y = center[1] + radius * math.sin(angle)
        points.append((x, y))
    return points


def convert_json_to_yolov8_format(json_file_path, output_dir):
    """Convert a JSON file to YOLOv8 segmentation format."""
    with open(json_file_path, 'r') as f:
        data = json.load(f)

    shapes = data.get('shapes', [])
    image_path = data.get('imagePath', '')
    image_height = data.get('imageHeight', 0)
    image_width = data.get('imageWidth', 0)

    yolov8_data = []

    for shape in shapes:
        if shape['shape_type'] == 'circle':
            center = shape['points'][0]
            edge = shape['points'][1]
            radius = math.sqrt((center[0] - edge[0]) ** 2 + (center[1] - edge[1]) ** 2)
            polygon_points = circle_to_polygon(center, radius)
            normalized_polygon_points = [(x / image_width, y / image_height) for x, y in polygon_points]
            yolov8_data.append({
                "label": shape['label'],
                "points": normalized_polygon_points
            })

    output_file_path = os.path.join(output_dir, os.path.splitext(os.path.basename(json_file_path))[0] + '.txt')

    with open(output_file_path, 'w') as f:
        for item in yolov8_data:
            label = item['label']
            points = ' '.join([f"{round(x, 6)} {round(y, 6)}" for x, y in item['points']])
            f.write(f"{label} {points}\n")


def process_directory(src):
    """Process all JSON files in the given directory."""
    for file_name in os.listdir(src):
        if file_name.endswith('.json'):
            json_file_path = os.path.join(src, file_name)
            convert_json_to_yolov8_format(json_file_path, src)


# Define the source directory containing the images and JSON files
src = r"G:\honglvdeng\images\xuanze_copy"
process_directory(src)

转移到新的数据集文件夹:

import os
import json
import math

import os
import json
import shutil

# Define the source directory containing the images and JSON files
src = r"G:\honglvdeng\images\xuanze_copy"
dst = r"G:\honglvdeng\images\xuanze_copy_yolo_seg_datasets"
os.makedirs(dst, exist_ok=True)

files = os.listdir(src)
image_files = [f for f in files if f.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif'))]
img_dst = os.path.join(dst, "images")
os.makedirs(img_dst, exist_ok=True)
for image_file in image_files:
    image_path = os.path.join(src, image_file)
    shutil.copy(image_path, img_dst)

json_files = [f for f in files if f.lower().endswith('.txt')]
json_dst = os.path.join(dst, "labels")
os.makedirs(json_dst, exist_ok=True)
for json_file in json_files:
    json_path = os.path.join(src, json_file)
    shutil.copy(json_path, json_dst)


三、训练yolov8 seg

train.py

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n-seg.pt")  # load a pretrained model (recommended for training)

# Train the model with 2 GPUs
results = model.train(data="hld-seg.yaml", epochs=100, imgsz=640, device=[0, 1, 2, 3], batch=16)

训练开启:

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

训练结束:

在这里插入图片描述

四、部署

对摄像头实时画面进行分割:

在这里插入图片描述

五、代码资料

下载所有资料:

链接:https://pan.baidu.com/s/1NtLgkmRfoCCqDD5axi-HRw?pwd=78xw 
提取码:78xw 

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

帮助:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】TCP协议【上】{协议段属性:源端口号/目的端口号/序号/确认序号/窗口大小/紧急指针/标记位}

文章目录 1.引入2.协议段格式4位首部长度16位窗口大小32位序号思考三个问题【demo】标记位URG: 紧急指针是否有效提升某报文被处理优先级【0表示不设置1表示设置】ACK: 确认号是否有效PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走RST: 对方要求重新建立连接; 我们把携带R…

Go 1.23 Release Notes编写方式改进!

2024.5.22日,Go 1.23 feature冻结!Go团队开始Go 1.23rc1的冲刺,截至发文时,Go 1.23 milestone已经完成59%(https://github.com/golang/go/milestone/212),还有188个open的issue待解决。 Go 1.23有哪些新feature&#x…

前后端开发入门全攻略:零基础学起

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、前后端开发概览 二、后端开发基础:Flask框架入门 代码案例:Hel…

Pytorch-01 框架简介

智能框架概述 人工智能框架是一种软件工具,用于帮助开发人员构建和训练人工智能模型。这些框架提供了各种功能,如定义神经网络结构、优化算法、自动求导等,使得开发人员可以更轻松地实现各种人工智能任务。通过使用人工智能框架,…

域内攻击 ----->约束非约束委派攻击

在域中,除了我们常见的横向移动以外,还有很多攻击,像什么kerberoasting,委派攻击,NTLMrelay啊...... 还有很多(暂时只知道这些) 以前在一篇公众号看到的一个笑话也荟萃了网安的一些攻击手法&am…

vue17:v-bind对css样式的控制增强

代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><styl…

Kafka(十三)监控与告警

目录 Kafka监控与告警1 解决方案1.2 基础知识JMX监控指标代理查看KafkaJMX远程端口 1.3 真实案例Kafka Exporter:PromethusPromethus Alert ManagerGrafana 1.3 实际操作部署监控和告警系统1.2.1 部署Kafka Exporter1.2.2 部署Prometheus1.2.3 部署AlertManger1.2.4 添加告警规…

缓存IO与直接IO

IO类型 缓存 I/O 缓存 I/O 又被称作标准 I/O&#xff0c;大多数文件系统的默认 I/O 操作都是缓存 I/O。在 Linux 的缓存 I/O 机制中&#xff0c;数据先从磁盘复制到内核空间的缓冲区&#xff0c;然后从内核空间缓冲区复制到应用程序的地址空间&#xff08;用户空间&#xff0…

java基础-JVM日志、参数、内存结构、垃圾回收器

一、基础基础 1.1 数据类型 Java的数据类型分为原始数据类型和引用数据类型。 原始数据类型又分为数字型和布尔型。 数字型又有byte、short、int、long、char、float、double。注意&#xff0c;在这里char被定义为整数型&#xff0c;并且在规范中明确定义&#xff1a;byte、…

阿里云的域名购买和备案(一)

前言 本篇文章主要讲阿里云的域名购买和备案。 大家好&#xff0c;我是小荣&#xff0c;我又开始做自己的产品迷途dev了。这里详细记录一下域名购买的流程和备案流程。视频教学 购买流程 1.阿里云官网搜索域名注册 2.搜索你想注册的域名 3.将想要注册的域名加入域名清单 4.点…

Java+原生HTML+ WebSocket+MySQL云HIS信息管理系统源码 支持一体化电子病历四级

Java原生HTML WebSocketMySQL云HIS信息管理系统源码 支持一体化电子病历四级 云HIS电子病历系统是一种基于云计算技术的医疗信息管理系统&#xff0c;旨在实现医疗信息的数字化、标准化和共享化。该系统通过云计算平台&#xff0c;将医院内部的各个业务模块&#xff08;如门诊、…

Spring系列-03-BeanFactory和Application接口和相关实现

BeanFactory BeanFactory和它的子接口们 BeanFactory 接口的所有子接口, 如下图 BeanFactory(根容器)-掌握 BeanFactory是根容器 The root interface for accessing a Spring bean container. This is the basic client view of a bean container; further interfaces such …

【深度学习实战—7】:基于Pytorch的多标签图像分类-Fashion-Product-Images

✨博客主页&#xff1a;王乐予&#x1f388; ✨年轻人要&#xff1a;Living for the moment&#xff08;活在当下&#xff09;&#xff01;&#x1f4aa; &#x1f3c6;推荐专栏&#xff1a;【图像处理】【千锤百炼Python】【深度学习】【排序算法】 目录 &#x1f63a;一、数据…

提示优化 | PhaseEvo:面向大型语言模型的统一上下文提示优化

【摘要】为大型语言模型 (LLM) 制作理想的提示是一项具有挑战性的任务&#xff0c;需要大量资源和专家的人力投入。现有的工作将提示教学和情境学习示例的优化视为不同的问题&#xff0c;导致提示性能不佳。本研究通过建立统一的上下文提示优化框架来解决这一限制&#xff0c;旨…

【讲解下PDM,PDM是什么?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

GEE批量导出逐日、逐月、逐季节和逐年的遥感影像(以NDVI为例)

影像导出 1.逐日数据导出2.逐月数据导出3.季节数据导出4.逐年数据导出 最近很多小伙伴们私信我&#xff0c;问我如何高效导出遥感数据&#xff0c;从逐日到逐季度&#xff0c;我都有一套自己的方法&#xff0c;今天就来和大家分享一下&#xff01;   &#x1f50d;【逐日导出…

基于51单片机的数字频率计(电路图+pcb+论文+仿真+源码)

于51单片机的数字频率计 设计的频率计范围能够达到1HZ-1MHZ(实际上51单片机达不到这个范围&#xff0c;不要在实验环境下进行)&#xff0c;这个是课设来着&#xff0c;用Proteus仿真实现的&#xff0c;给有需要的同学参考一下 仿真原理图如下&#xff08;proteus仿真工程文件可…

方言和大语言模型

方言多样性及其对语言模型的影响 语言的演变是不可避免的&#xff0c;反映并推动了重大的社会变革和传统。语言接触往往会推动我们说话方式的创新&#xff0c;在美国全球文化的影响下&#xff0c;一种新的叙事正在其语言织锦中展开。 例如&#xff0c;在佛罗里达州南部&#…

使用FFmpeg推流实现在B站24小时点歌直播

使用FFmpeg推流实现在B站24小时点歌直播 本文首发于个人博客 安装FFmpeg centos7 https://www.myfreax.com/how-to-install-ffmpeg-on-centos-7/ https://linuxize.com/post/how-to-install-ffmpeg-on-centos-7/ 使用FFmpeg在B站直播 https://zhuanlan.zhihu.com/p/2395…

内外网文件传输安全可控的方式有哪些?这几款软件值得参考

在信息化时代&#xff0c;随着企业对网络安全和数据保护需求的日益增强&#xff0c;内外网隔离已成为一种常见的网络安全策略。内外网隔离旨在防止未经授权的访问和数据泄露&#xff0c;确保企业网络的安全稳定。然而&#xff0c;在实施内外网隔离的同时&#xff0c;如何实现文…