yolov8 出现loss 为nan

原因:

  混合精度训练是一种通过同时使用 FP16 和 FP32 精度来加速深度学习训练的技术。它可以在不损失模型性能的情况下,显著减少训练时间和内存使用。下面是关于混合精度训练的一些解释:

1. 原理

        混合精度训练利用了 FP16 (16位浮点)和 FP32 (32位浮点)的不同特性。

        FP16 计算速度快,但动态范围和精度较低。FP32 则相反,计算速度较慢但动态范围和精度较高。

        混合精度训练将网络的某些部分(如权重和激活)使用 FP16 表示,而其他部分(如梯度)使用 FP32 表示。这样可以在不损失模型性能的情况下,提高训练速度和减少内存使用。

        Float16 (FP16) 和 Float32 (FP32)的差异:

                FP16 使用 16 bit 表示浮点数,FP32 使用 32 bit。

                FP16 的动态范围和精度较 FP32 更小,但计算速度更快,尤其在 GPU 上。

                FP16 可能会产生溢出和下溢出,导致精度损失。需要特殊处理来避免这些问题

2. 实现

        常见的混合精度训练库包括 NVIDIA 的 APEX 和 PyTorch 内置的 torch.cuda.amp 模块。

        使用时,需要将模型和优化器包装在 FP16 和 FP32 混合精度上下文中,并使用特殊的损失缩放和梯度重scaling技术。

例如在 PyTorch 中,可以使用如下代码启用混合精度训练:

3. 混合精度训练的流程

        将网络中的部分操作使用 FP16 表示,其他部分使用 FP32 表示。通常权重和激活使用 FP16,梯度和损失函数使用 FP32。

        需要使用 loss scaling 技术来避免 FP16 计算时的精度损失。

        在反向传播时,需要使用 gradient scaling 和 gradient clipping 技术来确保梯度的稳定性。

4. 优势

        训练速度提高 2-3 倍

        内存使用降低 2 倍左右

        无需修改原有的训练代码,只需添加少量混合精度相关的代码

        总之,混合精度训练是一种非常实用的技术,可以大幅提高深度学习模型的训练效率,是深度学习从业者必须掌握的技能之一。

这篇博客警示读者在购买用于深度学习的显卡时要避开那些导致RuntimeWarning: All-NaN slice encountered的问题。作者强调这些Tensor核心存在严重缺陷,不适宜进行深度学习任务,建议大家在选购时务必谨慎。

*****方法一:降低cuda和pytorch 版本号

pip3 install torch==1.10.2+cu102 torchvision==0.11.3+cu102 torchaudio===0.10.2+cu102 -f https://download.pytorch.org/whl/cu102/torch_stable.html
最终版本为:
torchvision-0.11.3+cu102-cp39-cp39-win_amd64.whl
torchaudio-0.10.2+cu102-cp39-cp39-win_amd64.whl
torch-1.10.2+cu102-cp39-cp39-win_amd64.whl或者:
pip3 install torch==1.9.1+cu102 torchvision==0.10.1+cu102 torchaudio===0.9.1 -f https://download.pytorch.org/whl/torch_stable.htmlpip3 install torch==1.9.1+cu102 torchvision==0.10.1+cu102 torchaudio===0.9.1 -f https://download.pytorch.org/whl/torch_stable.html -i http://mirrors.aliyun.com/pypi/simple/  --trusted-host mirrors.aliyun.com原文链接:https://blog.csdn.net/a2609437730/article/details/120637849
最终的版本为python39:
torchaudio-0.9.1-cp39-cp39-win_amd64.whl
torch-1.9.1+cu102-cp39-cp39-win_amd64.whl
torchvision-0.10.1+cu102-cp39-cp39-win_amd64.whl

如上所示:loss、MAP为nan可解决。

强烈推荐 方法一

方法二:将混合精度训练AMP 设置为False

第一步:找到ultralytics\cfg\default.yaml中的default.yaml文件
将default.yaml中的amp设置为false,如下所示:amp: False # (bool) Automatic Mixed Precision (AMP) training, choices=[True, False], True runs AMP check将default.yaml中的half设置为false,如下所示:half: False  # (bool) use half precision (FP16)第二步:找到ultralytics\engine\validator.py中的validator.py文件,如下所示:将self.args.half = self.device.type != 'cpu' # force FP16 val during training这行代码注释掉# self.args.half = self.device.type != 'cpu'  # force FP16 val during training修改之后的代码为:self.training = trainer is not Noneaugment = self.args.augment and (not self.training)if self.training:self.device = trainer.deviceself.data = trainer.data# self.args.half = self.device.type != 'cpu'  # force FP16 val during trainingmodel = trainer.ema.ema or trainer.modelmodel = model.half() if self.args.half else model.float()if hasattr(model, 'criterion'):if hasattr(model.criterion.bbox_loss, 'wiou_loss'):model.criterion.bbox_loss.wiou_loss.eval()# self.model = modelself.loss = torch.zeros_like(trainer.loss_items, device=trainer.device)self.args.plots &= trainer.stopper.possible_stop or (trainer.epoch == trainer.epochs - 1)model.eval()

在使用GTX16xx系列显卡训练YOLO系列模型时,可能会遇到训练过程中loss出现nan值或者测试时P/R/map全部为0的问题。这些问题通常是由于显卡硬件和软件配置不当导致的。为了解决这些问题,可以尝试以下几种方法:

  1. 调整学习率:学习率过高可能导致训练过程中的数值溢出或下溢,从而产生nan值。可以尝试减小学习率,以避免这种情况的发生。
  2. 增加梯度下降的步长:在某些情况下,梯度下降的步长过小可能导致训练不稳定,产生nan值。可以尝试增加步长,以提高训练的稳定性。
  3. 开启梯度检查:在训练过程中,可以开启梯度检查来检测梯度的合理性。如果发现梯度不合理(例如梯度过大或过小),可以采取相应的措施进行调整。
  4. 检查数据集:数据集的质量对模型的训练至关重要。如果数据集中存在噪声或异常值,可能会导致训练不稳定或产生nan值。因此,需要仔细检查数据集的完整性、标注的准确性等。
  5. 更新显卡驱动和CUDA版本:显卡驱动和CUDA版本过旧可能导致与YOLO系列模型的兼容性问题。尝试更新到最新版本的驱动和CUDA,以解决潜在的兼容性问题。
  6. 检查模型结构和参数:有时候,模型的结构或参数设置不当也可能导致训练不稳定或产生nan值。可以尝试调整模型的结构或参数,以找到最优的设置。
  7. 使用混合精度训练:混合精度训练是一种提高训练速度的方法,它使用float16和float32两种数据类型进行训练。然而,在某些情况下,混合精度训练可能会导致数值不稳定性,产生nan值。在这种情况下,可以尝试关闭混合精度训练,只使用float32数据类型进行训练。
  8. 检查代码实现:在某些情况下,代码实现可能存在错误或不当之处,导致训练或测试过程中出现问题。仔细检查代码实现,确保符合YOLO系列模型的规范和要求。
    如果尝试了以上方法仍然无法解决问题,可以考虑使用其他版本的YOLO系列模型或更换其他型号的显卡进行训练和测试。同时,也可以参考相关社区和论坛中其他用户的经验和解决方案,以获取更多的帮助和建议。

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

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

相关文章

每日一题——贪心算法

860. 柠檬水找零 - 力扣(LeetCode) 这道题目乍一看可能没有什么头绪,但是当你仔细想想就会明白一个道理,那就是,《论电子支付的重要性》哈哈哈哈,言归正传,其实很简单无非就是找钱,…

Alembic:python中数据库迁移的瑞士军刀

Alembic 简介 Alembic 是由 SQLAlchemy 的创始人 Mike Bayer 设计的一个数据库迁移工具。它不仅支持自动迁移脚本生成,还允许开发者手动编辑迁移脚本来满足特定的需求。Alembic 通过提供一个环境来跟踪数据库模式的变更历史,确保数据库的版本与应用代码…

linux内核 时间同步机理分析笔记

1 内核时间管理的相关组件 1.1 clocksource 和 clock_event_device 1.1.1 简介 外部时钟设备的主要作用是提供精确的计时功能和定期产生中断的功能,内部把提供精确计时的功能抽象为clocksource对象,把定期产生中断的功能抽象为clock_event_device对象…

《黑神话:悟空》全网互动量超1.8亿,百万天命人重走西游

四年磨一剑,一剑破长空。 8月20日10点,《黑神话:悟空》正式开服,同时轰动了国内外游戏圈子,冲顶国内各大社媒平台,一天包揽120个热搜。上线之后,《黑神话:悟空》火速登顶Steam热销游…

克服编程学习中的挫折感:从心态到策略的全方位指南

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《热点时事》 期待您的关注 目录 引言 一、心态调整:积极乐观,合理期望 二、学习方法:有效策…

一起学Java(3)-Java项目构建工具Gradle和Maven场景定位和优缺点对比

在第一步创建的项目(java-all-in-one)项目里,我们提到了使用Gradle作为项目构建工具。看到这里,不知道你是否有疑惑,什么是项目构建工具。Java项目常用构建工具有哪些?都有什么特点? 带着疑惑&…

【教程】Ubuntu给pycharm添加侧边栏快捷方式

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 以下教程不仅限于pycharm,其他软件也是一样操作 1、进入到pycharm的目录,先通过命令行打开pycharm: ./bin/pycharm…

[Leetcode 61][Medium]-旋转链表

目录 一、题目描述 二、整体思路 三、代码 一、题目描述 原题链接 二、整体思路 首先发现这样的规律:当k大于等于链表中节点总数n时,会发现此时旋转后的链表和kk%n时的旋转后的链表一样。同时对于特殊情况n0和n1时,无论k的值为多少都可以…

论文翻译:Universal and Transferable Adversarial Attacks on Aligned Language Models

Universal and Transferable Adversarial Attacks on Aligned Language Models https://arxiv.org/pdf/2307.15043v2 通用且可转移的对抗性攻击对齐语言模型 文章目录 通用且可转移的对抗性攻击对齐语言模型摘要1 引言2 一个针对LLMs的通用攻击2.1 产生肯定回应2.2 贪婪坐标梯…

Prometheus Alertmanager告警之邮件、钉钉群、企业微信群机器人报警

文章目录 一、部署alertmanager相关组件1.alertmanager-config2.alertmanager-message-tmpl3.alertmanager 二、调试邮件告警三、钉钉群/企业微信群 报警3.1添加钉钉群机器人3.2添加企业微信群机器人3.3部署alertmanager-webhook-adaptermessage-tmplalertmanager-webhook-adap…

【PHP入门教程】PHPStudy环境搭建+HelloWorld运行

文章目录 PHP 的历史PHP 的用途PHP 的特点和优势PHP 环境搭建环境准备安装window 安装CentOS / Ubuntu / Debian 安装 第一个Hello World使用Apache服务运行命令行运行代码 PHP 的历史 PHP(Hypertext Preprocessor)超文本预处理器是一种开源的通用脚本语…

CART决策树-基尼指数(全网最详解)

文章目录 一、基尼指数的定义二、基尼指数在CART决策树中的应用三、基尼指数与CART决策树的构建1.计算每个子集的基尼系数:2.计算基尼指数3.选择最优特征4.其余基尼指数5.构建决策树 四、总结 CART决策树基尼指数是CART(Classification And Regression T…

[C语言]-基础知识点梳理-文件管理

前言 各位师傅们好,我是qmx_07,今天给大家讲解文件管理的相关知识,也就是常见的 读取,删除一类的操作 文件 为什么要使用文件? 程序的数据是存储在电脑的内存中,如果程序退出,内存回收&…

Godot自定义快捷键(配置视图快捷键)

如图 这个没啥技术,但是配置快捷键的时候有讲究如图 选择万国码并且将前后左右下上(顶底)分别配置为123456。汝等自管记好,今后自有妙用(哈哈)效果如图

解决电脑突然断网没网,以太网无网络访问权限,本地连接时出错:地址仍未与网络终结点关联

帮同事处理网络问题,尝试了拔插网线,重启电脑,禁用启用以太网,都没有解决。 于是在**命令提示符(cmd)**中执行命令: ipconfig /release 按回车执行后,返回提示:本地连接时出错:地址…

什么是GD32 MCU读保护?

如今电子产品市场风云变幻,暗流汹涌,有没有小伙伴遇到自己费了大力气写出来的代码,很容易就被别人“借鉴”了,真的是让闻者伤心,听着落泪啊。 那有没有什么方法可以防止别人将你的代码从MCU读出来呢?答案当…

大众点评2024年6月全国全分类店铺基础信息数据库

大众点评的采集在2023年之前还是比较好采集的,很多接口不需要登录,即使登录一个帐号也可以采集很多,所以大约2023年8月以前的大众点评店铺字段非常丰富,几乎所有常见店铺字段都能采集。 2023年8月以后,大量接口权限变…

网安新声 | 网易云音乐崩了:网络安全如何守护在线体验

网安加社区【网安新声】栏目,汇聚网络安全领域的权威专家与资深学者,紧跟当下热点安全事件、剖析前沿技术动态及政策导向,以专业视野和前瞻洞察,引领行业共同探讨并应对新挑战的策略与可行路径。 8月19日,#网易云音乐崩…

企业高性能web服务器【Nginx详解】

一.Web 服务基础介绍 1.1 互联网发展历程 1993年3月2日,中国科学院高能物理研究所租用AT&T公司的国际卫星信道建立的接入美国SLAC国家实 验室的64K专线正式开通,成为我国连入Internet的第一根专线。 1995年马云开始创业并推出了一个web网站 中国黄页…

VAuditDemo安装漏洞

目录 VAuditDemo安装漏洞 index.php header.php config.php lib.php install.php 分析结果 漏洞利用 第一步:删除install.lock文件,访问 install.php 抓包 第二步:通过审计构造payload 第三步:修改抓包请求内容&#x…