【yolo】yolo训练报错,以及解决方案

背景:

刚刚,写了《【yolo】yolo推理报错,以及解决方案》,马上训练就遇到类似的报错。
我对我标注的图像进行了300轮的训练,但是训练完300轮后,报错了。。。

报错信息

300 epochs completed in 0.085 hours.
Traceback (most recent call last):File "<frozen runpy>", line 198, in _run_module_as_mainFile "<frozen runpy>", line 88, in _run_codeFile "F:\envs\yolo8\Scripts\yolo.exe\__main__.py", line 7, in <module>File "F:\envs\yolo8\Lib\site-packages\ultralytics\cfg\__init__.py", line 567, in entrypointgetattr(model, mode)(**overrides)  # default args from model^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "F:\envs\yolo8\Lib\site-packages\ultralytics\engine\model.py", line 390, in trainself.trainer.train()File "F:\envs\yolo8\Lib\site-packages\ultralytics\engine\trainer.py", line 208, in trainself._do_train(world_size)File "F:\envs\yolo8\Lib\site-packages\ultralytics\engine\trainer.py", line 468, in _do_trainself.final_eval()File "F:\envs\yolo8\Lib\site-packages\ultralytics\engine\trainer.py", line 615, in final_evalstrip_optimizer(f)  # strip optimizers^^^^^^^^^^^^^^^^^^File "F:\envs\yolo8\Lib\site-packages\ultralytics\utils\torch_utils.py", line 484, in strip_optimizerx = torch.load(f, map_location=torch.device("cpu"))^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "F:\envs\yolo8\Lib\site-packages\torch\serialization.py", line 1470, in loadraise pickle.UnpicklingError(_get_wo_message(str(e))) from None
_pickle.UnpicklingError: Weights only load failed. This file can still be loaded, to do so you have two options, do those steps only if you trust the source of the checkpoint.(1) In PyTorch 2.6, we changed the default value of the `weights_only` argument in `torch.load` from `False` to `True`. Re-running `torch.load` with `weights_only` set to `False` will likely succeed, but it can result in arbitrary code execution. Do it only if you got the file from a trusted source.(2) Alternatively, to load with `weights_only=True` please check the recommended steps in the following error message.WeightsUnpickler error: Unsupported global: GLOBAL ultralytics.nn.tasks.DetectionModel was not an allowed global by default. Please use `torch.serialization.add_safe_globals([DetectionModel])` or the `torch.serialization.safe_globals([DetectionModel])` context manager to allowlist this global if you trust this class/function.Check the documentation of torch.load to learn more about types accepted by default with weights_only https://pytorch.org/docs/stable/generated/torch.load.html.

报错原因分析

问题出在训练完成后加载模型权重时,PyTorch的torch.load函数无法正确加载权重文件。具体原因是PyTorch 2.6及以上版本默认启用了weights_only=True,限制了加载的全局对象类型,而权重文件中包含了一个不被允许的全局对象(ultralytics.nn.tasks.DetectionModel)。
这个原因和推理报错类似

从错误信息来看,问题出在训练完成后加载模型权重时,PyTorch的torch.load函数无法正确加载权重文件。具体原因是PyTorch 2.6及以上版本默认启用了weights_only=True,限制了加载的全局对象类型,而权重文件中包含了一个不被允许的全局对象(ultralytics.nn.tasks.DetectionModel)。


  1. PyTorch的weights_only机制
    PyTorch 2.6及以上版本默认启用了weights_only=True,这是一种安全机制,防止加载不受信任的权重文件时执行任意代码。如果你的权重文件中包含不被允许的全局对象(如自定义类或函数),就会触发此错误。

  2. 权重文件问题
    你的权重文件中可能包含了一些自定义的类或函数(如ultralytics.nn.tasks.DetectionModel),这些对象不被weights_only=True允许加载。


解决方法,详细步骤

以下是具体的操作步骤:

  1. 找到加载权重的代码
    在你的错误日志中,加载权重的代码位于ultralytics/utils/torch_utils.py的第484行:
    x = torch.load(f, map_location=torch.device("cpu"))
    

如果你是新建的虚拟环境,直接安装的pytorch的包,那么源代码会在虚拟环境下:
F:\envs\yolo8\Lib\site-packages\ultralytics/utils/torch_utils.py

  1. 修改加载代码
    将上述代码修改为:
    x = torch.load(f, map_location=torch.device("cpu"), weights_only=False)
    

在这里插入图片描述

  1. 重新运行训练
    保存修改后的代码,并重新运行训练脚本。
    修改后立竿见影,不再报错:
    在这里插入图片描述

注意事项

  • 安全性:将weights_only设置为False或使用add_safe_globals会降低安全性,请确保权重文件来自可信来源。
  • 兼容性:如果降级PyTorch版本,请确保其他依赖库与新版本兼容。
  • 备份:在修改代码或降级PyTorch之前,建议备份当前环境和代码。

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

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

相关文章

vscode/cursor中python运行路径设置 模块导入问题

vscode/cursor中python运行路径设置 ## 文件路径设置 问题描述 pycharm的项目用cursor运行&#xff0c;出现目录找不到 后来利用 os.getcwd()&#xff0c;经过打印调试发现是IDE的本身配置问题 pycharm中&#xff0c;os.getcwd()默认打开当前脚本所在目录 vscode/cursor中…

理解线性动力学中的模态叠加法

线性动力学中的模态叠加方法 模态叠加法是线性动力学中一种有价值的工具&#xff0c;可以有效地确定频域或时域中的系统响应。对于某些类型的线性动力学分析&#xff0c;有必要使用此方法&#xff0c;因此了解该过程对于获得准确的结果至关重要。在本博客中&#xff0c;我们将…

报错 - redis - Unit redis.service could not be found.

报错&#xff1a; Unit redis.service could not be found.Could not connect to Redis at 127.0.0.1:6379: Connection refused解决方法&#xff1a; 检查状态、有必要的话 重新安装 Linux 上查看状态 systemctl status redis显示以下内容&#xff0c;代表正常服务 出现下面…

CMS网站模板定制设计与安全评估

内容概要 现代CMS&#xff08;内容管理系统&#xff09;作为网站建设的核心载体&#xff0c;其模板架构与安全防护体系的协同设计已成为企业数字化转型的关键环节。随着网络攻击向量日益复杂化&#xff0c;基于HTTPS协议的端到端加密部署不仅成为基础安全配置&#xff0c;更直…

【React】useEffect、useLayoutEffect底层机制

目录 useEffect不设置依赖设置空数组&#xff0c;无依赖设置多个依赖返回值是一个函数总结useEffect的使用环境useEffect 中发送请求错误示例用.then获取数据在useEffect创建一个函数 总结 useLayoutEffectuseLayoutEffect 和useEffect区别执行时机&#xff1a;浏览器渲染的关系…

深度解析学术论文成果评估(Artifact Evaluation):从历史到现状

深度解析学术论文成果评估(Artifact Evaluation)&#xff1a;从历史到现状 引言 在计算机科学和工程领域的学术研究中&#xff0c;可重复性和可验证性越来越受到重视。随着实验性研究的复杂性不断增加&#xff0c;确保研究成果可以被其他研究者验证和构建变得尤为重要。这一需…

VSCode创建VUE项目(四)增加用户Session管理

将用户信息存储或者更新到Session sessionStorage.setItem("userID",loginform.value.username); sessionStorage.setItem(loginTime, Date.now()); 获取Session信息 const storedUserInfo sessionStorage.getItem(userID); const loginTime sessionStorage.get…

威联通 后台可用命令查看Bash

一、查看所有可用命令的方法 列出所有外部命令&#xff08;二进制文件&#xff09; 外部命令通常存放在系统路径&#xff08;如 /bin, /usr/bin, /sbin, /usr/sbin&#xff09;中&#xff1a; bash ls /bin /usr/bin /sbin /usr/sbin # 直接列出命令目录&#xff08;结果较长&…

游戏MOD伴随盗号风险,仿冒网站借“风灵月影”窃密【火绒企业版V2.0】

游戏MOD&#xff08;即游戏修改器&#xff09;是一种能够对游戏进行修改或增强的程序&#xff0c;因其能够提升游戏体验&#xff0c;在玩家群体中拥有一定的市场。然而&#xff0c;这类程序大多由第三方开发者制作&#xff0c;容易缺乏完善的安全保障机制&#xff0c;这就为不法…

Kubernetes Init 容器:实现 Nginx 和 PHP 对 MySQL 的依赖检查

在设计 Kubernetes Pod 时&#xff0c;如果需要在启动 Nginx 和 PHP 之前等待 MySQL 启动完成&#xff0c;可以通过 初始化容器&#xff08;initC&#xff09; 来实现。初始化容器可以用于检查 MySQL 是否可用&#xff0c;只有在 MySQL 可用后&#xff0c;才会继续启动主容器&a…

SSL/TLS 和 SSH 介绍以及他们的区别

目录 SSL/TLS SSL/TLS工作原理的核心步骤握手阶段&#xff08;Handshake Protocol&#xff09;加密通信阶段&#xff08;Encrypted Communication Phase&#xff09;会话恢复&#xff08;Session Resumption&#xff09; SSH SSH 加密机制的核心步骤 SSH 和 SSL 区别 SSL/TLS …

QT二 QT使用generate form 生成常用UI,各种UI控件

一 。没有使用general form 和 使用 general form 后&#xff0c;file层面和代码层面的不同比较 file层面的不同 代码层面的不同&#xff0c; 在 使用了general form之后&#xff0c;在主界面的构造方法中&#xff0c;使用ui->setupUi(this),就完成了所有UI的处理。 而之…

Qt中多线程

在Qt中实现多线程主要有两种常用方式&#xff1a;基于QThread的子类化和QObjectmoveToThread的Worker模式。以下是详细说明和示例代码&#xff1a; 1. 传统方法&#xff1a;继承 QThread&#xff08;适用于简单任务&#xff09; #include <QThread> #include <QDebug…

从PGC到AIGC:海螺AI多模态内容生成系统架构一站式剖析

海螺AI&#xff1a;基于多模态架构的下一代认知智能引擎 海螺AI核心模型架构基础模型&#xff1a;abab-6.5语音模型&#xff1a;speech-01 视频生成管线关键子系统快速接入海螺AI 蓝耘MaaS平台什么是MaaS平台&#xff1f;支持的大模型蓝耘搭载海螺AI的优势 实战应用教程如何注册…

二分查找上下界问题的思考

背景 最近在做力扣hot100中的二分查找题目时&#xff0c;发现很多题目都用到了二分查找的变种问题&#xff0c;即二分查找上下界问题&#xff0c;例如以下题目&#xff1a; 35. 搜索插入位置 74. 搜索二维矩阵 34. 在排序数组中查找元素的第一个和最后一个位置 它们不同于查找…

android adjust 卸载与重装监测

想要洞察应用内用户的留存率,可以通过Adjust 的卸载与重装进行监测 名词解释: 卸载:集成完成后,卸载应用,安装状态为:卸载 重装:如果应用已经卸载,但一段时间后又进行安装,则会被视为重装。 📢📢📢:adjust 文件中说到24 小时后,可以再 adjust 控制台看安装…

算法系列——有监督学习——4.支持向量机

一、概述 支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;是一种应用范围非常广泛的算法&#xff0c;既可以用于分类&#xff0c;也可以用于回归。 本文将介绍如何将线性支持向量机应用于二元分类问题&#xff0c;以间隔&#xff08;margin&#x…

【Mani_skill】success判断的核心调用逻辑

1. 可视化调用流程&#xff08;from Deepseek-r1-Cursor&#xff09; [RL算法调用 env.step()]↓ 调用 env.get_info()↓ 调用 env.evaluate() → 返回包含 success 的字典↓ 将 success 存入 info 字典↓ 在 step() 中处理终止条件&#xff1a; terminated success | fail

【图像处理基石】什么是HDR图片?

1. 什么是HDR图片&#xff1f; HDR&#xff08;高动态范围图像&#xff0c;High Dynamic Range&#xff09;是一种通过技术手段扩展照片明暗细节的成像方式。以下是关于HDR的详细说明&#xff1a; 核心原理 动态范围&#xff1a;指图像中最亮和最暗区域之间的亮度差。人眼能…

嵌入式笔记 | 正点原子STM32F103ZET6 4 | 中断补充

1. 外设引脚重映射 1.1 定义 在STM32中&#xff0c;每个外设的引脚都有默认的GPIO端口&#xff0c;但有些引脚可以通过重映射寄存器将功能映射到其他端口。这种机制称为引脚重映射&#xff0c;主要用于解决引脚复用冲突或优化PCB布线。 1.2 重映射的类型 部分重映射&#x…