yolov5运行时显示AssertionError:Label class 1 exceeds nc = 1 in data/middle.yaml.

问题:

AssertionError:Label class 1 exceeds nc = 1 in data/middle.yaml.Possible class labels are 0-0.

问题翻译:定义的只有1个类别,标签应该是0-0.

报错原因:

 打开labelimg,一张一张图片翻阅,查看是否有错标的标签,翻看到五百多张图的时候出现了以下报错,且labelimg自动关闭。

于是打开图片相对应的txt文件,发现问题所在之处。txt文件中标签出现了1,超出类别索引值。

使用labelimg标图时,第一次输错了类别名称并且标框过一次再删除,此时正确的标签索引值变成了1,应该需要关闭labelimg打开之后重新输入正确的类别名。

解决办法:

 将txt中错误文件的类别值全改成0,没有找到用代码解决的办法,只能打开txt文件一个个修改。

2022/9/2更新

自己写了一个简单的代码进行批量的替换,仅适用于分类数目为1的情况,代码如下:

import os

path = r'D:\jiafeng\middle\labels\train' #需改的txt文件的路径
filenames = os.listdir(path) #将所有txt文件的文件名用filename储存起来

for filename in filenames: #遍历所有txt文件
    position = path + '\\' + filename #获取绝对路径 '\\'有一个斜杠是转义符
    # print(position) #此行代码不注释可用于检查绝对路径是否正确

    with open(position) as f:
        lines = f.readlines() #以行为单位读取txt文件中的内容
        s = [line[:-1].split(' ') for line in lines] #以空格为标志分割txt中每行的内容,并以列表的方式储存在s中
        # print(s) #取消注释可以看是否成功分行分元素储存

        for i in range(len(s)): #遍历s的每一行
            # print(s[i][0]) #取消注释可看每一行的第一个元素是多少
            if s[i][0] == '1':
                s[i][0] = '0' #如果每一行的第一个元素为1,也就是分类的标签为1,则将其修改成0
                # print(s) #取消注释可查看是否成功将第一列全修改为0
                # print(len(s[i]))

            with open(position,'w',encoding='utf-8') as f: #将修改完的s写入到txt文件当中
                for j in range(len(s)): #此处采用先按行读取,再按列一个一个元素读取
                    for k in range(len(s[j])):
                        f.write((s[j][k]+' ')) #写入的每一个元素都以空格隔开,因此需要+' '
                    f.write("\n") #写完一行之后需要换行

将所有txt文件修改完之后代码已成功跑通。

  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
引用\[1\]:Yolov5报错: AssertionError: Label class x exceeds nc=x in data/yolov5.yaml. Possible class labels are 0-x-1 File “C:\Users\1\Desktop\水表识别\YOLO5\yolov5-master\train.py”, line 175, in train assert mlc < nc, ‘Label class %g exceeds nc=%g in %s. Possible class labels are 0-%g’ % (mlc, nc, opt.data, nc - 1) 大多博客给出的方法 。 引用\[2\]:问题一:在运行train.py(只有1类)程序过程中出现“AssertionError:Label class 1 exceeds nc=1 in yolo/dataset.ymal Possible class labels are 0-0”情况。 。 引用\[3\]: 训练yolov5的那些事之解决:AssertionError: Label class x exceeds nc=x in data/yolov5.yaml. Possible class labels are 0-x-1问题 问题详情大多博客给出的方法我的解决方法 总结参考资料 。 问题: AssertionError: Label class 1 exceeds nc=1 in /home/suanfa-2/lz/yolov5_tag6.1/yolov5-6.1/data/scq_v4.yaml. Possible class labels are 0-0是什么问题?如何解决? 回答: 这个错误是由于在训练yolov5模型时,标签类别数超过了配置文件中设置的类别数所导致的。具体来说,错误信息中的"Label class 1 exceeds nc=1"表示标签类别1超过了配置文件中设置的类别数1。而"Possible class labels are 0-0"表示可能的类别标签只有0。\[1\]\[2\]\[3\]要解决这个问题,你需要检查你的数据集和配置文件,确保标签类别数与配置文件中设置的类别数一致。你可以检查数据集的标签文件和配置文件中的类别数是否匹配,以及是否有重复的类别标签。另外,还要确保你的数据集中的标签类别数不超过配置文件中设置的类别数。如果有需要,你可以修改配置文件中的类别数,使其与你的数据集相匹配。 #### 引用[.reference_title] - *1* *3* [训练yolov5的那些事之解决:AssertionError: Label class x exceeds nc=x in data/yolov5.yaml. Possible ...](https://blog.csdn.net/qq_43725659/article/details/127867867)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [YOLOv5报错AssertionError:Label class 1 exceeds nc=1 in yolo/dataset.ymal Possible class labels are 0...](https://blog.csdn.net/weixin_56524592/article/details/129178934)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凤酱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值