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即可打开程序,如下图即为成功

点击上面OpenDir打开存放要标注的图片的文件夹,点击上面CreatePolygons即可进入标注,点击一下便是一个点,把你要进行分割的东西圈起来,就会弹出下面的框,输入你标注的名称。

标注完成后,将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如果要在计算机视觉领域深入的同学࿰…...
再添千万级罚单,某银行年内罚款过亿!金融行业合规问题亟待解决
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 指定泛型是任何拥有特定行为的类型。 一个类型的行为由其可供调用的方法构成。如果可以对不同类型调用相同的方法的话ÿ…...
关于登山扣亚马逊\SHEIN出口合规标准ASTM F1774 指南解析
登山的时候配合绳子起到一个承重悬挂的作用.采用铝合金、铁或者是不锈钢等材料制作而成的一种登山工具之一。 其形状多样,比较常见的是椭圆形和圆形的,除此之外还有长方形、三角形等样式的登山扣。铝合金登山扣由于质地较轻所以重量也比较轻,…...
浅析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…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
