【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.pswp.cn/diannao/74063.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/74063.shtml
英文地址,請注明出處:http://en.pswp.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…