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

YOLOv5分割训练,从数据集标注到训练一条龙解决

最近进行了分割标注,感觉非常好玩,也遇到了很多坑,来跟大家分享一下,老样子有问题评论区留言,我会的就会回答你。

第一步:准备数据集

1、安装标注软件labelme如果要在计算机视觉领域深入的同学,最好先下载好conda,主要作用是可以创建虚拟环境,在虚拟环境中配置python运行的包,避免不同软件运行所需环境相互影响出现未知bug。具体安装congda过程可以在CSDN搜索。conda安装完成后,打开conda创建虚拟环境,name为虚拟环境名称,3.8为要安装的python版本,这里推荐对各个包适配更好的3.8版本。
conda create --name=labelme python=3.8

安装完成后,使用conda activate labelme 进入创建好的虚拟环境,在安装labelme之前先切换pip下载源到国内下载源,我这里使用的清华源。

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

安装labelme

pip install labelme

安装完成后,输入labelme即可打开程序,如下图即为成功
labelme界面
点击上面OpenDir打开存放要标注的图片的文件夹,点击上面CreatePolygons即可进入标注,点击一下便是一个点,把你要进行分割的东西圈起来,就会弹出下面的框,输入你标注的名称。
labelme标注
标注完成后,将json文件和图片保存在一个文件夹内,使用下面脚本。

import json
import glob
import osimport cv2
import numpy as npjson_path = r"D:"; #此处填写存放json文件的地址
labels = ['1','2']#此处填写你标注的标签名称
json_files = glob.glob(json_path + "/*.json")for json_file in json_files:print(json_file)f = open(json_file)json_info = json.load(f)# print(json_info.keys())img = cv2.imread(os.path.join(json_path, json_info["imagePath"]))height, width, _ = img.shapenp_w_h = np.array([[width, height]], np.int32)txt_file = json_file.replace(".json", ".txt")f = open(txt_file, "a")for point_json in json_info["shapes"]:txt_content = ""np_points = np.array(point_json["points"], np.int32)norm_points = np_points / np_w_hnorm_points_list = norm_points.tolist()print()if point_json['label'] == labels[0]:txt_content += "0 " + " ".join([" ".join([str(cell[0]), str(cell[1])]) for cell in norm_points_list]) + "\n"elif point_json['label'] == labels[1]:txt_content += "1 " + " ".join([" ".join([str(cell[0]), str(cell[1])]) for cell in norm_points_list]) + "\n"f.write(txt_content)

使用上面脚本即可将json文件格式转为YOLO训练的txt格式,将图片和txt文件分别放入img文件夹和txt文件夹,使用以下脚本进行划分训练、测试集。

import os
import random
import shutilrootpath = r'D:\a/'#此处为img和txt文件夹存放位置,地址后面要有/结尾set1 = ['images','labels']
set2 = ['train','val']
for s1 in set1:if not os.path.exists(rootpath+s1):os.mkdir(rootpath+s1)for s2 in set2:if not os.path.exists(rootpath+s1+'/'+s2):os.mkdir(rootpath+s1+'/'+s2)# 这是原始图片路径
img_path = rootpath+'img'
# 这是生成的txt路径
txt_path = rootpath+'txt'
file_names = os.listdir(img_path)
l = 0.8
n = len(file_names)
train_files = random.sample(file_names, int(n*l))
for file in file_names:print(file)if not os.path.exists(txt_path+'/'+file[:-3]+'txt'):os.remove(img_path+'/'+file)print(file[:-3]+'txt,不存在')continueif file in train_files:shutil.copy(img_path+'/'+file,rootpath+'images/train/'+file)shutil.copy(txt_path+'/'+file[:-3]+'txt',rootpath+'labels/train/'+file[:-3]+'txt')else:shutil.copy(img_path+'/'+file,rootpath+'images/val/'+file)shutil.copy(txt_path+'/'+file[:-3]+'txt',rootpath+'labels/val/'+file[:-3]+'txt')
print('ok!!')
print(len(train_files))

划分好数据集后会出现下面两个文件夹。
训练文件夹
在YOLOv5文件夹的data文件夹内创建s-seg.yaml文件,将下面内容复制进去。

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: D:\a  # dataset root dir 
train : D:\a\images\train #此处填写上面划分好数据集的images文件夹下train
val: D:\a\images\val #此处填写上面划分好数据集的images文件夹下val# Classes
names : #此处为标签序号和标签名0: 11: 2

完成以上步骤即可进行第二步训练。

第二步:训练模型

打开YOLOv5文件夹内的segment文件夹中的train.py文件,从网上下载yolov5s-seg.pt文件放入该文件夹内,–data改为:

    parser.add_argument('--data', type=str, default=ROOT / 'data/s-seg.yaml', help='dataset.yaml path')

运行即可,训练出的模型在runs文件夹下train-seg文件夹下。

第三步:测试模型

打开YOLOv5文件夹内的segment文件夹中的predict.py文件,更改第243行附近的以下内容。
–weights是刚训练好的模型位置,是绝对路径
–source是要进行测试的图片位置,是绝对路径

    parser.add_argument('--weights', nargs='+', type=str, default=ROOT / r'd:\yolov5-master\runs\train-seg\exp\weights\best.pt', help='model path(s)')parser.add_argument('--source', type=str, default=ROOT / r'D:\test\tudi', help='file/dir/URL/glob/screen/0(webcam)')

测试完成的结果保存在runs文件夹内的predict-seg文件夹内,打开可以查看。

相关文章:

YOLOv5分割训练,从数据集标注到训练一条龙解决

最近进行了分割标注,感觉非常好玩,也遇到了很多坑,来跟大家分享一下,老样子有问题评论区留言,我会的就会回答你。 第一步:准备数据集 1、安装标注软件labelme如果要在计算机视觉领域深入的同学&#xff0…...

再添千万级罚单,某银行年内罚款过亿!金融行业合规问题亟待解决

11月17日晚间,国家金融监管总局上海监管局披露行政处罚信息显示,某银行因32项违法违规事实收到两张690万元的大额罚单,合计罚款金额达1380万元。但这并不是银行该今年收到的第一张大额罚单。今年4月28日,该行因在结售汇、外币理财…...

配置Nginx服务器用于Web应用代理和SSL{仅配置文件}

在本篇博文中,我们将深入讨论如何配置Nginx服务器,使其成为一个强大的Web应用代理,并通过SSL协议加强通信的安全性。 1. 服务器监听与SSL设置 首先,我们要配置Nginx服务器以监听HTTPS流量并设置SSL证书,确保通信的安…...

【广州华锐互动】VR溺水预防教育:在虚拟世界中学会自救!

在现代社会中,水上安全和救援行动的重要性不言而喻。尤其在自然灾害、游泳事故或航海事故中,有效的救援行动可以挽救许多生命。然而,传统的救援训练往往存在成本高、风险大、效率低等问题。在这样的背景下,虚拟现实(VR…...

Si(111)衬底上脉冲激光沉积AlN外延薄膜的界面反应控制及其机理

引言 通过有效控制AlN薄膜与Si衬底之间的界面反应,利用脉冲激光沉积(PLD)在Si衬底上生长高质量的AlN外延薄膜。英思特对PLD生长的AlN/Si异质界面的表面形貌、晶体质量和界面性能进行了系统研究。 我们研究发现,高温生长过程中形…...

基于Cortex®-M4F的TM4C123GH6NMRT7R 32位MCU,LM74900QRGERQ1、LM74930QRGERQ1汽车类理想二极管

一、TM4C123GH6NMRT7R IC MCU 32BIT 256KB FLASH 157BGA Tiva™C系列微控制器为设计人员提供了基于ARMCortex™-M的高性能架构,该架构具有广泛的集成功能以及强大的软件和开发工具生态系统。以性能和灵活性为目标,Tiva™C系列架构提供了一个具有FPU的80…...

苹果企业签名失败常见的问题

苹果企业签名失败的常见问题主要有以下几种: 证书过期或无效:苹果开发者需要定期更新他们的签名证书,以确保其有效性。一旦证书过期,相关应用将无法正常工作。证书不匹配:如果使用的证书与应用程序的Bundle ID不匹配&…...

Jtti:Android alertdialog嵌套出错怎么解决

在Android开发中,AlertDialog嵌套可能导致一些问题,例如显示异常或无法关闭对话框等。这通常是由于上一个AlertDialog未被正确关闭,导致下一个AlertDialog无法正常工作。解决这个问题的方法包括: 1. 确保关闭上一个AlertDialog&a…...

解锁word密码,忘记密码怎么办?

想要解密、找回或去除Word文档密码,可以按以下步骤操作:第一步,在百度上搜索【密码帝官网】,接着在用户中心上传需要解密的文件即可。这种方法安全、简单易操作,而且不用下载软件,手机和电脑都可以用。无论…...

同为科技(TOWE)桌面PDU插排:一款可以DIY定制的“超级插座”

当今社会,各种电子产品和家用电器已成为人们日常生活中不可或缺的一部分,在带给人们便利的同时,也使得电力使用变得更加频繁和重要。然而,当前市面上很多普通插座由于功能单一、材质粗劣、插口数量受限、充电速度过慢、插头间互相…...

使用Java Servlet生成动态二维码

文章目录 引入ZXing库创建QRCodeServlet部署到Servlet容器拓展功能1. 动态生成二维码内容2. 调整二维码尺寸3. 错误修正级别4. 日志输出 结语 🎉欢迎来到Java学习路线专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页&…...

【已解决】微信小程序腾讯地图的map清除markers,setData将marker置空后,安卓和ios还会显示上次的内容的问题所在以及解决办法

问题描述 1.我首先点击了这个marker 2.这里可以看到根据id获取到了他的信息 3.当我滑动了地图,这时候重新加载了markers,我再次点击这个marker 4.会发现获取不到数据了 问题原因 个人猜测引起这个问题的原因是id重叠了,导致获取不到数据&am…...

弄懂Rust编程中的Trait

1.定义 trait trait 定义了某个特定类型拥有可能与其他类型共享的功能。可以通过 trait 以一种抽象的方式定义共享的行为。可以使用 trait bounds 指定泛型是任何拥有特定行为的类型。 一个类型的行为由其可供调用的方法构成。如果可以对不同类型调用相同的方法的话&#xff…...

关于登山扣亚马逊\SHEIN出口合规标准ASTM F1774 指南解析

登山的时候配合绳子起到一个承重悬挂的作用.采用铝合金、铁或者是不锈钢等材料制作而成的一种登山工具之一。 其形状多样,比较常见的是椭圆形和圆形的,除此之外还有长方形、三角形等样式的登山扣。铝合金登山扣由于质地较轻所以重量也比较轻&#xff0c…...

浅析ChatGPT中涉及到的几种技术点

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…...

Web实战:基于Django与Bootstrap的在线计算器

文章目录 写在前面实验目标实验内容1. 创建项目2. 导入框架3. 配置项目前端代码后端代码 4. 运行项目 注意事项写在后面 写在前面 本期内容:基于Django与Bootstrap的在线计算器 实验环境: vscodepython(3.11.4)django(4.2.7)bootstrap(3.4.1)jquery(3…...

曲率半径的推导

参考文章 参考文章...

0时区格林威治时间转换手机当地时间-Android

假设传入的是2023-11-01T12:59:10.420987这样的格式 要将格式为2023-11-01T12:59:10.420987的UTC时间字符串转换为Android设备本地时间,您可以使用java.time包中的类(在API 26及以上版本中可用)。如果您的应用需要支持较低版本的Android&…...

git-3

1.如何让工作区的文件恢复为和暂存区一样? 工作区所作的变更还不及暂存区的变更好,想从暂存区拷贝到工作区,变更工作区(恢复成和暂存区一样的状态),想到用git checkout -- 文件名 2.怎样取消暂存区部分文件的更改? 如…...

【python爬虫】scrapy在pycharm 调试

scrapy在pycharm 调试 1、使用scrapy创建一个项目 scrapy startproject tutorial 2、在朋友pycharm中调试scrapy 2.1 通过文件run.py调试 在根目录下新建一个文件run.py(与scrapy.cfg文件的同一目录下), debug ‘run’即可 # -*- coding:utf-8 -*- from scrapy import c…...

猫抓:为什么这个浏览器扩展能彻底改变你获取网络资源的方式?

猫抓:为什么这个浏览器扩展能彻底改变你获取网络资源的方式? 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在信息过载的今…...

避开FreeRTOS串口接收的坑:从‘二重指针’理解队列传递数据的本质

避开FreeRTOS串口接收的坑:从‘二重指针’理解队列传递数据的本质 在嵌入式开发中,FreeRTOS的队列机制是实现任务间通信的重要工具。然而,当涉及到串口数据接收时,许多开发者都会遇到一个令人困惑的问题:明明按照文档示…...

掌握AI写专著技巧,借助工具轻松生成20万字专业专著!

撰写学术专著的过程中,如何在“内容的深度”和“覆盖的广度”之间取得恰当的平衡,成为了许多研究者难以逾越的障碍。从深度上看,专著需要表达出足够的学术深度,不仅要清晰解答“是什么”,更要深入探讨“为什么”和“怎…...

5分钟彻底修复Windows软件运行错误:VisualCppRedist AIO终极解决方案

5分钟彻底修复Windows软件运行错误:VisualCppRedist AIO终极解决方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过打开软件时突然…...

3大核心功能+5步实战:DLSS Swapper终极性能优化指南

3大核心功能5步实战:DLSS Swapper终极性能优化指南 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper DLSS Swapper是一款革命性的游戏性能优化工具,它让普通玩家也能像专业调优师一样,…...

2026智造进化论:从人工排程到AI智能排产,制造业生产模式正在如何变革?实在Agent技术解决方案

站在2026年4月的时点回望,全球制造业正经历一场由“确定性逻辑”向“预测性逻辑”的范式跃迁。 传统依赖计划员个人经验、基于Excel或静态MES系统的排产模式,在多品种、小批量、高频插单的复杂市场环境下已显出颓势。 AI智能排产不再仅仅是一个算法插件&…...

知识库架构最易踩的坑:Claude 链路位置放错,全流程白忙活!

在知识库搭建的实际开发中,很多开发者都会陷入一个认知误区:将知识库简单等同于RAG,进而把Claude的位置直接放在链路最后——检索获取片段后,由Claude生成最终答案。从工程落地角度看,这套方案确实能正常运行&#xff…...

别再乱调了!手把手教你用万用表正确设置DCDC升压模块的恒流恒压(以400W 15A模块为例)

别再乱调了!手把手教你用万用表正确设置DCDC升压模块的恒流恒压(以400W 15A模块为例) 刚拿到DCDC升压模块时,很多人会迫不及待地旋转电位器试试效果——这种冲动往往会导致设备损坏或性能异常。事实上,这类模块的调节需…...

我把设备指纹生成逻辑拆开了:它到底凭什么区分不同设备?

大家好,我是舒一笑不秃头,喜欢分享和写作,更多精彩内容~ 很多人一提到“设备指纹”,第一反应就是: 这是不是某种黑盒算法?是不是偷偷拿到了设备唯一 ID? 其实不是。 在真实项目里…...

Youtu-Parsing算法核心:Attention机制如何实现图文对齐与理解

Youtu-Parsing算法核心:Attention机制如何实现图文对齐与理解 最近在折腾一些图文理解的项目,发现一个挺有意思的现象:很多模型在处理“看图说话”这类任务时,效果总是不尽如人意。要么是描述得牛头不对马嘴,把猫说成…...