【语义分割】记录2:yolo系列

图像分割笔记

  • 1、源码下载
  • 2、数据获取
  • 3、环境配置
  • 4、模型训练
  • 5、模型推理
  • 6、模型部署
    • 6.1 yolov5_flask学习
  • 7、版本上传

1、源码下载

git clone https://github.com/ultralytics/ultralytics.git

git回到对应版本:

方式一:使用 git checkout(临时查看旧版本)

git checkout <commit-hash>
git checkout v8.3.170

方式二:使用 git reset(永久回退当前分支)

git reset --hard <commit-hash>

查看距离哪个标签最近

# 查看某个提交的最近标签
git describe abc1234# 只显示标签名(忽略距离)
git describe --tags --abbrev=0 abc1234# 查看当前提交的最近标签
git describe

2、数据获取

1、yolo官方分割数据集: https://docs.ultralytics.com/zh/datasets/segment/#ultralytics-yolo-format
https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.zip
2、 自己标注数据集
通过网盘分享的文件:马
链接: https://pan.baidu.com/s/1vX9WokV8Nx-MzHXZt8Ppnw?pwd=4xca 提取码: 4xca
3、参考链接
(1)基于YOLOv11的语义分割模型训练自己的数据集:
https://blog.csdn.net/qq_51828120/article/details/147215779
(2)基于yolo11-seg的水果桃子语义分割:
https://mp.weixin.qq.com/s/a2Ln_zGvO07lep5oJqhZ4w?login=from_csdn

2、人工标注数据集后转yolo
2.1 文件夹划分
datadir_preprocess.py

import os
import shutil# 原始文件夹路径
source_folder = r"D:\songlin\data\8.图像分割相关\马"# 创建目标文件夹
json_folder = os.path.join(source_folder, "json")
image_folder = os.path.join(source_folder, "image")# 如果目标文件夹不存在,则创建
os.makedirs(json_folder, exist_ok=True)
os.makedirs(image_folder, exist_ok=True)# 遍历文件夹中的所有文件
for filename in os.listdir(source_folder):file_path = os.path.join(source_folder, filename)# 如果是JSON文件,移动到json_files文件夹if filename.endswith(".json"):shutil.move(file_path, os.path.join(json_folder, filename))# 如果是图片文件(常见格式),移动到image_files文件夹elif filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')):shutil.move(file_path, os.path.join(image_folder, filename))print("文件分类完成!")

2.2 数据集格式处理
json2yolo_seg.py

import os
import json# 指定JSON文件夹路径和YOLO保存文件夹路径
json_folder = r"D:\songlin\data\8.图像分割相关\马\json"  # 替换为实际的JSON文件夹路径
yolo_save_folder = r"D:\songlin\data\8.图像分割相关\马\yolo_txt"  # 替换为实际保存YOLO txt文件的文件夹name = ["horse"] #标签名
# 如果保存文件夹不存在,创建它
if not os.path.exists(yolo_save_folder):os.makedirs(yolo_save_folder)# 将实例分割数据转换为YOLO格式
def convert_to_yolo_format(json_data, image_width, image_height):yolo_data = []shapes = json_data['shapes']for shape in shapes:label = shape['label']points = shape['points']# 获取分割边界框的x和y的最大最小值x_coords = [p[0] for p in points]y_coords = [p[1] for p in points]x_min = min(x_coords)x_max = max(x_coords)y_min = min(y_coords)y_max = max(y_coords)# 计算中心点,宽度和高度(归一化到[0, 1]范围)x_center = (x_min + x_max) / 2 / image_widthy_center = (y_min + y_max) / 2 / image_heightbbox_width = (x_max - x_min) / image_widthbbox_height = (y_max - y_min) / image_height# 归一化分割点normalized_points = [(x / image_width, y / image_height) for x, y in points]# 创建YOLO格式的字符串 (格式: class_id x_center y_center width height seg_points)if label not in name:name.append(label)class_id = name.index(label)yolo_format = f"{class_id} {x_center} {y_center} {bbox_width} {bbox_height} "# 添加分割坐标点yolo_format += " ".join([f"{x} {y}" for x, y in normalized_points])yolo_data.append(yolo_format)return yolo_data# 遍历文件夹中的所有JSON文件
for filename in os.listdir(json_folder):if filename.endswith(".json"):json_path = os.path.join(json_folder, filename)with open(json_path, 'r', encoding='utf-8') as f:json_data = json.load(f)# 获取图像大小image_width = json_data['imageWidth']image_height = json_data['imageHeight']# 转换为YOLO格式yolo_data = convert_to_yolo_format(json_data, image_width, image_height)# 保存为txt文件txt_filename = os.path.splitext(filename)[0] + ".txt"txt_save_path = os.path.join(yolo_save_folder, txt_filename)with open(txt_save_path, 'w', encoding='utf-8') as f:for line in yolo_data:f.write(line + "\n")print("转换完成并保存为YOLO格式!")

3、 数据集划分

import os
import shutil# 原始文件夹路径
source_folder = r"D:\songlin\data\8.图像分割相关\马"# 创建目标文件夹
json_folder = os.path.join(source_folder, "json")
image_folder = os.path.join(source_folder, "image")# 如果目标文件夹不存在,则创建
os.makedirs(json_folder, exist_ok=True)
os.makedirs(image_folder, exist_ok=True)# 遍历文件夹中的所有文件
for filename in os.listdir(source_folder):file_path = os.path.join(source_folder, filename)# 如果是JSON文件,移动到json_files文件夹if filename.endswith(".json"):shutil.move(file_path, os.path.join(json_folder, filename))# 如果是图片文件(常见格式),移动到image_files文件夹elif filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')):shutil.move(file_path, os.path.join(image_folder, filename))print("文件分类完成!")

参考链接:
1、https://blog.csdn.net/zqq19980906_/article/details/143092674

3、环境配置

conda create -n yolov11 python==3.8.10 -y
conda activate yolov11
pip install torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1 --index-url https://download.pytorch.org/whl/cu118
conda install cudatoolkit==11.8.0
# 找到cudnn地址,解压进对应环境里的library文件夹下,将解压后的cudnn文件夹直接复制进去替换
E:\software_install\miniconda\envs\yolov11\Library
pip install opencv-python tqdm pyyaml requests matplotlib pandas scipy

4、模型训练

train.py

from ultralytics import YOLOif __name__ == '__main__':# model = YOLO(r'ultralytics/cfg/models/11/yolo11-seg.yaml')model = YOLO(r'yolo11n-seg.pt')model.train(data=r'data.yaml',imgsz=640,epochs=100,single_cls=True,batch=16,workers=10,device='0',)

5、模型推理

predict.py

import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLOif __name__ == '__main__':model = YOLO('runs/segment/train/weights/best.pt')model.predict(source=r'D:\songlin\data\8.图像分割相关\马\dataset\val\images\19302950_164550132000_2.jpg',imgsz=640,device='0',save=True,conf=0.25,line_width=4,box=True,show_labels=True,show_conf=True,retina_masks=True,show=True  # 新增,实时显示预测结果窗口)

6、模型部署

6.1 yolov5_flask学习

1、 环境配置

 conda create -n yolov5_flask python=3.8 -ypip install torch==2.2.0 torchvision==0.17.0 torchaudio==2.2.0 --index-url https://download.pytorch.org/whl/cu118pip install flask opencv-python pyyaml matplotlib scipy tqdm

下载yolov5_v3.0版本,这个不需要操作,yolov5版本不能setup.py安装
在这里插入图片描述
代码存储链接:https://gitee.com/songyulining/yolov5_flask_vue

2、npm前端环境配置
安装Node.js
https://nodejs.org/zh-cn
安装依赖

npm install

7、版本上传

git remote set-url origin https://gitee.com/songyulining/yolov11_seg_run.git
git push origin HEAD:refs/heads/v8.3.170

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

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

相关文章

ubuntu22.04系统 算力4090服务器 病毒防护 查杀等 运维入门(三)clamAV工具离线查杀

以下有免费的4090云主机提供ubuntu22.04系统的其他入门实践操作 地址&#xff1a;星宇科技 | GPU服务器 高性能云主机 云服务器-登录 相关兑换码星宇社区---4090算力卡免费体验、共享开发社区-CSDN博客 兑换码要是过期了&#xff0c;可以私信我获取最新兑换码&#xff01;&a…

微信小程序文件下载与预览功能实现详解

在微信小程序开发中&#xff0c;文件处理是常见需求&#xff0c;尤其是涉及合同、文档等场景。本文将通过一个实际案例&#xff0c;详细讲解如何实现文件的下载、解压、列表展示及预览功能。 功能概述 该页面主要实现了以下核心功能&#xff1a; 列表展示可下载的文件信息支持 …

postgresql执行创建和删除时遇到的问题

删除数据库的时候出现的问题 有连接在占用 postgres=# DROP DATABASE "subgraph-dev"; ERROR: database "subgraph-dev" is being accessed by other users DETAIL: There is 1 other session using the database.强制断开在用的连接 -- 替换 subgraph…

linux 应用层直接操作GPIO的方法

了解&#xff01;你使用的是 Rockchip RK3588S 平台&#xff0c;需要操作 GPIO3_D5_d 这个引脚&#xff08;即 MCU_JTAG_TMS_M1/.../GPIO3_D5_d&#xff09;。以下是基于你提供的系统信息的具体操作步骤&#xff1a;&#x1f50d; 第一步&#xff1a;确认 GPIO 系统编号 在 RK3…

JavaScript核心概念全解析

目录 1. 作用域 (1) 局部作用域 (2) 全局作用域 2. 垃圾回收 (1) 引用计数法 (2) 标记清除法 3. 闭包 (1) 作用 (2) 风险 4. 变量提升 (1) var (2) let 和 const (3) const 5. 函数提升 (1) 函数声明 (2) 函数表达式 6. 函数参数 (1) 动态参数 (2) 剩余参数…

力扣刷题(第一百天)

灵感来源 - 保持更新&#xff0c;努力学习- python脚本学习提莫攻击解题思路初始化总中毒时间 total。遍历每次攻击的时间点&#xff08;从第二个开始&#xff09;&#xff1a;计算当前攻击与前一次攻击的时间间隔 gap。若 gap < duration&#xff0c;则本次中毒时间为 gap&…

JMeter 性能测试实战笔记

JMeter 性能测试实战笔记 本文档是一份详细的 JMeter 指南&#xff0c;涵盖了从创建测试计划、执行测试到解读性能结果的全过程。 一、创建测试计划 一个完整的测试计划是执行性能测试的基础。下面将分步介绍如何创建一个针对文件上传接口的测试场景。 第一步&#xff1a;添加线…

图像处理:第二篇 —— 选择镜头的基础知识及对图像处理的影响

一、图像传感器的典型应用图像处理过程大致可分为如下四步&#xff1a;1.拍 摄 按下快门&#xff0c;拍摄图像2.传 送 将图像数据由照相机传送到控制器。3.处 理 前处理 : 对于图像数据进行加工&#xff0c;使其特征更加明显。测算处理 : 根据图像数据对于损…

Linux 系统文件夹结构及用途说明

Linux 系统采用树形文件结构&#xff0c;每个目录都有明确的功能定位&#xff0c;遵循 FHS&#xff08;Filesystem Hierarchy Standard&#xff09; 标准。以下是新安装系统后主要文件夹的用途&#xff1a;一、根目录&#xff08;/&#xff09;核心文件夹1. /bin&#xff1a;基…

[spring6: HttpSecurity]-全新写法

HttpSecurity HttpSecurity 是 Spring Security 中用于配置基于 HTTP 请求的安全策略的核心构建器&#xff0c;支持细粒度控制请求授权、认证、登录、登出、CSRF、CORS、会话管理等安全功能。 package xyz.idoly.demo;import org.springframework.context.annotation.Bean; imp…

MIPI DSI 转 1LVDS ,分辨率1920*1080.

一款桥接芯片&#xff0c;它接收 MP DSI 输入并发送 LVDS 输出。MlPI DSI 支持至多 4 条通道&#xff0c;每条通道的最大传输速率为 1Gbps&#xff0c;总的最大输入带宽为 4Gbps&#xff0c;并且还支持 MlPI 定义的 ULPS&#xff08;超低功耗状态&#xff09;。LVDS 输出采用 V…

墨者:SQL手工注入漏洞测试(MySQL数据库)

一、SQL手工注入漏洞测试(MySQL数据库) 本文以墨者学院靶场为例&#xff0c;演示MySQL数据库的手工SQL注入全过程。靶场以自己的地址为准&#xff1a;http://124.70.64.48:47777/new_list.php?id1 二、注入原理与流程&#xff08;如下指令去掉了id之前的内容&#xff09; M…

idea打开后project窗口未显示项目名称的解决方案

前言 今天上班后&#xff0c;打开了idea发现之前project窗口中的项目都不见了&#xff0c;啥也没有&#xff0c;见下图原因 一般为配置文件*.iml 出错了。 解决方案1 方法1&#xff1a;若知道出错的具体位置与原因&#xff0c;用文本编辑器打开*.iml文件&#xff0c;找到出错位…

不一样的Mysql安装方式

文章目录MySQL介绍与安装MySQL介绍基本安装下载打开网址点击点击选择LTSwindows选择zip压缩包格式&#xff0c;mac OS选择dmg格式。不需要注册登陆网站&#xff0c;直接谢谢&#xff0c;继续下载即可。解压复制bin路径配置环境变量搜索点击环境变量点击用户变量的Path 或 系统变…

MyBatis高级应用实战指南

MyBatis高级应用实例 以下是MyBatis高级应用实例,涵盖复杂查询、动态SQL、插件开发、缓存优化等场景,帮助深入掌握MyBatis核心技术。 动态SQL构建 Example 1: 多条件动态查询 使用<if>和<where>标签实现条件组合: <select id="findUsers" resu…

Xilinx-FPGA-PCIe-XDMA 驱动内核兼容性问题修复方案

问题1&#xff1a;implicit declaration of function "mmiowb()"解决方法&#xff1a;在 libxdma.c 和 cdev_xvc.c 文件中注释掉所有 mmiowb () 函数调用问题2&#xff1a; "macro"access_ok"passed 3 arguments, but takes just 2"解决方法&…

ThreadLocal--ThreadLocal介绍

&#x1f9e0; 一、什么是 ThreadLocal&#xff1f; ThreadLocal 是 Java 提供的一种 线程本地变量机制&#xff1b; 每个线程都维护一份自己的副本&#xff1b; 它不用于多个线程共享变量&#xff0c;而是用于每个线程独立维护自己的变量副本&#xff1b; 常用于&#xff1…

AWS云S3+Glue+EMRonEC2+ReadShift

Amazon S3&#xff08;Amazon Simple Storage Service&#xff09;即亚马逊简单存储服务&#xff0c;是 AWS&#xff08;Amazon Web Services&#xff09;提供的一种对象存储服务&#xff0c;在大数据领域被广泛使用。以下是关于它的详细介绍&#xff1a;基本概念Amazon S3 主要…

OpenLayers 综合案例-轨迹回放

看过的知识不等于学会。唯有用心总结、系统记录&#xff0c;并通过温故知新反复实践&#xff0c;才能真正掌握一二 作为一名摸爬滚打三年的前端开发&#xff0c;开源社区给了我饭碗&#xff0c;我也将所学的知识体系回馈给大家&#xff0c;助你少走弯路&#xff01; OpenLayers…

语音自动生成PPT、思维导图、会议纪要、笔记、大纲、导读等

一、需要用到录音工具&#xff0c;手机端工具&#xff1a;讯飞听见二、需要用到的工具通义&#xff1a;https://www.tongyi.com/discover上传录音&#xff0c;描述一下&#xff0c;让直接给生成PPT就行&#xff0c;点生成就可以生成ppt&#xff0c;对PPT进行导出就行 三、除了生…