Ultralytics Yolov8 не обучается обнаружению объектов
Я пытаюсь научить Yolov8 обнаруживать черные точки на коже человека. Пример скина и разметки показан ниже. Я обрезал изображения до размера 256x256 пикселей, выбрал те кадры, у которых есть хотя бы одна метка, и получил наборы данных поезда, тестирования и проверки (4000, 2000 и 2000 изображений соответственно). Модель сегментации отsegmentation_models_pytorch
прогнозирует черные точки с IoU=0,15. Это нормально, учитывая, что разметка имеет прямоугольную форму (хотя после увеличения изображения лучше всего предположить круг) и что объект не имеет четкой границы (в отличие от автомобиля или стула).
Я пробовал тренировать Yolov8 с помощью команды
yolo обнаружить данные поезда = D:\workspace\ultralytics\my_coco.yaml model=yolov8n.yaml epochs=100 imgsz=256 Workers=2 close_mosaic=100 project='bd' Flipud=0.5 мозаика=0.0 Отчеты о каждой эпохе
Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size
19/100 1.44G nan nan nan 372 256: 100%|██████████| 267/267 [00:44<00:00, 5.96it/s]
Class Images Instances Box(P R mAP50 mAP50-95): 100%|██████████| 44/44 [00:06<00:00, 7.06it/s]
all 1391 26278 0 0 0 0
Полный вывод можно найти здесь
Другая команда дает лучшие результаты yolo обнаружить данные поезда = D:\workspace\ultralytics\my_coco.yaml model=yolov8n.pt epochs=100 imgsz=256 Workers=2 close_mosaic=0 project='bd' Flipud=0.5 мозаика=0.5
Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size
1/100 1.56G nan nan nan 389 256: 100%|██████████| 267/267 [00:44<00:00, 5.96it/s]
Class Images Instances Box(P R mAP50 mAP50-95): 100%|██████████| 44/44 [00:05<00:00, 8.08it/s]
all 1391 26278 0.0118 0.00202 0.00747 0.00278
....
Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size
4/100 1.54G nan nan nan 165 256: 100%|██████████| 267/267 [00:43<00:00, 6.12it/s]
Class Images Instances Box(P R mAP50 mAP50-95): 100%|██████████| 44/44 [00:05<00:00, 7.65it/s]
all 1391 26278 0.0118 0.00202 0.00747 0.00278
Я все еще получаю нан для обучения после эпохи и некоторые значения в течение эпохи. Например: 6/100 1,05G 3,279 2,164 0,937 565 256: 47%|████▋ | 126/267 [00:20<00:22, 6.22it/s] Также обратите внимание, что проверка застревает на значениях из первой эпохи.
1 ответ
The nan
Проблема и недостаток обучения были вызваны проблемами с окружающей средой. Я узнал, что вам нужно создать новую среду и запускать толькоpip install ultralytics
. Во время первой тренировки это проявляетсяrunning on CPU
. У вас может возникнуть соблазн установить pytorch cuda от nvidia. Не делай это. Вместо этого перезагрузите компьютер и повторите обучение. Это покажетrunning on GPU
(при условии, что у вас есть видеокарта Nvidia и установлен набор инструментов Nvidia).
Следующий. Вы должны использоватьif __name__ == "__main__":
как показано ниже.
from ultralytics import YOLO
if __name__ == "__main__": # this is crucial
model = YOLO('yolov8n.pt')
model.train(data='my.yaml', epochs=1000, imgsz=256, workers=1)
В противном случае вы начнете вилочную бомбу.
Следующий. Начните с предварительно обученной модели и попробуйте ееcoco8.yaml
. Точность прогноза будет неуклонно падать во время обучения. Это нормально: coco8 — очень маленький набор данных, поэтому вы катастрофически забываете CNN.
Затем скачайте Pascal VOC 2007. Разберите его. Ultralytics использует json, а Pascal VOC использует xml (и они используют разные обозначения для полей координат). Обучите свою предварительно обученную модель обнаруживать только людей. Опять же, произойдет первоначальное падение производительности. Но примерно через 20 эпох вы получаете устойчивое улучшение (которое не совсем достигает показателей исходной модели, но близко к этому. Теперь вы можете настроить параметры в default.yaml).
Как только вы будете готовы к обучению yolov8 на своем наборе данных.
PS было еще десять сбоев (некоторые из них заняли у Google час), но я не уверен, сколько из них было вызвано конфликтом пакетов pytorch.