AssertionError: класс метки 15 превышает nc = 1 в data / coco128.yaml. Возможные метки класса 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
Я действительно не пользуюсь этим сайтом. Прости меня.
5 ответов
Я тоже нашел эту точную ошибку.
В ваших файлах .txt, которые вы создали для аннотаций, будет целое число, за которым следуют четыре числа с плавающей запятой (например, 13 0,3434 0,251 0,4364 0,34353) — что-то вроде этого.
Эта ошибка, по сути, указывает на то, что количество ваших классов (т. е. количество различных объектов, которые вы пытаетесь обучить в модели) слишком мало для идентификатора классов, которые вы используете. В моем примере выше идентификатор равен 13 (включен 14-й класс, начиная с 0). Если я установлю nc=1, то я могу иметь только класс (0). Мне нужно было бы установить nc=14 и убедиться, что существует 0-12.
Чтобы это исправить, просто измените классы так, чтобы идентификаторы находились внутри выбранного вами количества классов. Для nc=1 вам понадобится только class/ID = 0.
В качестве примечания (и я с этим столкнулся), удалите train.cache перед повторным запуском обучения. Это вызвало у меня некоторую неприятность, поскольку я все еще был уверен, что у меня есть классы>0, хотя у меня их не было.
Спасибо, Джейми.
Я получал «поврежденное изображение»... «Возможные метки классов».., пока я не уничтожил labels.cache.
Это было с YOLOv8.0.123.
Я перешел от классов 0..3 к 0..6 и утроил количество изображений на этом этапе (если это имело значение).
Я также столкнулся с этой проблемой и попробовал несколько решений и решил, как показано ниже:
На самом деле набор данных состоит из 11 классов. И когда я проверяю файлы .xml, которые включают метку изображения, я вижу метку:11. Так :
- установить нк:12,
- добавить значение '' в массив меток. ['','яблоко','банан' и т. д.]
Не забудьте удалить метку !rm -f data/train/labels.npy
У меня возникла та же проблема при обучении моего набора данных с использованием модели YoloV5. Я выяснил проблему: в моем файле groups.txt (внутри каталога данных) содержится 2 класса, и я объявляю 1 класс в своем dataset.yaml. Также я меняю время выполнения Colab на GPU.
Ошибка вызвана тем, что у вас есть одна или несколько меток с номером 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 значением или значениями (вы можете перебирать список возможных значений) класса или классов, которые превышают количество классов, которые вы указали. до.