Yolov8训练数据集过程 + 测试测试集 + 继续训练+报错解决

做自己第一次使用Yolov8训练的记录

1、下载代码

官网的我没找到对应的视频教程,操作起来麻烦,一下这个链接的代码可以有对应bilibili教程:完整且详细的Yolov8复现+训练自己的数据集

选择这个下载:

2、安装需要的包:

按照对应bilibili教程完成 :

【包会!YOLOv8训练自己的数据集】 https://www.bilibili.com/video/BV1o44y1w77C/?share_source=copy_web&vd_source=c87a195bcc1df47a24018e5bbe3057d5

pip install ultraytics

报错1:no matching distribution found for ultraytics 

或者WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.H TTPSConnection object at 0x000002032A838340>: Failed to establish a new connecti

并且按照网上换了好多源都不行!

解决:直接去下载whl文件,然后放到工程文件中直接安装,

下载地址:ultralytics · PyPI   安装方法见我的:whl文件下载安装笔记。

报错2:Error: No such command ‘predict‘.

解决: 执行命令:

python setup.py install

3、准备自己的数据集、设置等

数据集的coco转txt来自原作者:coco格式数据转为yolo格式(json转txt) - 微风的文章 - 知乎
https://zhuanlan.zhihu.com/p/350335237

为防止作者删除,这里搬过来。修改12,14, 62行,改为自己数据集的位置,运行即可

(更新:这个代码是旧版本,多个类别容易报错,更新的版本见作者链接,或者后面我有补充。)

#COCO 格式的数据集转化为 YOLO 格式的数据集
#--json_path 输入的json文件路径
#--save_path 保存的文件夹名字,默认为当前目录下的labels。import os
import json
from tqdm import tqdm
import argparseparser = argparse.ArgumentParser()
#这里根据自己的json文件位置,换成自己的就行
parser.add_argument('--json_path', default='E:/data/COCO2017/annotations_trainval2017/annotations/instances_train2017.json',type=str, help="input: coco format(json)")
#这里设置.txt文件保存位置
parser.add_argument('--save_path', default='E:/data/COCO', type=str, help="specify where to save the output dir of labels")
arg = parser.parse_args()def convert(size, box):dw = 1. / (size[0])dh = 1. / (size[1])x = box[0] + box[2] / 2.0y = box[1] + box[3] / 2.0w = box[2]h = box[3]
#round函数确定(xmin, ymin, xmax, ymax)的小数位数x = round(x * dw, 6)w = round(w * dw, 6)y = round(y * dh, 6)h = round(h * dh, 6)return (x, y, w, h)if __name__ == '__main__':json_file =   arg.json_path # COCO Object Instance 类型的标注ana_txt_save_path = arg.save_path  # 保存的路径data = json.load(open(json_file, 'r'))if not os.path.exists(ana_txt_save_path):os.makedirs(ana_txt_save_path)id_map = {} # coco数据集的id不连续!重新映射一下再输出!with open(os.path.join(ana_txt_save_path, 'classes.txt'), 'w') as f:# 写入classes.txtfor i, category in enumerate(data['categories']):f.write(f"{category['name']}\n")id_map[category['id']] = i# print(id_map)#这里需要根据自己的需要,更改写入图像相对路径的文件位置。list_file = open(os.path.join(ana_txt_save_path, 'train2017.txt'), 'w')for img in tqdm(data['images']):filename = img["file_name"]img_width = img["width"]img_height = img["height"]img_id = img["id"]head, tail = os.path.splitext(filename)ana_txt_name = head + ".txt"  # 对应的txt名字,与jpg一致f_txt = open(os.path.join(ana_txt_save_path, ana_txt_name), 'w')for ann in data['annotations']:if ann['image_id'] == img_id:box = convert((img_width, img_height), ann["bbox"])f_txt.write("%s %s %s %s %s\n" % (id_map[ann["category_id"]], box[0], box[1], box[2], box[3]))f_txt.close()#将图片的相对路径写入train2017或val2017的路径list_file.write('E:/data/COCO2017/train2017/%s.jpg\n' %(head))list_file.close()

都按照对应bilibili教程完成 :

【包会!YOLOv8训练自己的数据集】 https://www.bilibili.com/video/BV1o44y1w77C/?share_source=copy_web&vd_source=c87a195bcc1df47a24018e5bbe3057d5

设置训练类别:

4、训练

用以下指令:

yolo train data=D:\documents\Learn\DeepLearning_Code\BySomeone\LunWen_FuXian\ultralytics-main\datasets\my_data.yaml model=yolov8m.yaml pretrained=D:\documents\Learn\DeepLearning_Code\BySomeone\LunWen_FuXian\ultralytics-main\yolov8m.pt epochs=200 imgsz=640 batch=4 resume=True

data、model 、pretrained等参数根据自己的电脑改,batch=4 我看别人是3050设置的4就设置了

报错3:OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.

解决:用以下软件搜索所有的libiomp5md.dll,是不是当前环境存在两个libiomp5md.dll,是则删除一个,我删除的是Libary/bin/libiomp5md.dll这个

5、完成,看到开始训练

其他

①测试测试集:主要是把train改为val,再把split=test加上

yolo val data=datasets\EL_img\my_data.yaml model=runs\detect\train6\weights\best.pt imgsz=640 batch=4 split=test

②继续训练: 把model = 直接改为刚才训练的last.pt文件的地址就可以了

yolo train data=D:\documents\Learn\DeepLearning_Code\BySomeone\LunWen_FuXian\ultralytics-main\datasetsmy_data.yaml model=runs\detect\train14\weights\last.pt epochs=200 batch=4 resume=True

报错4:在换多个类别数据的时候,coco转txt出现了问题,报错如下:ignoring corrupt image/label : Label class 4 exceeds dataset class count 2. Possible class labels are 0-1。

找了一个多小时了才发现不是代码的错,是数据转换的时候,出现的标签的映射问题,因为COCO官方数据集的标签是不连续的,假如只有80类categories却到了90,直接转的话yolo读取标签会出错

解决方法:来自知乎某大佬的更新的coco转txt的新版本的脚本,原链接如下:coco格式数据转为yolo格式(json转txt) - 微风的文章 - 知乎https://zhuanlan.zhihu.com/p/350335237

代码如下:修改7,8 行,改为自己的位置,运行即可。


import os 
import json
from tqdm import tqdm
import argparseparser = argparse.ArgumentParser()
parser.add_argument('--json_path', default='./instances_val2017.json',type=str, help="input: coco format(json)")
parser.add_argument('--save_path', default='./labels', type=str, help="specify where to save the output dir of labels")
arg = parser.parse_args()def convert(size, box):dw = 1. / (size[0])dh = 1. / (size[1])x = box[0] + box[2] / 2.0y = box[1] + box[3] / 2.0w = box[2]h = box[3]x = x * dww = w * dwy = y * dhh = h * dhreturn (x, y, w, h)if __name__ == '__main__':json_file =   arg.json_path # COCO Object Instance 类型的标注ana_txt_save_path = arg.save_path  # 保存的路径data = json.load(open(json_file, 'r'))if not os.path.exists(ana_txt_save_path):os.makedirs(ana_txt_save_path)id_map = {} # coco数据集的id不连续!重新映射一下再输出!for i, category in enumerate(data['categories']): id_map[category['id']] = i# 通过事先建表来降低时间复杂度max_id = 0for img in data['images']:max_id = max(max_id, img['id'])# 注意这里不能写作 [[]]*(max_id+1),否则列表内的空列表共享地址img_ann_dict = [[] for i in range(max_id+1)] for i, ann in enumerate(data['annotations']):img_ann_dict[ann['image_id']].append(i)for img in tqdm(data['images']):filename = img["file_name"]img_width = img["width"]img_height = img["height"]img_id = img["id"]head, tail = os.path.splitext(filename)ana_txt_name = head + ".txt"  # 对应的txt名字,与jpg一致f_txt = open(os.path.join(ana_txt_save_path, ana_txt_name), 'w')'''for ann in data['annotations']:if ann['image_id'] == img_id:box = convert((img_width, img_height), ann["bbox"])f_txt.write("%s %s %s %s %s\n" % (id_map[ann["category_id"]], box[0], box[1], box[2], box[3]))'''# 这里可以直接查表而无需重复遍历for ann_id in img_ann_dict[img_id]:ann = data['annotations'][ann_id]box = convert((img_width, img_height), ann["bbox"])f_txt.write("%s %s %s %s %s\n" % (id_map[ann["category_id"]], box[0], box[1], box[2], box[3]))f_txt.close()

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

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

相关文章

Qt之QOpenGLWidget开始3D显示

遇到第一个问题就是cmakelists的问题&#xff0c;提示“undefined reference to symbol ‘glXXXXX". 在target link中加入GL解决 SLAMBOOK2踩坑记之&#xff1a;plotTrajectory.cpp中的undefined reference to symbol ‘glTexImage2D‘错误_undefined reference to symbo…

开源+GUI+C/C++

目录 一、MinGW 二、wxWidgets 1.使用MinGW编译 2. 使用MSW编译 三、Code::Blocks 四、开发示例 随着开源社区的发展&#xff0c;在众多的GUI开发工具中&#xff0c;开源、免费将变得越来越流行&#xff0c;但是开源的特点是很多东西需要整合&#xff0c;需要动手能力强的…

扫码听音乐该如何制作?音乐的二维码生成方法

多个音频文件怎么做成一个二维码显示&#xff1f;二维码在现在的生活中拥有丰富的使用场景&#xff0c;可以用来作为多种内容类型的载体&#xff0c;比如音频二维码就是经常被使用的一种二维码类型。通过扫秒二维码来听音频文件&#xff0c;更加的灵活方便&#xff0c;那么音频…

MySQL C代码连接

环境&#xff1a;5.7.42-0ubuntu0.18.04.1 (Ubuntu) mysql接口介绍 初始化mysql指针 用来生成MySQL对象&#xff0c;返回值为MySQL*&#xff0c;MySQL*是MySQL对象的指针。 MySQL在mysql.h中是一个结构体 链接数据库 初始化完毕之后&#xff0c;必须先链接数据库&#xff…

安防监控系统的工作原理是什么?具体包含哪些组成部分?

关于安防监控系统&#xff0c;大家熟知的就是监控系统平台&#xff0c;其实不然&#xff0c;智能视频安防监控系统涵盖的内容非常多&#xff0c;今天小编就和大家一起来探讨一下。 安防监控视频系统主要分为以下7大类&#xff1a; 1、 摄像头采集图像 安防监控系统通常使用摄…

11-30 SpringBoot

内嵌的tomcat tomcat的依赖 对于tomcat其实还是一个jar包 spring是一个IOC容器 tomcat的核心对象交给Spring容器 调用核心对象方法 启动Tomcat 1.添加依赖 tomcat-embed-core&#xff0c;叫做tomcat内嵌核心。就是这个东西把tomcat功能引入到了我们的程序中的 排除tomcat&a…

Nginx(无法解析PHP网页如何解决?FPM解决你的烦恼!)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️不能因为人生的道路坎坷,就使自己的身躯变得弯曲;不能因为生活的历程漫长,就使求索的 脚步迟缓。 ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xff1a;云计算技…

Android笔记(十六):前台服务

设置服务为前台服务。前台服务会在状态栏显示一个通知。通知界面与服务进行关联。 一、什么是通知&#xff1f; Notification通知是在移动应用APP提供给用户的消息提示&#xff0c;是在移动系统的通知栏中显示。当移动应用不在运行时或者在后台状态下&#xff0c;通过发布通知…

数据挖掘实战-基于word2vec的短文本情感分析(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

目标检测开源数据

KITTI KITTI数据集下载&#xff08;百度云&#xff09;_kitti数据集百度云-CSDN博客 KITTI数据集下载及解析_kitti bin文件标签-CSDN博客 KITTI 3D目标检测数据集解析&#xff08;完整版&#xff09;_kitti数据集结构-CSDN博客 KITTI数据集简介与使用_kitti数据见一个视频多…

易点易动固定资产管理系统:提升企业固定资产管理效率的利器

固定资产是企业运营中重要的组成部分&#xff0c;对于企业的正常运转和发展至关重要。然而&#xff0c;传统的固定资产管理方法通常存在效率低下、信息不透明等问题。为了解决这些挑战&#xff0c;易点易动固定资产管理系统应运而生。本文将探讨易点易动固定资产管理系统的概念…

9款高效绘图神器,提升你的工作效率

在日常工作或生活中&#xff0c;我们必须绘制各种图表、流程图、思维导图等图形&#xff0c;或者想用画笔描述自己的想法。然而&#xff0c;我们在许多绘图软件面前感到困惑。我们不知道哪个绘图软件好&#xff0c;也没有足够的时间一一尝试 在接下来的空间里&#xff0c;我们…

该怎么认识人工智能AI的微调功能?

目录 为什么 AI 模型可以调微呢&#xff1f; 请你详细讲解一下 那么"微调"后&#xff0c;模型改变了吗&#xff1f; 请问一下&#xff0c;用人工智能跑出来的模型 就是个有很多参数的矩阵吗&#xff1f; 为什么 AI 模型可以调微呢&#xff1f; 请你详细讲解一下 …

堆栈_有效括号

题比较特殊&#xff0c;主要在于它的所有要输入&#xff0c;都是左括号开头&#xff0c;没有右括号开头的&#xff0c;比如"] ["&#xff0c;这种是不算为括号的&#xff0c;由于必然是对称的&#xff0c;若能符合&#xff0c;因而直接在遇到右括号时&#xff0c;检查…

vue中路由传参和接参

方法一&#xff1a;params 传参 this.$router.push({name:"admin",//这里的params是一个对象&#xff0c;id是属性名&#xff0c;item.id是值(可以从当前组件或者Vue实例上直接取)params:{id:item.id} }) //这个组件对应的路由配置 {//组件路径path: /admin,//组…

基于python实现心血管疾病风险预测分析

一、项目简介 项目背景 利用心血管疾病风险预测数据集进行深入分析&#xff0c;探究不同因素与心血管疾病风险之间的关联。 数据源 Kaggle上的心血管疾病风险预测数据集。&#xff08;Cardiovascular Diseases Risk Prediction Dataset | Kaggle&#xff09; 二、数据预处…

2次MD5加密——用于分布式对话

用户端 &#xff1a; 指发起请求并与服务器进行交互的终端设备或应用程序。它可以是电脑、智能手机等。 用户端负责发送请求给服务端&#xff0c;并接收和处理服务端返回的响应。 服务端 &#xff1a; 是指提供服务、接收和处理用户端请求的计算机系统或应用程序。 它监听来自用…

视图层、模板(补充)

视图层 响应对象 响应---》本质都是 HttpResponse HttpResponse---》字符串render----》放个模板---》模板渲染是在后端完成 js代码是在客户端浏览器里执行的模板语法是在后端执行的redirect----》重定向 字符串参数不是是空的状态码是 3开头JsonResponse---》json格式数据 …

Moonbeam生态项目分析 — — DeFi借贷协议Moonwell

流动性激励计划Moonbeam Ignite是帮助用户轻松愉快体验Moonbeam生态的趣味活动。在Moonbeam跨链连接的推动下&#xff0c;DeFi的各种可能性在这里爆发。DeFi或许不热门&#xff0c;但总有机会捡漏&#xff0c;了解Monbeam生态项目&#xff0c;我们邀请Moonbeam大使分享他们的研…

【linux防火墙】设置开启路由转发,SNAT和DNAT转换原理及应用实操,添加自定义链归类iptables规则

目录 一、关于iptables规则的保存 1.1持久保存规则 1.2加载规则 1.3开机自动加载规则 1.4使用iptables-service软件来进行规则的保存和加载&#xff08;不建议使用&#xff09; 二、SNAT和DNAT的原理和应用 SNAT的原理与应用&#xff1a; DNAT的原理和应用&#xff1a; …