Перейти к содержанию

Обучение YOLOv5 на пользовательских данных

📚 В этом руководстве объясняется, как обучить свой собственный пользовательский набор данных с использованием модели YOLOv5 🚀. Обучение пользовательских моделей является фундаментальным шагом в адаптации решений компьютерного зрения к конкретным реальным приложениям, выходящим за рамки общей детекции объектов.

Прежде чем начать

Сначала убедитесь, что у вас настроена необходимая среда. Клонируйте репозиторий YOLOv5 и установите необходимые зависимости из requirements.txt. A Python>=3.8.0 среда с PyTorch>=1.8 имеет важное значение. Модели и наборы данных автоматически загружаются из последней версии YOLOv5 релиз если они не найдены локально.

git clone https://github.com/ultralytics/yolov5 # Clone the repository
cd yolov5
pip install -r requirements.txt # Install dependencies

Обучение на пользовательских данных

Диаграмма цикла активного обучения Ultralytics, показывающая сбор данных, маркировку, обучение, развертывание и сбор крайних случаев

Разработка пользовательской модели обнаружения объектов — это итеративный процесс:

  1. Сбор и систематизация изображений: Соберите изображения, относящиеся к вашей конкретной задаче. Высококачественные и разнообразные данные имеют решающее значение. См. наше руководство по сбору и аннотации данных.
  2. Пометьте объекты: Точно аннотируйте интересующие вас объекты на изображениях.
  3. Обучение модели: Используйте размеченные данные для обучения вашей модели YOLOv5. Воспользуйтесь трансферным обучением, начав с предварительно обученных весов.
  4. Развертывание и прогнозирование: Используйте обученную модель для вывода на новых, ранее не виденных данных.
  5. Сбор крайних случаев: Определите сценарии, в которых модель работает плохо (крайние случаи), и добавьте аналогичные данные в свой набор данных, чтобы повысить устойчивость. Повторите цикл.

Ultralytics HUB предлагает оптимизированное решение без кода для всего цикла операций машинного обучения (MLOps), включая управление набором данных, обучение модели и развертывание.

Лицензирование

Ultralytics предлагает два варианта лицензирования для различных сценариев использования:

  • Лицензия AGPL-3.0: Эта одобренная OSI лицензия с открытым исходным кодом идеально подходит для студентов, исследователей и энтузиастов, увлеченных открытым сотрудничеством и обменом знаниями. Она требует, чтобы производные работы распространялись на тех же условиях. Подробности см. в файле LICENSE.
  • Корпоративная лицензия: Эта лицензия, предназначенная для коммерческих приложений, позволяет беспрепятственно интегрировать программное обеспечение Ultralytics и модели искусственного интеллекта в коммерческие продукты и сервисы без требований AGPL-3.0 по открытому исходному коду. Если вашему проекту требуется коммерческое развертывание, запросите корпоративную лицензию.

Узнайте больше о наших вариантах лицензирования на странице Лицензирование Ultralytics.

Перед началом обучения важна подготовка набора данных.

1. Создайте набор данных

Моделям YOLOv5 требуются размеченные данные для изучения визуальных характеристик классов объектов. Правильная организация набора данных имеет ключевое значение.

1.1 Создайте dataset.yaml

Файл конфигурации набора данных (например, coco128.yaml) описывает структуру набора данных, имена классов и пути к каталогам изображений. COCO128 служит небольшим примером набора данных, включающим первые 128 изображений из обширного COCO набор данных. Это полезно для быстрой проверки конвейера обучения и диагностики потенциальных проблем, таких как переобучению.

Параметр dataset.yaml структура файла включает:

  • path: Корневой каталог, содержащий набор данных.
  • train, val, test: Относительные пути от path в каталоги, содержащие изображения или текстовые файлы, перечисляющие пути к изображениям для наборов данных обучения, проверки и тестирования.
  • names: Словарь, сопоставляющий индексы классов (начиная с 0) с соответствующими именами классов.

Ниже приведена структура для coco128.yaml (смотреть на GitHub):

# Dataset root directory relative to the yolov5 directory
path: coco128

# Train/val/test sets: specify directories, *.txt files, or lists
train: images/train2017 # 128 images for training
val: images/train2017 # 128 images for validation
test: # Optional path to test images

# Classes (example using 80 COCO classes)
names:
    0: person
    1: bicycle
    2: car
    # ... (remaining COCO classes)
    77: teddy bear
    78: hair drier
    79: toothbrush

1.2 Используйте модели для автоматической маркировки

Хотя ручная разметка с использованием инструментов является распространенным подходом, этот процесс может занять много времени. Последние достижения в фундаментальных моделях открывают возможности для автоматизации или полуавтоматизации процесса аннотирования, что может значительно ускорить создание набора данных. Вот несколько примеров моделей, которые могут помочь в создании меток:

  • Google Gemini: Большие мультимодальные модели, такие как Gemini, обладают мощными возможностями понимания изображений. Их можно запросить для идентификации и определения местоположения объектов на изображениях, генерируя ограничивающие рамки или описания, которые можно преобразовать в метки формата YOLO. Изучите его потенциал в предоставленном обучающем блокноте.
  • SAM2 (Segment Anything Model 2): Фундаментальные модели, ориентированные на сегментацию, такие как SAM2, могут идентифицировать и разграничивать объекты с высокой точностью. Хотя они в первую очередь предназначены для сегментации, полученные маски часто могут быть преобразованы в аннотации ограничивающих рамок, подходящие для задач обнаружения объектов.
  • YOLOWorld: Эта модель предлагает возможности обнаружения с открытым словарем. Вы можете предоставить текстовые описания интересующих вас объектов, и YOLOWorld сможет найти их на изображениях без предварительного обучения на этих конкретных классах. Это можно использовать в качестве отправной точки для создания начальных меток, которые затем можно уточнить.

Использование этих моделей может обеспечить этап «предварительной маркировки», уменьшая требуемые ручные усилия. Тем не менее, крайне важно проверять и уточнять автоматически сгенерированные метки, чтобы обеспечить точность и согласованность, поскольку качество напрямую влияет на производительность вашей обученной модели YOLOv5. После создания (и, возможно, уточнения) ваших меток убедитесь, что они соответствуют формат YOLO: один *.txt файл на изображение, где каждая строка представляет объект как class_index x_center y_center width height (нормализованные координаты, класс с нулевым индексом). Если на изображении нет интересующих объектов, соответствующий *.txt файл требуется.

Формат YOLO *.txt спецификации файла являются точными:

  • Одна строка на объект ограничивающая рамка.
  • Каждая строка должна содержать: class_index x_center y_center width height.
  • Координаты должны быть нормализованный к диапазону от 0 до 1. Чтобы добиться этого, разделите значения пикселей x_center и width на общую ширину изображения и разделите y_center и height на общую высоту изображения.
  • Индексы классов имеют нулевую индексацию (т.е. первый класс представлен 0, второй по 1, и так далее).

Пример изображения с двумя людьми и аннотированным галстуком

Файл меток, соответствующий изображению выше, содержащий два объекта 'person' (индекс класса 0) и один объект 'tie' (индекс класса 27), будет выглядеть следующим образом:

Пример содержимого файла меток в формате YOLO для аннотированного изображения

1.3 Организуйте каталоги

Структурируйте свои datasets каталог, как показано ниже. По умолчанию YOLOv5 ожидает, что каталог набора данных (например, /coco128) находиться в пределах /datasets расположенной папке рядом с в /yolov5 каталог репозитория.

YOLOv5 автоматически определяет местоположение меток для каждого изображения, заменяя последний экземпляр /images/ в пути к изображению с /labels/. Например:

../datasets/coco128/images/im0.jpg # Path to the image file
../datasets/coco128/labels/im0.txt # Path to the corresponding label file

Рекомендуемая структура каталогов:

/datasets/
└── coco128/  # Dataset root
    ├── images/
    │   ├── train2017/  # Training images
    │   │   ├── 000000000009.jpg
    │   │   └── ...
    │   └── val2017/    # Validation images (optional if using same set for train/val)
    │       └── ...
    └── labels/
        ├── train2017/  # Training labels
        │   ├── 000000000009.txt
        │   └── ...
        └── val2017/    # Validation labels (optional if using same set for train/val)
            └── ...

Диаграмма, показывающая рекомендуемую структуру каталогов набора данных YOLOv5

2. Выберите модель

Выберите предварительно обученную модель, чтобы начать процесс обучения. Начиная с предварительно обученных весов значительно ускоряет обучение и улучшает производительность по сравнению с обучением с нуля. YOLOv5 предлагает различные размеры моделей, каждая из которых по-разному балансирует скорость и точность. Например, YOLOv5s — вторая по величине и самая быстрая модель, подходящая для сред с ограниченными ресурсами. См. таблицу README для подробного сравнения всех доступных моделей.

Сравнительная таблица моделей YOLOv5, показывающая размер, скорость и точность

3. Обучение

Начните обучение модели использование train.py скрипт. Основные аргументы включают:

  • --img: Определяет входные данные размер изображения (например, --img 640). Большие размеры обычно обеспечивают лучшую точность, но требуют больше памяти GPU.
  • --batch: Определяет размер пакета (например, --batch 16). Выберите самый большой размер, который может обработать ваша GPU.
  • --epochs: Указывает общее количество тренировочных эпох (например, --epochs 100). Одна эпоха представляет собой полный проход по всему обучающему набору данных.
  • --data: Путь к вашему dataset.yaml файл (например, --data coco128.yaml).
  • --weights: Путь к файлу начальных весов. Использование предварительно обученных весов (например, --weights yolov5s.pt) настоятельно рекомендуется для более быстрой сходимости и превосходных результатов. Чтобы обучать с нуля (не рекомендуется, если у вас нет очень большого набора данных и особых потребностей), используйте --weights '' --cfg yolov5s.yaml.

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

# Example: Train YOLOv5s on the COCO128 dataset for 3 epochs
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt

Оптимизация скорости обучения

💡 Используйте --cache ram или --cache disk для кэширования изображений набора данных в ОЗУ или локальном диске, соответственно. Это значительно ускоряет обучение, особенно когда операции ввода-вывода данных являются узким местом. Обратите внимание, что это требует значительного объема оперативной памяти или дискового пространства.

Локальное хранилище данных

💡 Всегда выполняйте обучение, используя наборы данных, хранящиеся локально. Доступ к данным с сетевых дисков (например, Google Drive) или удаленного хранилища может быть значительно медленнее и ухудшить производительность обучения. Копирование набора данных на локальный SSD-диск часто является лучшим решением.

Все выходные данные обучения, включая веса и журналы, сохраняются в runs/train/ директории. Каждая тренировочная сессия создает новую поддиректорию (например, runs/train/exp, runs/train/exp2, и т.д.). Для интерактивного практического опыта изучите раздел обучения в наших официальных обучающих блокнотах: Открыть в Colab Открыть в Kaggle

4. Визуализация

YOLOv5 легко интегрируется с различными инструментами для визуализации прогресса обучения, оценки результатов и мониторинга производительности в реальном времени.

Comet: ведение журналов и визуализация 🌟 НОВОЕ

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

Начать работу довольно просто:

pip install comet_ml                                                          # 1. Install Comet library
export COMET_API_KEY=YOUR_API_KEY_HERE                                        # 2. Set your Comet API key (create a free account at Comet.ml)
python train.py --img 640 --epochs 3 --data coco128.yaml --weights yolov5s.pt # 3. Train your model - Comet automatically logs everything!

Узнайте больше о поддерживаемых функциях в нашем Руководство по интеграции Comet. Узнайте больше о возможностях Comet из их официальной документацию. Попробуйте Comet Colab Notebook для живой демонстрации: Открыть в Colab

Пользовательский интерфейс Comet, демонстрирующий метрики и визуализации обучения YOLOv5

ClearML: ведение журналов и автоматизация 🌟 НОВОЕ

Интеграция с ClearML обеспечивает детальное отслеживание экспериментов, управление версиями наборов данных и даже удаленное выполнение учебных прогонов. Активируйте ClearML, выполнив следующие простые шаги:

  • Установите пакет: pip install clearml
  • Инициализация ClearML: Запуск clearml-init один раз для подключения к вашему серверу ClearML (самостоятельно размещенному или бесплатный уровень).

ClearML автоматически фиксирует детали эксперимента, загрузку моделей, сравнения, незафиксированные изменения кода и установленные пакеты, обеспечивая полную воспроизводимость. Вы можете легко планировать задачи обучения на удаленных агентах и управлять версиями наборов данных с помощью ClearML Data. Изучите Руководство по интеграции ClearML для получения подробной информации.

Пользовательский интерфейс управления экспериментами ClearML, показывающий графики и журналы для запуска обучения YOLOv5

Локальное ведение журналов

Результаты обучения автоматически регистрируются с помощью TensorBoard и сохраняются как CSV файлы в пределах определенного каталога эксперимента (например, runs/train/exp). Регистрируемые данные включают:

  • Потери при обучении и валидации, а также метрики производительности.
  • Примеры изображений, демонстрирующие примененные аугментации (например, мозаики).
  • Истинные метки (ground truth) наряду с предсказаниями модели для визуальной инспекции.
  • Ключевые метрики оценки, такие как кривые Precision-Recall (PR).
  • Матрицы неточностей для детального анализа производительности по классам.

Пример результатов локального логирования, включая графики и мозаики изображений из обучения YOLOv5

Параметр results.csv файл обновляется после каждой эпохи и отображается как results.png после завершения обучения. Вы также можете построить любой results.csv файл вручную, используя предоставленную служебную функцию:

from utils.plots import plot_results

# Plot results from a specific training run directory
plot_results("runs/train/exp/results.csv")  # This will generate 'results.png' in the same directory

Пример графика results.png, показывающего метрики обучения, такие как mAP, точность, полнота и потери по эпохам

5. Следующие шаги

После успешного завершения обучения, лучшая контрольная точка модели (best.pt) сохранен и готов к развертыванию или дальнейшей доработке. Возможные следующие шаги включают:

Поддерживаемые среды

Ultralytics предоставляет готовые к использованию среды, оснащенные необходимыми зависимостями, такими как CUDA, cuDNN, Python и PyTorch, что облегчает плавный запуск.

Статус проекта

Значок статуса непрерывной интеграции YOLOv5

Этот значок указывает на то, что все тесты YOLOv5 GitHub Actions непрерывной интеграции (CI) успешно пройдены. Эти строгие тесты CI охватывают основные функциональные возможности, включая обучение, валидацию, вывод, экспорт и бенчмарки, в операционных системах macOS, Windows и Ubuntu. Тесты выполняются автоматически каждые 24 часа и при каждой фиксации кода, обеспечивая стабильность и оптимальную производительность.

Часто задаваемые вопросы

Часто задаваемые вопросы

Как обучить YOLOv5 на моем пользовательском наборе данных?

Обучение YOLOv5 на пользовательском наборе данных включает в себя несколько ключевых этапов:

  1. Подготовьте свой набор данных: Соберите изображения и аннотируйте их. Убедитесь, что аннотации находятся в необходимом формат YOLO. Организуйте изображения и метки в train/ и val/ (и, при необходимости, test/) каталоги. Рассмотрите возможность использования таких моделей, как Google Gemini, SAM2, или YOLOWorld для помощи или автоматизации процесса маркировки (см. Раздел 1.2).
  2. Настройте свою среду: Клонируйте репозиторий YOLOv5 и установите зависимости, используя pip install -r requirements.txt.
    git clone https://github.com/ultralytics/yolov5
    cd yolov5
    pip install -r requirements.txt
    
  3. Создайте конфигурацию набора данных: Определите пути к набору данных, количество классов и имена классов в dataset.yaml файле.
  4. Начать обучение: Выполните метод train.py скрипт, предоставляя пути к вашим dataset.yaml, желаемые предварительно обученные веса (например, yolov5s.pt), размер изображения, размер пакета и количество эпох.
    python train.py --img 640 --batch 16 --epochs 100 --data path/to/your/dataset.yaml --weights yolov5s.pt
    

Почему я должен использовать Ultralytics HUB для обучения моих моделей YOLO?

Ultralytics HUB — это комплексная платформа, предназначенная для оптимизации всего жизненного цикла разработки моделей YOLO, часто без необходимости написания какого-либо кода. Ключевые преимущества включают в себя:

  • Упрощенное обучение: Легко обучайте модели, используя предварительно настроенные среды и интуитивно понятный пользовательский интерфейс.
  • Интегрированное управление данными: Загружайте, контролируйте версии и эффективно управляйте своими наборами данных в рамках платформы.
  • Мониторинг в реальном времени: Отслеживайте прогресс обучения и визуализируйте метрики производительности с помощью интегрированных инструментов, таких как Comet или TensorBoard.
  • Функции для совместной работы: Облегчает командную работу благодаря общим ресурсам, инструментам управления проектами и простому обмену моделями.
  • Развертывание без кода: Развертывайте обученные модели непосредственно на различные цели.

Практическое руководство можно найти в нашей статье в блоге: Как обучить собственные модели с помощью Ultralytics HUB.

Как преобразовать мои аннотированные данные в формат YOLOv5?

Независимо от того, аннотируете ли вы вручную или используете автоматизированные инструменты (например, те, которые упомянуты в разделе 1.2), окончательные метки должны быть в определенном формате YOLO, требуемом YOLOv5:

  • Создайте его .txt файл для каждого изображения. Имя файла должно совпадать с именем файла изображения (например, image1.jpg соответствует image1.txt). Поместите эти файлы в labels/ каталог параллельно вашему images/ каталога (например, ../datasets/mydataset/labels/train/).
  • Каждая строка в пределах .txt файл представляет одну аннотацию объекта и имеет следующий формат: class_index center_x center_y width height.
  • Координаты (center_x, center_y, width, height) должно быть нормализованный (значения от 0.0 до 1.0) относительно размеров изображения.
  • Индексы классов — это с нуля (первый класс — это 0, второй – это 1, и т.д.).

Многие инструменты ручной аннотации предлагают прямой экспорт в формат YOLO. При использовании автоматизированных моделей вам потребуются скрипты или процессы для преобразования их выходных данных (например, координат ограничивающих рамок, масок сегментации) в этот конкретный нормализованный текстовый формат. Убедитесь, что структура вашего итогового набора данных соответствует примеру, приведенному в руководстве. Для получения более подробной информации см. наше Руководство по сбору и аннотации данных.

Какие существуют варианты лицензирования для использования YOLOv5 в коммерческих приложениях?

Ultralytics предоставляет гибкое лицензирование, адаптированное к различным потребностям:

  • Лицензия AGPL-3.0: Эта лицензия с открытым исходным кодом подходит для академических исследований, личных проектов и ситуаций, когда приемлемо соблюдение требований open-source. Она требует, чтобы модификации и производные работы также распространялись под лицензией AGPL-3.0. Ознакомьтесь с подробностями лицензии AGPL-3.0.
  • Корпоративная лицензия: Коммерческая лицензия, предназначенная для предприятий, интегрирующих YOLOv5 в проприетарные продукты или сервисы. Эта лицензия снимает обязательства AGPL-3.0 по открытому исходному коду, позволяя распространять продукты с закрытым исходным кодом. Посетите нашу страницу лицензирования для получения более подробной информации или запроса корпоративной лицензии.

Выберите лицензию, которая наилучшим образом соответствует требованиям вашего проекта и модели распространения.



📅 Создано 1 год назад ✏️ Обновлено 2 месяца назад

Комментарии