Создай YAML-файл датасета
Создай data.yaml, который укажет Ultralytics пути к папкам и названия классов, добейся корректной работы путей из любой директории и проверь конфигурацию командой yolo val.
YAML-файл датасета — это связующее звено между папками и всеми командами Ultralytics. Ошибка в пути остановит запуск; ошибка в порядке классов не помешает работе, но все предсказания будут содержать неправильные названия, и система нигде об этом не предупредит.
В этом уроке ты создашь data.yaml для датасета с таблетками, узнаешь, как именно Ultralytics определяет пути, чтобы всё работало и на компьютере коллеги, и проверишь конфигурацию командой валидации в одну строку, которая также даст базовый результат, на который должно ориентироваться обучение.
Практические занятия
Создай файл#

У датасетов в 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.yamlval: 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Разберём вывод по порядку:
Scanning my_dataset/labels/val: папка, путь к которой фактически определила Ultralytics. Убедись, что это нужная папка.23 images, 0 backgrounds, 0 corrupt: у каждого валидационного изображения есть корректный файл меток. Если появились незапланированные фоновые изображения или количество повреждённых файлов отличается от нуля, вернись к прошлому уроку.399объектов: в файлах меток содержатся 399 таблеток.- 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; они перечислены в справочнике по конфигурации.
Показать решение
path: /home/you/projects/pills/my_dataset # absolute path to the dataset root
train: images/train
val: images/val
names:
0: pillval: 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: у предварительно обученной модели нет класса таблеток.