Ultralytics YOLO27: Встать в лист ожидания.
Get Started
Обучи первую модель YOLO·Данные·Урок 5/10
Урокначинающий

Создай YAML-файл датасета

Создай data.yaml, который укажет Ultralytics пути к папкам и названия классов, добейся корректной работы путей из любой директории и проверь конфигурацию командой yolo val.

YAML-файл датасета — это связующее звено между папками и всеми командами Ultralytics. Ошибка в пути остановит запуск; ошибка в порядке классов не помешает работе, но все предсказания будут содержать неправильные названия, и система нигде об этом не предупредит.

В этом уроке ты создашь data.yaml для датасета с таблетками, узнаешь, как именно Ultralytics определяет пути, чтобы всё работало и на компьютере коллеги, и проверишь конфигурацию командой валидации в одну строку, которая также даст базовый результат, на который должно ориентироваться обучение.

Результат

Ты научишься создавать data.yaml, который работает из любой рабочей директории, поддерживать согласованность индексов классов и читать строку сканирования yolo val, чтобы убедиться, что датасет подключён.

Ускоренное прохождение
Если ты уже освоился, вот краткая версия.
  1. Укажи корень датасета в path, а в train/val — относительные пути к папкам с изображениями.

  2. Перечисли names в формате индекс → имя, точно как в файлах меток.

  3. Запусти yolo val model=yolo26n.pt data=my_dataset/data.yaml и проверь строку сканирования.

  4. Перед тем как делиться файлом, укажи абсолютный путь в path; добавляй новые классы только в конец списка.

Практические занятия

Создай файл#

Страница профиля Ultralytics Platform со списком датасетов пользователя и кнопкой создания нового датасета

У датасетов в Ultralytics Platform свои классы и выборки, а для обучения указывается URI, например data=ul://username/datasets/name. На собственном компьютере эту роль выполняет YAML-файл. Сохрани его как my_dataset/data.yaml:

path: my_dataset # dataset root: absolute, or relative to where you run yolo
train: images/train # relative to path
val: images/val # relative to path
# test: images/test  # optional held-out split

names:
  0: pill
КлючОбязателенЗначение
pathНетКорневая папка датасета; train, val и test задаются относительно неё. Если параметр не указан, используется папка самого YAML-файла
train, valДаПапка с изображениями, файл .txt со списком путей к изображениям или список таких папок и файлов
testНетОтложенные тестовые изображения, оцениваемые только с помощью split=test
namesДаИндекс класса → имя; длина списка определяет количество классов
downloadНетURL или скрипт, загружающий датасет, если изображения отсутствуют

train и val указывают на папки с изображениями; метки находятся заменой images на labels. Минимальный рабочий пример — файл YAML для coco8, а более объёмный вариант показан в файле YAML для VOC.

Пример: проверяем запуск#

Валидация с предобученной моделью — самый быстрый способ проверить весь процесс от начала до конца. Она читает каждое изображение и метку, сообщает о проблемах и рассчитывает метрики:

yolo val model=yolo26n.pt data=my_dataset/data.yaml
val: Scanning my_dataset/labels/val... 23 images, 0 backgrounds, 0 corrupt: 100%
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95)
                   all         23        399     0.0256    0.00251      0.001     0.0002

Разберём вывод по порядку:

  1. Scanning my_dataset/labels/val: папка, путь к которой фактически определила Ultralytics. Убедись, что это нужная папка.
  2. 23 images, 0 backgrounds, 0 corrupt: у каждого валидационного изображения есть корректный файл меток. Если появились незапланированные фоновые изображения или количество повреждённых файлов отличается от нуля, вернись к прошлому уроку.
  3. 399 объектов: в файлах меток содержатся 399 таблеток.
  4. mAP50-95 равен 0.0002: это ожидаемый результат, а не ошибка. В COCO нет класса таблеток, поэтому предобученная модель не может их обнаружить. Почти нулевое значение и будет базовым результатом. Если же нужные классы есть в COCO — например, люди или автомобили, — та же команда даст содержательный базовый результат.

Настрой пути для работы из любой директории#

Большинство ошибок «изображения не найдены» связано с путями. Ultralytics определяет path следующим образом:

datasets_dir — это параметр Ultralytics; команда yolo settings выводит его значение, а в руководстве по настройкам показано, как его изменить. Встроенные датасеты используют этот запасной вариант: coco8.yaml задаёт path: coco8 и URL download:, поэтому data=coco8.yaml работает из любой папки.

Правила выбора:

  • Работаешь только ты и всегда из папки проекта? Относительный путь path подойдёт.
  • Коллеги, серверы, CI или ноутбуки в других папках? Используй абсолютный путь path.
  • Данные находятся в другом месте и должны загружаться автоматически? Добавь download: с URL ZIP-архива.

Считай индексы классов частью контракта#

Целое число в начале каждой строки аннотации — это индекс в names. Ultralytics проверяет диапазон — Label class 1 exceeds dataset class count 1, — но не может проверить смысл. Если инструмент разметки экспортировал 0: forklift, 1: person, а в YAML указано 0: person, 1: forklift, обучение завершится успешно, mAP при валидации будет выглядеть нормально, но каждое предсказание получит неправильное название. Используй единый список классов — источник истины, общий для инструмента разметки, скрипта преобразования, YAML и кода развёртывания.

Избегай этих ошибок#

Относительный путь от неправильной папки

Симптом: FileNotFoundError: Dataset 'data.yaml' images not found, missing path '.../datasets/my_dataset/images/val' с примечанием о папке загрузки датасета. Причина: ты запустил команду из другой папки, поэтому относительный путь path не существовал, и Ultralytics выполнил поиск в datasets_dir. Решение: запускай команду из папки проекта или укажи абсолютный путь в path.

Изменение порядка названий приводит к проблемам

Перестановка или удаление записей в names без переназначения меток незаметно меняет смысл каждой метки. Модель обучается и предсказывает неправильные классы, не выдавая ошибок. Добавляй новые классы в конец, используя следующий свободный индекс, и никогда не перенумеровывай существующие.

Списки объединяются в одну метрику

val: [images/val_day, images/val_night] объединяет обе папки в один набор для валидации и выводит одно число. Чтобы оценивать день и ночь отдельно — или курируемый регрессионный набор рядом со свежей выборкой с производства, — создай отдельный YAML для каждого набора и проверь их по отдельности. Случай, когда разбиение test оценивается только один раз с помощью split=test, рассматривается в разделе Правильно раздели датасет.

Параметры обучения, такие как аугментация и кэширование, передаются в train, а не задаются в YAML; они перечислены в справочнике по конфигурации.

Попробовать

Создай my_dataset/data.yaml и запусти yolo val model=yolo26n.pt data=my_dataset/data.yaml. Запиши количество изображений, фоновых изображений, повреждённых файлов и объектов, а также базовый mAP50-95. Затем скопируй cd в другую папку, запусти команду заново с путём из YAML, прочитай сообщение об ошибке и исправь YAML так, чтобы команда работала из любой папки. Передай исправленный YAML и обе строки со сводкой сканирования.

Критерии готовности
Урок считается завершённым, если выполнены все условия ниже.
  • yolo val сообщает, что в YAML указано 23 изображения, 0 фоновых изображений и 0 повреждённых файлов.

  • Ты записал базовый mAP50-95 предварительно обученной модели на этом датасете.

  • Твой YAML работает из любой рабочей папки, потому что path — абсолютный путь.

Показать решение
path: /home/you/projects/pills/my_dataset # absolute path to the dataset root
train: images/train
val: images/val

names:
  0: pill
val: Scanning /home/you/projects/pills/my_dataset/labels/val... 23 images, 0 backgrounds, 0 corrupt
                   all         23        399     0.0256    0.00251      0.001     0.0002

Из другой папки относительный вариант завершился ошибкой Dataset ... images not found: там не существовало my_dataset, а в запасном расположении datasets_dir тоже не было копии. Абсолютный путь path устраняет эту проблему поиска. Базовый mAP50-95 составляет примерно 0: у предварительно обученной модели нет класса таблеток.

Что дальше

Данные подключены, базовый результат записан. Теперь обучи на них YOLO26.

Войди, чтобы сохранять прогресс