YOLOv8:官方项目训练

news2024/11/26 5:25:05

1. 基础解读

        detect/train.py中有DetectionTrainer类,继承自BaseTrainer类,并实现了诸如get_dataloader, get_model等接口。

        setup_model接口用于准备模型,首先会检查self.model是否是torch.nn.Module,即已经是导入的模型。如果不是,检查当前从配置文件导入的模型是pt模型还是yaml模型。之后,会调用get_model接口进行模型的创建(包含load checkpoint)。

2. 配置

        配置文件位于./ultralytics/yolo/cfg/default.yaml

(1)训练配置

        在Train settings部分,配置model, data, model_save_dir,enable_log

和log_dir路径。分别表示训练的算法网络、数据路径、模型存储路径、是否开启日志和日志存储路径。

(2)推理、测试配置

        在Prediction settings部分,配置
predict_model, source, result_dir,此外在Val/Test settings部分配置conf, iou等。

3. 运行记录

运行如下指令训练:

python3 ultralytics/yolo/v8/detect/train.py

(1)错误1

        No module named 'ultralytics'

        解决:

        事实上,YOLOv8源代码中已经包含了ultralytics的一些东西,无需再安装,因此这个时候可以在ultralytics/yolo/v8/detect/train.py文件的起始位置加上如下代码即可。

        import os

        import sys

        sys.path.append("/2T/001_AI/1003_YOLOv8/001_AL/001_YOLOv8")

(2)错误2:

        遇到错误:No module named 'git'

        解决:

        pip3 install gitpython

(3)错误3:

        No module named 'thop'

        解决:

        pip3 install thop

4. 按照示例代码运行

        如果想使用官方代码直接运行,在解决完成上述问题后,直接运行如下代码即可。

python3 ultralytics/yolo/v8/detect/train.py

        此时,终端打印如下:

5. 训练自己的数据

训练自己的数据时,需要根据自己的数据标注格式修改部分代码,主要是ultralytics/yolo/data/datasets/路径下的yaml文件,如添加VOC_Power48.xml。

在配置数据yaml文件之前,需要通过几个步骤预处理,获取train、val、test数据集。本处以VOC数据标注转coco数据格式进行举例说明。

(1)VOC转YOLO格式数据集

YOLO格式仅是一种叫法,形式如下,不必深究。

[class_id, Xcenter, Ycenter, Width, Height]

VOC数据集普遍以LabelImg软件进行标注,获取一份与图像数据同名的标注文件。如000000.jpg对应000000.xml。为了便于YOLO系列使用,普遍会将VOC数据标注转换为YOLO标注形式,即000000.jpg对应000000.txt标注文件。

运行转换脚本:step_1_voc2yolo_convert.py

(2)划分train、val、test

在上一步制作完成YOLO格式的标注文件后,需要将数据集按照一定的比例划分为训练集(train.txt)、评估集(val.txt)和测试集(test.txt)。

划分数据集运行脚本:step_3_split_train_val_test.py

有两点需要注意:

a. 为了尽量增多训练和评估样本数量,测试集可使用未标注的文件;

b. 经过当前脚本生成的是txt文件,内容为路径列表,如图1所示。训练时在VOC_Power48.xml导入该txt文件路径即可(如图2)。

图1 训练数据集(train.txt)样例

图2 数据文件配置

(3)测试数据

经过第一步的转换(step_1_voc2yolo_convert.py)以后,可通过脚本step_2_optional_draw_for_validate.py指定文件名(.jpg)和标注文件(.txt)进行数据的测试

6. Finetune

执行finetune的时候,只需要将default.py中的model替换成已有的pt模型即可。

7. 训练策略

训练的数据增强部分最后10 epoch关闭Mosaic增强更有利于模型收敛的稳定,同时训练epoch数从300增大到500使得模型训练更充分。

从上面可以看出,YOLOv8集合了之前提出的诸如YOLOX、YOLOv6、YOLOv7和PPYOLOE等算法的相关设计,尤其是Head标签分配和Loss部分以及PP-YOLOE非常相似。YOLOv8集百家所长达到了实时检测界的一个新高度。

8. 继续训练与恢复训练

继续训练是指使用已保存的ckpt中的weights、optimizer和其他等参数,从头开始训练,一般情况下epoch从0开始。

恢复训练是指使用已保存的ckpt中的weights、optimizer和epoch等参数作为(pretrained weights)继续训练,一般情况下epoch>0。

工程中,在resume_training阶段做了修改,当执行resume训练时,start_epoch接上次,当Finetune训练时,start_epoch从0开始。

配置文件中(default.yaml, 或由DEFAULT_CFG_PATH指定的其他配置文件)有以下几个可选的配置:

(1)model为yaml文件(resume==False)

执行Training from scratch。

(2)model为pt模型文件(resume==False)

执行Finetune training。

(3)resume为指定的pt模型文件(忽略model指定内容)

当resume为指定的pt时,执行resume训练。

特别说明

代码初始运行时会有check_amp操作,此时会自动下载yolov8n.pt用于检查。

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

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

相关文章

浅谈外贸独立站必须配置SSL证书的必要性

在互联网时代,外贸独立站已经成为了各行各业企业开拓海外市场的重要途径。而在网络安全问题日益凸显的当今,保护数据传输安全成为当今重要的议题。为了保护用户隐私和数据安全,配置SSL证书已经变得尤为重要。 SSL证书,即安全套接…

苍穹外卖集成 Apache POI Java实现Excel文件的读写下载

苍穹外卖 day12 Echats 营业台数据可视化整合_软工菜鸡的博客-CSDN博客 Apache POI - the Java API for Microsoft Documents Project News 16 September 2022 - POI 5.2.3 available The Apache POI team is pleased to announce the release of 5.2.3. Several dependencies …

VBA技术资料MF53:VBA_突出显示大于某值的单元格

【分享成果,随喜正能量】理解自己,成为自己。流水不腐,户枢不蠹。清楚自己的需求,把握自己的节奏,不迷茫,不徘徊,朝着自己认为对的方向一路向前。人这一生最重要的是做好两件事:做自…

激光焊接汽车尼龙塑料配件透光率测试仪

激光塑性成型技术是近年来塑性加工界出现的一种新技术。通常塑料主要是通过加热加压依赖模具成型。这对于单品种、大批量生产是有效的;而对于各种不同形状的塑料制件则需要昂贵的模具‚装置也较庞大。 高度聚焦的激光束垂直照射在待变形的板料上‚由于塑料直接吸收激…

渗透测试漏洞原理之---【业务安全】

文章目录 1、业务安全概述1.1业务安全现状1.1.1、业务逻辑漏洞1.1.2、黑客攻击目标 2、业务安全测试2.1、业务安全测试流程2.1.1、测试准备2.1.2、业务调研2.1.3、业务建模2.1.4、业务流程梳理2.1.5、业务风险点识别2.1.6 开展测试2.1.7 撰写报告 3、业务安全经典场景3.1、业务…

什么是高可用,如何实现高可用

公众号阿里技术(ID:ali_tech) 什么是高可用 无论是一个域,一个 BG,还是一个站点,虽然范围有大有小,对象有所不同,但其高可用的理念都是相通的,今天将自己对高可用的一点点思考以及总结的“nPRT …

海光异构智能计算专区上线飞桨AI Studio!

近日,海光异构智能计算专区正式上线飞桨AI Studio(星河社区)。专区内容来自官方发布和社区贡献,包含双方产品合作成果、行业解决方案、优秀项目展示等,致力于帮助开发者快速了解体验飞桨、为海光异构智能计算软硬协同优化带来更高性能提升。 …

数据结构与算法学习(day5)——队列算法

前言 本章我们学习队列。 本章的学习目标: (1)能够使用队列算法解决简单的实际问题。 (2)能够用结构体来优化队列算法,并实际应用中使用。 题目 先看题目,题目就是应用场景,先明白是…

AP5101C 高压线性恒流IC 宽电压6-100V LED汽车大灯照明 台灯LED矿灯 指示灯电源驱动

产品描述 AP5101C 是一款高压线性 LED 恒流芯片 , 外围简单 、 内置功率管 , 适用于6- 100V 输入的高精度降压 LED 恒流驱动芯片。电流2.0A。AP5101C 可实现内置MOS 做 2.0A,外置 MOS 可做 3.0A 的。AP5101C 内置温度保护功能 ,温度保护点为…

Jenkins Jenkinsfile管理 Pipeline script from SCM

一、Jenkinsfile理解 Jenkins Pipeline 提供了一套可扩展的工具,用于将“简单到复杂”的交付流程实现为“持续交付即代码”。Jenkins Pipeline 的定义通常被写入到一个文本文件(称为 Jenkinsfile )中,该文件可以被放入项目的源代码…

「通信原理」格雷码的生成与破译

「通信原理」格雷码的生成与破译 格雷码,gray code,相邻两数之间只有一个bit发生了改变,因此相比于自然编码的二进制系统,格雷编码的更不容易出错。使用卡诺图化简布尔代数式的时候,也会用到格雷码。本文将介绍三种格…

AggregateFunction结合自定义触发器实现点击率计算

背景: 接上一篇文章,ProcessWindowFunction 结合自定义触发器会有状态过大的问题,本文就使用AggregateFunction结合自定义触发器来实现,这样就不会导致状态过大的问题了 AggregateFunction结合自定义触发器实现 flink对于每个窗…

前端使用elementui开发后台管理系统的常用功能(持续更新)

前言:本次的文章完全是自己开发中遇到的一些问题,经过不断的修改终于完成的一些功能,当个快捷的查看手册吧~ elementui开发后台管理系统常用功能 高级筛选的封装elementui的表格elementui的表格实现跨页多选回显elementui的表单elementui的日…

VIRTIO-BLK代码分析(3)数据流处理

VIRTIO-BLK整个过程数据流如下所示: IO请求发送过程 虚拟机中通过FIO等下发IO请求,IO请求通过VFS/filesystem,然后到BLOCK层,传递给virtio-blk驱动,virtio-blk驱动通过virtio_queue_rq()下发IO请求,并通过v…

视频过大如何压缩变小?想学的小伙伴不要错过机会

视频过大如何压缩变小?在当今社交媒体和直播平台的时代,视频内容的传播已经广泛而频繁,我们每天不仅刷视频打发无聊的时间,也会向一些自媒体平台分享自己拍摄的视频。如今人们对视频画质的要求不断提高,因此大多数下载…

武汉凯迪正大—断路器特性测试仪

一、凯迪正大高压开关测试仪产品概述 KDGK-F 断路器机械特性测试仪可用于各电压等级的真空、六氟化硫、少油、多油等电力系统高压开关的机械特性参数测试与测量。测量数据稳定,抗干扰性强,可在500KV等级及以下电站做实验,接线方便&#xff0…

知识图谱(2)词汇挖掘与实体识别

实体是指文本中的词汇或者短语(比如"中药"),但不是所有词汇都是实体(比如"新鲜的"),因此,从非结构化的文本构建知识图谱涉及两个基本步骤: 挖掘尽可能多的高质…

初次安装Pytorch过程

第一次安装Pytorch,刚开始安装的时候装错了CUDA的版本号 这里最高支持12.2.138, 但是我装了一个12.2.140的CUDA,导致不兼容我在测试时发现 import torch# if torch.cuda.is_available(): # print("GPU可用") # else: # p…

Xilinx FPGA 超温关机保护

在UG480文档,有关于FPGA芯片热管理的介绍。 首先需要理解XADC中的 Over Temperature(OT)和User Temperature的关系。片上温度测量用于关键温度警告,也支持自动关机,以防止设备被永久损坏。片上温度测量在预配置和自动关…

python flask框架 debug功能

从今天开始,准备整理一些基础知识,分享给需要的人吧 先整理个flask的debug功能,首先列举一下debug加与不加的区别,然后再上代码和图看看差异 区别: (1)加了debug后,修改js&#xf…