python Assert错误:在data/coco128.yaml中,标签类15超过nc=1,可能的类标签是0-0

kognpnkq  于 2023-06-28  发布在  Python
关注(0)|答案(5)|浏览(574)

在过去的几天里,我一直在构建yolov5环境并尝试运行它。我使用下面的代码来测试我的设置是否成功。

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

然后它给了我以下错误,我试图在谷歌上找到答案,但我没有看到任何有用的东西。我现在很伤心有人能给予我一把吗?我真的很感激。

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

我真的不使用这个网站。原谅我

5lhxktic

5lhxktic1#

我在使用YoloV5模型训练数据集时遇到了同样的问题。我发现了这个问题,在我的classes.txt(在数据目录内)文件中包含2个类,而我在dataset.yaml中声明了1个类。我也改变了colab的运行时间为GPU。

eblbsuwk

eblbsuwk2#

我得到了“腐败的形象”..“可能的类标签是”..直到我破坏了标签缓存
这是YOLOv8.0.123。
我已经从0..3级到0..6级,并将图像增加了两倍(如果这很重要的话)。

yks3o0rb

yks3o0rb3#

我也发现了这个错误。
在为注解创建的.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的类,而我没有。

62o28rlo

62o28rlo4#

该错误是由于您有一个或多个带有数字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的值。

0yycz8jy

0yycz8jy5#

我也遇到了这个问题,并尝试了一些解决方案,并解决了如下:
实际上,数据集由11个类组成。当我检查包含图像标签的. xml文件时,我看到标签:11。所以:
1.设置nc:12,
1.将''值添加到标签数组。['','apple','banana',etc.]
不要忘记删除标签chache**! rm-f data/train/labels. npy**

相关问题