AssertionError: Label class 1 exceeds nc=1 in data/Person.yaml

问题:运行yolov5程序时,报错信息如下:

AssertionError: Label class 1 exceeds nc=1 in data/Person.yaml

报错原因:

通过借鉴各位大佬的经验,发现是标签文件中的标签定义错误,当初打标签的时候,输错了类别名称,索引值变成了1。

解决:

将标签文件中的类别全改为0.

批量修改代码如下:(适用于只有一个类别)

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") #写完一行之后需要换行

参考:yolov5运行时显示AssertionError:Label class 1 exceeds nc = 1 in data/middle.yaml._assertionerror: data.yaml 'names:' field missing_凤酱的博客-CSDN博客

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值