AssertionError:data / coco128.yaml中的标签类别15超过了nc = 1可能的类别标签为0-0

问题描述

首先,我的英语不是很好。因此,以下问题已由Google翻译和转发。我真的很抱歉。

事实上,我一直在构建yolov5环境,并试图在最近几天中运行它。我使用以下代码测试我的设置是否成功。

python train.py --img 640 --data data/coco128.yaml --cfg models/yolov5s.yaml --weights weights/yolov5s.pt --batch-size 16 --epochs 100

然后它给了我以下错误,我尝试在Google上找到答案,但没有发现任何有用的信息。我现在很沮丧有人可以帮我吗?我真的很感激。

Transferred 362/370 items from weights/yolov5s.pt
Optimizer groups: 62 .bias,70 conv.weight,59 other
Scanning labels data\coco128\labels\train2017.cache (32 found,0 missing,0 empty,0 duplicate,for 32 images): 32it [00:00,3270.57it/s]
Traceback (most recent call last):
  File "train.py",line 456,in <module>
    train(hyp,opt,device,tb_writer)
  File "train.py",line 172,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)
AssertionError: Label class 15 exceeds nc=1 in data/coco128.yaml. Possible class labels are 0-0

我真的不使用此网站。原谅我。

attached image

解决方法

我也发现了这个确切的错误。

在您为注释创建的 .txt 文件中,将有一个整数,后跟四个浮点数(即 13 0.3434 0.251 0.4364 0.34353) - 类似的东西。

此错误基本上表明您的类数量(即您尝试训练到模型中的不同对象的数量)对于您使用的类的 ID 号来说太少了。在我上面的示例中,ID 为 13(包含 0 以来的第 14 个类)。如果我设置 nc=1,那么我只能在类 (0) 上使用。我需要设置 nc=14 并确保 0-12 存在。

要解决此问题,只需更改类,使 ID 位于您选择的类数中。对于 nc=1,您只需要 class/ID = 0。

注意(我犯了这个错误),在重新运行训练之前删除 train.cache。这给我带来了一些麻烦,因为我仍然可以确定我有 >0 的类,而我没有。

谢谢, 杰米

,

该错误是由以下事实引起的:您拥有一个或多个数字为15的标签。您必须将类更改为允许的类值(在您的情况下看起来只有0),您可以手动执行或使用脚本执行。我在数据集中手动更改了类的值,为查找包含不允许的类的文件,我运行了一个python脚本,该脚本已针对您的情况进行了调整:

path = 'C:/foo/bar' #path of labels
labels = os.listdir('path')
for x in labels:
    with open('path'+x) as f:
    lines = f.read().splitlines()
    for y in lines:
        if y[:1]!='0':
            print(x)

此代码段将打印所有包含与0不同的类的文件。

对于发现此问题并具有多个类的任何人,您必须用大于或等于一个的一个或多个类的一个或多个值(可以在可能的值列表中进行迭代)替换0的值。您之前讲过的课程。