汇总利用YOLO26训练遇到的报错和解决方案(包含训练过程中验证阶段报错、精度报错、损失为Nan、不打印GFLOPs)
一、本文介绍本文为专栏内读者和我个人在训练YOLOv26时遇到的各种错误解决方案你遇到的问题本文基本上都能够解决同时本文的内容为持续更新定期汇总大家遇到的问题已经一些常见的问题答案目前包含的问题已经解决方法汇总如下图所示。专栏链接YOLOv26有效涨点专栏包含Conv、注意力机制、主干/Backbone、损失函数、优化器、后处理等改进机制目录一、本文介绍二、 报错问题(1)训练过程中loss出现Nan值.(2)多卡训练问题,修改模型以后不能支持多卡训练可以尝试下面的两行命令行操作两个是不同的操作是代表不同的版本现尝试第一个不行用第二个(3) 针对运行过程中的一些报错解决(4) 针对yaml文件中的nc修改(5) 针对环境的问题(6) 训练过程中不打印GFLOpS(7) mmcv安装的解决方法三、全文总结二、 报错问题# 以下为两个重要库的版本大家可以对应下载使用教程我会更新时间还没来得及大家可以先看视频使用。项目环境python 3.9.7pytorch 1.12.1timm 0.9.12mmcv-full 1.6.2(1)训练过程中loss出现Nan值.可以尝试关闭AMP混合精度训练如何关闭amp呢找到如下文件ultralytics/cfg/default.yaml其中有一个参数是amp: False # (bool) Automatic Mixed Precision (AMP) training, choices[True, False], True runs AMP check我们将其设置为False即可默认时为True。.(2)多卡训练问题,修改模型以后不能支持多卡训练可以尝试下面的两行命令行操作两个是不同的操作是代表不同的版本现尝试第一个不行用第二个python -m torch.distributed.run --nproc_per_node 2 train.pypython -m torch.distributed.launch --nproc_per_node 2 train.py(3) 针对运行过程中的一些报错解决1.如果训练的过程中验证报错了(主要是一些形状不匹配的错误这是因为验证集的一些特殊图片导致)就是有这种训练第一个epochs完成后开始验证的时候报错下面的方法基本百分之九十都能够解决。找到ultralytics/models/yolo/detect/train.py的DetectionTrainer class中的build_dataset函数中的rectmode val改为rectFalse2.推理的时候运行detect.py文件报了形状不匹配的错误找到ultralytics/engine/predictor.py找到函数def pre_transform(self, im),在LetterBox中的auto改为False3.训练的过程中报错类型不匹配的问题找到ultralytics/engine/validator.py文件找到 class BaseValidator: 然后在其__call__中self.args.half self.device.type ! cpu # force FP16 val during training的一行代码下面加上self.args.half False(4) 针对yaml文件中的nc修改不用修改模型会自动根据你数据集的配置文件获取。这也是模型打印两次的区别第一次打印出来的就是你选择模型的yaml文件结构第二次打印的就是替换了你数据集的yaml文件模型使用的是第二种。(5) 针对环境的问题环境的问题我实在解决不过来所以大家可以自行在网上搜索解决方案。这里是我早期写的一个环境搭建的教程大家可以参考。https://snu77.blog.csdn.net/article/details/128027977(6) 训练过程中不打印GFLOpS计算的GFLOPs计算异常不打印所以需要额外修改一处 我们找到如下文件ultralytics/utils/torch_utils.py文件内有如下的代码按照如下的图片进行修改大家看好函数就行其中红框的640可能和你的不一样 然后用我给的代码替换掉整个代码即可。def get_flops(model, imgsz640): Return a YOLO models FLOPs. try: model de_parallel(model) p next(model.parameters()) # stride max(int(model.stride.max()), 32) if hasattr(model, stride) else 32 # max stride stride 640 im torch.empty((1, 3, stride, stride), devicep.device) # input image in BCHW format flops thop.profile(deepcopy(model), inputs[im], verboseFalse)[0] / 1E9 * 2 if thop else 0 # stride GFLOPs imgsz imgsz if isinstance(imgsz, list) else [imgsz, imgsz] # expand if int/float return flops * imgsz[0] / stride * imgsz[1] / stride # 640x640 GFLOPs except Exception: return 0(7) mmcv安装的解决方法有的读者mmcv-full会安装失败是因为自身系统的编译工具有问题也有可能是环境之间安装的有冲突 推荐大家离线安装的形式,下面的地址中大家可以找找自己的版本,下载到本地进行安装。 https://download.openmmlab.com/mmcv/dist/cu111/torch1.8.0/index.html https://download.openmmlab.com/mmcv/dist/index.html三、全文总结到此本文的正式分享内容就结束了在这里给大家推荐我的YOLOv26改进有效涨点专栏本专栏目前为新开的平均质量分98分后期我会根据各种最新的前沿顶会进行论文复现也会对一些老的改进机制进行补充目前本专栏免费阅读(暂时大家尽早关注不迷路~)如果大家觉得本文帮助到你了订阅本专栏关注后续更多的更新~专栏链接YOLOv26有效涨点专栏包含Conv、注意力机制、主干/Backbone、损失函数、优化器、后处理等改进机制这里会持续更新群内的一些报错的解决方法同时希望大家对于我的CSDN博客能够看完之后顺手点赞收藏和评论支持一下这样我也会更努力的给大家收集更多的改进机制专栏如果销量好后面我会考虑出模型剪枝和蒸馏同时人数多了我更新起来也更有动力在此真诚的感谢大家。