YOLO系列训练时出现loss出现nan值或者测试时P\R\map全部为0值的解决办法(GTX16xx系列显卡大坑)

2023-11-03

目录

0 前言(用处不大,可以直接看解决办法)

1 产生问题的原因

2 解决办法

YOLO V5

YOLO V7

2 小结

☆ 这个问题是GTX16xx用户的大坑,基本上每个GTX16xx用户使用YOLO系列算法,都会遇到这些问题。
这个方法是不彻底的解决办法,牺牲了训练的时间来换取问题的解决,经过本人在GTX1660TI笔记本上测试YOLOV5和YOLOV7算法均成功解决了。
0 前言(用处不大,可以直接看解决办法)
最近正在做目标检测相关的算法,因为要求实时性要很高,所以选择了YOLO系列算法。最先开始选择的是刚出炉新鲜的YOLOV7算法,训练时没有问题,但是在最终测试时,发现检测不出来任何的bbox,开始以为是没有训练好,但是发现训练时的validation都有bbox。最后决定还是老实采用YOLO V5算法(为什么不选美团的YOLO V6?YOLO V6在论文外的数据集,表现还没有YOLOV 5好,大家dddd),不过使用YOLOV5 时又发现了训练时出现了nan值,于是在github上yolov5问答里找到了解决办法(不使用AMP)。但是有发现了validation时出现P\R\map全为0值。于是找呀找,最后都没有发现问题所在。最后在阅读YOLO V5 的train.py的源代码发现了一些解决办法问题。

1 产生问题的原因
由于NVIDIA 官方的一些软件问题,导致了PyTorch里面一些CUDA代码有些问题,就是fp16(float16)数据类型在卷积等一些运算的时候会出现nan值。导致了训练时候出现了nan值,故而在validation时就会检测不到导致了上述情况。

2 解决办法
YOLO V5
里面检测没有nan值、不识别问题,就只有训练的时候有问题。

下面正式开始解决问题,在train.py搜索amp把check_amp注释掉直接把amp赋值为False,如下图:

这样做之后在运行train.py发现训练时就不会有nan值了。如果还有,那就应该就关闭这篇博客了,考虑下其他方法了。然后,你就会发现validation时会出现P/R/map全部为0。然后你就继续在train.py里面搜索half关键字,把所有有.half()变为.float(),如下图:

这样之后,你就会发现

——还是没有解决问题。

要解决这个问题,还需要在val.py里面将所有的half改为False,同时im.half() if half else im.float() 改为 im.float()。如下图:

这样做之后,再次运行train.py发现没有问题了。

YOLO V7
经测试,train.py没有问题,主要还是在detect.py里面有问题。主要还是把每个地方.half()改为.float()或者把half赋值为False,如下图:

3 小结
其实,归根究底就是NVIDIA对GTX16xx相关CUDA包有问题,有其他人说吧PyTorch版本降为1.10.1和CUDA 10.2,我也试过,确实能解决问题,但是训练时长长了很多,而且现在PyTorch官方已经不怎么支持使用CUDA 10.2版本了。

这个解决办法的原理,就是把显卡半精度浮点型数据改为单精度的浮点型去运算。这样虽然精度高了,但是训练时长也相应会增加一些、显存占用也会增加一些,但是,这样总比不能训练和不能检测要好些吧,要是有更好的办法,也请在评论区分享分享。。

来源:有头发的垃圾猿

您可能感兴趣的内容:
36、RK3399Pro 环境搭建和Yolov5 c++调用opencv进行RKNN模型部署和使用
YOLOV5源码的详细解读
yolov5——detect.py代码【注释、详解、使用教程】
Jetson Nano配置YOLOv5并实现FPS=25
yolov5——train.py代码【注释、详解、使用教程】

https://www.iotword.com/4902.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

YOLO系列训练时出现loss出现nan值或者测试时P\R\map全部为0值的解决办法(GTX16xx系列显卡大坑) 的相关文章

  • 环形链表问题

    题目 给定一个链表的头节点 head 返回链表开始入环的第一个节点 如果链表无环 则返回 null 如果链表中有某个节点 可以通过连续跟踪 next 指针再次到达 则链表中存在环 为了表示给定链表中的环 评测系统内部使用整数 pos 来表示
  • linux 软件安装各种方法

    一 简单介绍 1 软件安装卸载 分几种情况 A RPM包 这种软件包就像windows的EXE安装文件一样 各种文件已经编译好 并打了包 哪个文件该放到哪个文件夹 都指定好了 安装非常方便 在图形界面里你只需要双击就能自动安装 如何卸载 1
  • SE-ResNet的实现

    见 D pythonCodes 深度学习实验 4 1 经典分类网络 inference代码汇总 models se resnet py 一 SE ResNet的实现方法 读了senet这篇论文之后 可以知道senet并没有提出一个新的网络

随机推荐

  • Easyui combobox 判断输入项是否存在于下拉列表中

    combobox的getValue方法很诡异 当输入项是存在于下拉列表时 返回的是需要的ID 但是当输入项是不存在于下拉列表时 却直接返回用户的输入结果 从而导致没法判断用户是否输入了下拉框不存在的项 本来第一时间想到直接判断getValu
  • 蓝绿发布、滚动发布、灰度发布,有什么区别?

    目录 01 蓝绿发布 02 滚动发布 03 灰度发布 04 A B测试 在项目迭代的过程中 不可避免需要 上线 上线对应着部署 或者重新部署 部署对应着修改 修改则意味着风险 目前有很多部署发布的技术 这儿将常见的做一个总结 举一个情景例子
  • 第一次使用Xshell服务器跑程序(保姆教程)

    前期准备 1 提前下载好Xshell和Xftp 2 有自己的服务器账号名 密码 服务器IP 默认端口号 我的是组里师兄给我创建的 以上两步下载注册步骤可以参考文章1和文章2 3 我的服务器默认安装好了Anaconda3和cuda11 1 1
  • Flutter之状态管理Provider使用和详解

    在前端页面 状态管理和消息传递一直是我们开发一个交互性好 体验好的前端应用或者APP必须要提到的东西 设想一下我们需要两个组件之间共享数据 而且两个组件之间具有联动效果 对于Flutter来说我们能够把数据保存到一个全局变量 然后每次使用的
  • Spring源码分析之createBean主流程分析

    我们知道 在调用getBean获取bean实例的实例 首先会从缓存中获取bean实例 如果没有获取到 就会去创建bean的时候 关于获取bean实例 可以参考Spring源码分析之getBean主流程分析 而本文将会对创建bean实例的主流
  • 分享一个前后端分离的web项目(vue+spring boot)

    Github地址 https github com smallsnail wh 前端项目名为wh web 后端项目名为wh server 项目展示地址为我的github pages https smallsnail wh github io
  • simple and useful command lines

    pip list grep package name 显示获取已安装包的信息 包名与版本号 pip show package name 能显示该安装的包的相关信息 其中包括它的安装路径 实际上包通常被安装在python安装目录下的lib s
  • Numpy学习笔记

    文章目录 常用函数 np linspace numpy arange start end step dtype numpy tile A reps np array numpy ndim A np flatten np reshape np
  • RPA机器人有效解决低效能业务流程升级难点

    企业的数字化 自动化转型是一个综合命题 RPA也绝非是低效套用的通用模板 在决策各个阶段的关键要点都需要量体裁衣 细致考量 为了达到更好的效果 企业在从厘清内部需求阶段就应引入专业的咨询人员有针对性地开展交流和指导 以结果为导向 协助企业全
  • ue4 命令行编译 烘焙 打包 存档

    首先是官方wiki的说明 How to package your game with commands Jump to navigation search Template Rating This aims to be a quick gu
  • 爬虫做js逆向分析的思路

    1 为什么要做逆向 正常我们访问一个网站是由html css js 文件组成的 下图是某网站的正常访问 当然我们也可以看到是谁调用了这个请求执行了什么 2图为某网站登录链接 分析URL 我们可以看到这个链接他的请求参数 传输方式等 我们可以
  • 蚁群算法原理及matlab代码实现

    蚁群算法基本原理 背景 在自然界中 生物群体所表现出的智能得到越来越多的关注 许多的群智能优化算法都是通过对群体智能的模拟而实现的 其中模拟蚂蚁群体觅食的蚁群算法成为一种主要的群智能算法 算法原理 在自然界中 对于觅食的蚂蚁群体 其可以在任
  • MATLAB PreScan CarSim 联合仿真

    参考视频 PreScan carsim simulink联合仿真 哔哩哔哩 bilibili 参考文档 matlab carsim prescan联合仿真从零开始详细步骤 版本 MATLAB2021b Prescan8 5 CarSim20
  • java注解-ElementType详解

    java注解使用是相当频繁 特别是在搭建一些框架时 用到类的反射获取方法和属性 用的尤其多 java中元注解有四个 Retention Target Document Inherited Retention 注解的保留位置 Retentio
  • go安装

    windows 1 建议去go语言中文网下载 网址 https studygolang com dl 2 配置环境变量 先创建GOPANTH 再配置path 如图 3 检测环境是否安装成功
  • python - os.walk()

    介绍 讲解 概述 os walk 方法用于通过在目录树中游走输出在目录中的文件名 向上或者向下 os walk 方法是一个简单易用的文件 目录遍历器 可以帮助我们高效的处理文件 目录方面的事情 语法 walk 方法语法格式如下 os wal
  • Android反编译apk逆向分析

    Android反编译apk 反编译 逆向 软件下载地址 反编译 逆向 反编译 高级语言源程序经过 编译 变成可执行文件 反编译就是逆过程 但是通常不能把可执行文件变成高级语言源代码 只能转换成汇编程序 计算机软件反向工程 Reversepe
  • QNX网络驱动-设备驱动编写处理方式

    锋影 e mail 174176320 qq com 第一部分 QNX系统的安装与使用 1 QNX的微内核 甚至不包括进程管理 仅提供进程间的通信 Software Bus 但在实际编译的系统中 仍然是进程调度 同步 进程间通信等编译在同一
  • Spring的基本使用

    大家好我是栋zzzz 今天介绍一下Spring的基本使用 为了更好的熟悉Spring 可以先看一下我前面的文章 初识Spring 目录 一 Spring的创建和使用 1 创建一个Maven项目 2 添加Spring框架支持 3 添加启动类
  • YOLO系列训练时出现loss出现nan值或者测试时P\R\map全部为0值的解决办法(GTX16xx系列显卡大坑)

    目录 0 前言 用处不大 可以直接看解决办法 1 产生问题的原因 2 解决办法 YOLO V5 YOLO V7 2 小结 这个问题是GTX16xx用户的大坑 基本上每个GTX16xx用户使用YOLO系列算法 都会遇到这些问题 这个方法是不彻