YOLOv5遇到的问题

问题1:RuntimeError: CUDA error: device-side assert triggeced

先报了一堆这个

然后:

这里是因为训练的配置文件和实际标签里的类别数量不一致导致的。

我浅训练了5个周期,结果如下(随便加的几个类):

发现有4个类别。

但是我本来在配置文件中只给定了两个类别。

所以我用GPT写了脚本判断:

import os

def count_labels_and_find_invalid_files(folder_path, allowed_labels=[0, 1]):
    labels_count = {}
    invalid_files = {}

    # 遍历文件夹中的每个文件
    for filename in os.listdir(folder_path):
        if filename.endswith(".txt"):  # 假设标注文件的扩展名是.txt
            filepath = os.path.join(folder_path, filename)

            # 读取标注文件的内容
            with open(filepath, 'r') as file:
                lines = file.readlines()

            # 遍历每行标注信息
            for line in lines:
                values = line.split()
                if values:
                    label = int(values[0])

                    # 统计标签个数
                    labels_count[label] = labels_count.get(label, 0) + 1

                    # 检查是否有不允许的标签
                    if label not in allowed_labels:
                        if filename not in invalid_files:
                            invalid_files[filename] = []
                        invalid_files[filename].append(line.strip())

    return labels_count, invalid_files

# 用法示例
folder_path = r'txt路径'
labels_count, invalid_files = count_labels_and_find_invalid_files(folder_path)

# 打印结果
print("类别个数:", len(labels_count))
print("每个类别的个数:", labels_count)

if invalid_files:
    print("\n出现其他标签的文件:")
    for filename, invalid_lines in invalid_files.items():
        print(f"{filename}:")
        for line in invalid_lines:
            print(line)
else:
    print("\n所有文件的标签都是合法的。")

这样能帮助找出错误的标签所在文件,我只有0,1标签,所以allowed_labels=[0, 1],如果你有多个标签可以自己改一下这个数组。

找到该文件后,使用以下脚本将标签改成自己想要的

import os
import re
# 路径
# 重写标签里的数字
path = r'D:\datasets\labels\val\\'  #一定要有这两条杠在路径最后
# 文件列表
files = []
for file in os.listdir(path):
    if file.endswith(".txt"):
        files.append(path+file)
# 逐文件读取-修改-重写
for file in files:
    with open(file, 'r') as f:
        new_data = re.sub('^3', '1', f.read(), flags=re.MULTILINE)    # 将列中的3替换为1
    with open(file, 'w') as f:
        f.write(new_data)

最后,重新训练,注意要把train.cache 和val.cache删除,我之前就是没删除然后一直报错。

重新训练会再生成的新的train.cache 和val.cache。

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值