【YOLOv5】使用yolov5训练模型时报错合集

发布于:2024-04-19 ⋅ 阅读:(22) ⋅ 点赞:(0)


前言

这篇文章用来记录在使用yolov5训练模型时报错处理,持续更新······
2024/4/18
【问题一】VsCode终端无法进入Anaconda创建的虚拟环境
【问题二】怎么在VsCode中为项目配置Anaconda创建的虚拟环境
【问题三】yolov5训练模型时报错RuntimeError: result type Float can’t be cast to the desired output type __int64
【问题四】 yolov5训练模型时出现警告AttributeError: ‘FreeTypeFont’ object has no attribute ‘getsize’


问题1 – VsCode终端无法进入Anaconda创建的虚拟环境

【问题描述】

在这里插入图片描述

【问题分析】

VsCode新建终端默认是powershell,需把VsCode终端默认为cmd。

【解决方式】

方法一

在这里插入图片描述

方法二
  • 1、左下角选择设置
    在这里插入图片描述
    2、在搜索框中输入powershell选择Command Prompt
    在这里插入图片描述
  • 3、重启VsCode

问题2 – 怎么在VsCode中为项目配置Anaconda创建的虚拟环境

【问题描述】

假设我们在Anaconda Prompt下创建了一个虚拟环境,我们想要在VsCode中导入创建好的虚拟环境。

【解决方式】

  • 1、在代码空白处同时按下 Ctrl + Shift + P
  • 2、在弹出的搜索框输入“选择解释器”
    在这里插入图片描述
  • 3、点击进入Python: 选择解释器
  • 4、选择你想要的环境
    在这里插入图片描述
  • 5、右下角查看项目的环境
    在这里插入图片描述

问题3 – yolov5训练模型时报错RuntimeError: result type Float can’t be cast to the desired output type __int64

【问题描述】

报错信息如下:
在这里插入图片描述

【问题分析】

PyTorch 的早期版本中,当进行某些运算时,PyTorch 可能会自动对张量的数据类型进行调整以适应操作的需求。然而,在新版本的PyTorch 中,这种自动转换可能不再发生,因此需要显式地进行数据类型的转换。
通过添加 .long() 方法到 torch.ones创建的张量上,可以明确地将该张量的数据类型从默认的浮点数(float)转换为长整型(long)。

【解决方式】

  • 1、找到 loss.py 文件
  • 2、修改loss.py
    将 loss.py 文件中的第173行代码
    gain = torch.ones(7, device=targets.device) # normalized to gridspace gain
    改为
    gain = torch.ones(7, device=targets.device).long()
    在这里插入图片描述
  • 3、按Ctrl + S键对代码进行保存

问题4 – yolov5训练模型时出现警告AttributeError: ‘FreeTypeFont’ object has no attribute ‘getsize’

【问题描述】

报错信息如下:
在这里插入图片描述

【问题分析】

问题出在库Pillow中的getsize函数,getsize已弃用,已在Pillow 10(2023-07-01)中删除。

【解决方式】

方法一

1、找到 plots.py 文件
2、在 plots.py 中添加以下代码

import PIL
def check_version(target_version):
    """
    Check if the current PIL version is greater than or equal to the target version.

    Args:
        target_version (str): The target version string to compare against (e.g., '9.2.0').

    Returns:
        bool: True if the current PIL version is greater than or equal to the target version, False otherwise.
    """
    current_version = PIL.__version__
    current_version_parts = [int(part) for part in current_version.split('.')]
    target_version_parts = [int(part) for part in target_version.split('.')]

    # Compare version parts
    for cur, tgt in zip(current_version_parts, target_version_parts):
        if cur > tgt:
            return True
        elif cur < tgt:
            return False

    # If all parts are equal, the versions are equal or current version is shorter
    return True

在这里插入图片描述

3、修改Annotator类的__init__方法
在__init__方法中添加以下代码段:

if check_version('9.2.0'):
    self.font.getsize = lambda x: self.font.getbbox(x)[2:4]  # text width, height

在这里插入图片描述

4、按Ctrl + S键对代码进行保存

方法二

1、打开Anaconda Prompt

2、进入你为yolov5项目配置的虚拟环境

conda activate yolo_v5

将“yolo_v5”改为你自己创建的虚拟环境名

3、输入以下命令查看安装的pillow版本

pip show pillow

4、使用以下命令卸载pillow

pip uninstall pillow

5、安装版本为9.5.0的pillow(有挂代理/梯子记得关掉)

pip install pillow==9.5.0

如果安装失败或下载速度慢,可改用国内源进行安装,如换清华源:

pip install pillow==9.5.0 -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple --trusted-host=https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple