Ultralytics YOLO27:

Лучшие практики и советы по машинному обучению и обучению моделей#

Введение#

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

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



Watch: Model Training Tips | How to Handle Large Datasets | Batch Size, GPU Utilization and Mixed Precision

Как обучить модель машинного обучения#

Модель компьютерного зрения обучается путем настройки внутренних параметров для минимизации ошибок. Сначала модели передается большой набор размеченных изображений. Она делает прогнозы о содержимом этих изображений, после чего прогнозы сравниваются с фактическими метками или содержимым для вычисления ошибок. Эти ошибки показывают, насколько прогнозы модели отличаются от истинных значений.

Во время обучения модель итеративно делает прогнозы, вычисляет ошибки и обновляет параметры с помощью процесса, называемого обратным распространением ошибки. В ходе этого процесса модель настраивает внутренние параметры (веса и смещения), чтобы уменьшить ошибки. Многократное повторение этого цикла постепенно повышает точность модели. Со временем она учится распознавать сложные закономерности, например формы, цвета и текстуры.

What is Backpropagation?

Этот процесс обучения позволяет модели компьютерного зрения выполнять различные задачи, включая обнаружение объектов, сегментацию экземпляров, семантическую сегментацию и классификацию изображений. Главная цель — создать модель, способную обобщать полученные знания на новые, ранее не виденные изображения и точно интерпретировать визуальные данные в реальных приложениях.

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

Обучение на больших наборах данных#

При планировании обучения модели на большом наборе данных нужно учитывать несколько аспектов. Например, можно настроить размер пакета, контролировать загрузку GPU, выбрать многоуровневое обучение и многое другое. Давай подробно рассмотрим каждый из этих вариантов.

Размер пакета и загрузка GPU#

При обучении моделей на больших наборах данных важно эффективно использовать GPU. Размер пакета — один из ключевых факторов. Это количество образцов данных, которые модель машинного обучения обрабатывает за одну итерацию обучения. Используя максимальный размер пакета, поддерживаемый твоим GPU, ты можешь полностью задействовать его возможности и сократить время обучения модели. Однако важно не допустить переполнения памяти GPU. При возникновении ошибок памяти постепенно уменьшай размер пакета, пока обучение модели не станет стабильным.



Watch: How to Use Batch Inference with Ultralytics YOLO26 | Speed Up Object Detection in Python 🎉

Для YOLO26 можно задать параметр batch в аргументах режима Train в соответствии с объемом памяти GPU. На одном ускорителе batch=-1 профилирует модель и выбирает размер пакета, ориентируясь примерно на 60% использования памяти; дробное значение, например batch=0.70, задает другую долю. При использовании нескольких GPU необходимо явно указать глобальный размер пакета, кратный количеству устройств. На CPU и Apple silicon AutoBatch выводит предупреждение и переключается на batch=16.

Обучение на подмножестве данных#

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

Для YOLO26 обучение на подмножестве легко реализовать с помощью параметра fraction. Используй такое соотношение, как fraction=0.1, чтобы выбрать 10% обучающих данных, целое число, например fraction=300, чтобы выбрать ровно 300 обучающих изображений, или список [train, val, test], например fraction=[300, 100, 0], чтобы ограничить каждый раздел и пропустить тестовые изображения. Списки из двух элементов, например [300, 100], оставляют тестовый раздел полностью доступным. Наборы данных NDJSON выбирают равномерно расположенные записи до их загрузки, поэтому при повторных запусках используется точно то же подмножество. Этот метод поддерживает быстрые итерации и настройку перед переходом к полному набору данных.

Многоуровневое обучение#

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

Например, при обучении YOLO26 можно включить масштабную аугментацию, задав параметр scale. Этот параметр изменяет размер обучающих изображений на указанный коэффициент, имитируя объекты на разных расстояниях. Например, значение scale=0.5 случайным образом масштабирует обучающие изображения с коэффициентом от 0.5 до 1.5 во время обучения. Настройка этого параметра позволяет модели работать с различными масштабами изображений и улучшать обнаружение объектов разных размеров в разных сценариях.

Ultralytics также поддерживает многоуровневое обучение с изменением размера изображения через параметр multi_scale. В отличие от scale, который масштабирует изображения, а затем дополняет их или обрезает до imgsz, параметр multi_scale изменяет сам imgsz в каждом пакете с округлением до шага модели. Например, при значениях imgsz=640 и multi_scale=0.25 размер обучения выбирается от 480 до 800 с шагом модели (например, 480, 512, 544, ..., 800), а multi_scale=0.0 сохраняет фиксированный размер.

Кэширование#

Кэширование — важный метод повышения эффективности обучения моделей машинного обучения. Сохраняя предварительно обработанные изображения в памяти, кэширование сокращает время ожидания GPU загрузки данных с диска. Модель может непрерывно получать данные без задержек, вызванных операциями ввода-вывода диска.

При обучении YOLO26 кэшированием можно управлять с помощью параметра cache:

  • cache=True: сохраняет изображения набора данных в RAM, обеспечивая максимальную скорость доступа, но увеличивая потребление памяти.
  • cache='disk': сохраняет изображения на диске; это медленнее, чем RAM, но быстрее, чем повторная загрузка новых данных при каждой итерации.
  • cache=False: отключает кэширование, полностью полагаясь на ввод-вывод диска, что является самым медленным вариантом.

Обучение со смешанной точностью#

При обучении со смешанной точностью используются числа с плавающей точкой разрядностью 16 бит (FP16) и 32 бита (FP32). Преимущества обоих форматов используются следующим образом: FP16 обеспечивает более быстрые вычисления, а FP32 сохраняет точность там, где это необходимо. Большинство операций нейронной сети выполняется в FP16 для ускорения вычислений и снижения потребления памяти. Однако эталонная копия весов модели хранится в FP32, чтобы обеспечить точность при обновлении весов. Это позволяет работать с более крупными моделями или размерами пакетов в рамках тех же аппаратных ограничений.

Mixed precision FP16 training benefits

Чтобы реализовать обучение со смешанной точностью, нужно изменить скрипты обучения и убедиться, что оборудование, например GPU, поддерживает эту возможность. Многие современные фреймворки глубокого обучения, такие как PyTorch и TensorFlow, имеют встроенную поддержку смешанной точности.

Обучение со смешанной точностью при работе с YOLO26 не требует сложной настройки: AMP уже включен по умолчанию (amp=True). На GPU с CUDA YOLO однократно проверяет возможности устройства в начале обучения и при неудаче переключается на полный FP32; на CPU и Apple silicon AMP полностью пропускается. Задай amp=False, чтобы принудительно использовать FP32.

Предварительно обученные веса#

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

Предварительно обученные веса передаются через аргумент model, поэтому model=yolo26n.pt уже запускается с весами COCO. Параметр pretrained определяет, сохранять ли эти веса (True, значение по умолчанию), удалять их (False) или заменять другой контрольной точкой (pretrained=path/to/best.pt). Установка pretrained=True для модели *.yaml сама по себе не загружает веса. Полный процесс трансферного обучения описан в руководстве Как дообучить YOLO на пользовательском наборе данных.

Другие методы, которые стоит учитывать при работе с большим набором данных#

При работе с большим набором данных стоит рассмотреть еще несколько методов:

  • Планировщики скорости обучения: планировщики скорости обучения динамически изменяют скорость обучения в процессе обучения. Хорошо настроенная скорость обучения предотвращает перескакивание моделью минимума и повышает стабильность. При обучении YOLO26 параметр lrf управляет планированием скорости обучения, задавая конечную скорость как долю начальной. Для поведения, которое не поддерживается аргументами, например послойных скоростей обучения или обрезки градиентов, создай подкласс тренера.
  • Распределенное обучение: при работе с большими наборами данных распределенное обучение может значительно изменить ситуацию. Распределение нагрузки между несколькими GPU или машинами позволяет сократить время обучения. Такой подход особенно ценен для проектов корпоративного масштаба с существенными вычислительными ресурсами.
  • Формат памяти с размещением каналов в конце (channels-last): обучение на CUDA автоматически использует более быстрый макет памяти NHWC в PyTorch 1.11 и новее, за исключением Windows, где он показал себя медленнее. Установи channels_last=True, чтобы принудительно включить его, или channels_last=False, чтобы сохранить NCHW; в PyTorch 1.10 и старее, а также на CPU и MPS по умолчанию остается NCHW.

Количество эпох обучения#

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

Часто возникает вопрос, как определить количество эпох обучения модели. Хорошая отправная точка — 300 эпох. Если модель рано переобучается, количество эпох можно уменьшить. Если переобучение не происходит после 300 эпох, обучение можно продлить до 600, 1200 или большего количества эпох.

Однако идеальное количество эпох может зависеть от размера набора данных и целей проекта. Для эффективного обучения на больших наборах данных может потребоваться больше эпох, а для небольших наборов — меньше, чтобы избежать переобучения. Для YOLO26 можно задать параметр epochs в скрипте обучения.

Досрочная остановка#

Досрочная остановка — ценный метод оптимизации обучения модели. Отслеживая качество на валидационной выборке, можно остановить обучение, когда модель перестает улучшаться. Это позволяет экономить вычислительные ресурсы и предотвращать переобучение.

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

Early stopping to prevent model overfitting

Для YOLO26 досрочную остановку можно включить, задав параметр patience в конфигурации обучения. Например, patience=5 означает, что обучение остановится при отсутствии улучшения валидационных метрик в течение 5 последовательных эпох. Этот метод обеспечивает эффективный процесс обучения и оптимальное качество без чрезмерных вычислений.

Выбор между облачным и локальным обучением#

Для обучения модели есть два варианта: облачное и локальное обучение.

Облачное обучение обеспечивает масштабируемость и мощное оборудование, поэтому идеально подходит для больших наборов данных и сложных моделей. Такие платформы, как Google Cloud, AWS и Azure, предоставляют доступ к высокопроизводительным GPU и TPU по требованию, ускоряя обучение и позволяя экспериментировать с более крупными моделями. Однако облачное обучение может быть дорогим, особенно при длительном использовании, а передача данных увеличивает расходы и задержки.

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

Выбор оптимизатора#

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

Для повышения качества модели можно также настроить параметры оптимизатора. Изменение скорости обучения задает размер шага при обновлении параметров. Для стабильности можно начать с умеренной скорости обучения и постепенно уменьшать ее со временем, улучшая долгосрочное обучение. Кроме того, параметр momentum определяет влияние предыдущих обновлений на текущие. Распространенное значение momentum — около 0.9. Обычно оно обеспечивает хороший баланс.

Распространенные оптимизаторы#

Разные оптимизаторы имеют свои сильные и слабые стороны. Давай кратко рассмотрим несколько распространенных оптимизаторов.

  • SGD (стохастический градиентный спуск):

    • Обновляет параметры модели, используя градиент функции потерь по отношению к параметрам.
    • Простой и эффективный, но может медленно сходиться и застревать в локальных минимумах.
  • Adam (адаптивная оценка моментов):

    • Объединяет преимущества SGD с momentum и RMSProp.
    • Настраивает скорость обучения для каждого параметра на основе оценок первых и вторых моментов градиентов.
    • Хорошо подходит для зашумленных данных и разреженных градиентов.
    • Эффективен и обычно требует меньшей настройки. Для коротких запусков обучения optimizer=auto в YOLO26 выбирает близкий AdamW, а не сам Adam.
  • RMSProp (распространение среднеквадратичного значения):

    • Настраивает скорость обучения для каждого параметра, деля градиент на скользящее среднее величин недавних градиентов.
    • Помогает решать проблему исчезающего градиента и эффективен для рекуррентных нейронных сетей.
  • MuSGD (гибрид Muon + SGD):

    • Сочетает обновления в стиле SGD с поведением, вдохновленным Muon, для повышения стабильности при крупномасштабном обучении.
    • Хороший выбор, если тебе нужна способность к обобщению, характерная для SGD, но требуется более плавная сходимость, чем у обычного SGD.
    • Особенно актуален для рецептов обучения YOLO26; если не уверен, начни с optimizer=auto и сравни результат с MuSGD на своем наборе данных.

В YOLO26 параметр optimizer позволяет выбрать один из разных оптимизаторов, включая SGD, MuSGD, Adam, Adamax, AdamW, NAdam, RAdam и RMSProp, либо задать auto для автоматического выбора на основе количества итераций обучения.

yolo train model=yolo26n.pt data=coco8.yaml optimizer=MuSGD

Взаимодействие с сообществом#

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

Ресурсы сообщества#

  • Вопросы на GitHub: Посети репозиторий YOLO26 на GitHub и используй вкладку Issues, чтобы задавать вопросы, сообщать об ошибках и предлагать новые функции. Сообщество и сопровождающие проекта очень активны и готовы помочь.
  • Сервер Ultralytics в Discord: Присоединяйся к серверу Ultralytics в Discord, чтобы общаться с другими пользователями и разработчиками, получать поддержку и делиться опытом.

Официальная документация#

  • Документация Ultralytics по YOLO26: Ознакомься с официальной документацией по YOLO26, где представлены подробные руководства и полезные советы по различным проектам компьютерного зрения.

Эти ресурсы помогут тебе решать задачи и быть в курсе последних тенденций и практик сообщества компьютерного зрения.

Основные выводы#

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

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

  • Чтобы повысить загрузку GPU, задай параметру batch максимальный размер, поддерживаемый твоим GPU. На одном ускорителе batch=-1 профилирует модель и ориентируется примерно на 60% использования памяти. На CPU и Apple silicon выполняется переход к batch=16, а при использовании нескольких GPU необходимо явно указать глобальный размер пакета, кратный количеству устройств. Дополнительную информацию смотри в разделе аргументы режима Train.

  • При обучении со смешанной точностью используются числа с плавающей точкой разрядностью 16 бит (FP16) и 32 бита (FP32), что позволяет сбалансировать скорость вычислений и точность. В YOLO26 этот режим включен по умолчанию через amp=True; задай amp=False, чтобы принудительно использовать FP32. На CPU и Apple silicon AMP пропускается. Подробнее смотри в разделе аргументы режима Train.

  • Многоуровневое обучение повышает качество модели за счет обучения на изображениях разного размера, помогая ей лучше обобщать данные при различных масштабах и расстояниях. В YOLO26 для этого есть два отдельных параметра. scale=0.5 выбирает коэффициент масштабирования от 0.5 до 1.5, а затем дополняет изображение или обрезает его до фиксированного imgsz, тогда как multi_scale=0.25 изменяет сам imgsz в каждом пакете с шагом модели. Настройки и дополнительные сведения смотри в документации по режиму Train.

  • Использование предварительно обученных весов может значительно ускорить обучение и повысить точность модели за счет применения модели, уже знакомой с базовыми визуальными признаками. Загрузи их через аргумент model, например model=yolo26n.pt; затем pretrained определяет, сохранить ли эти веса (True, значение по умолчанию), удалить их (False) или заменить другой контрольной точкой (pretrained=path/to/best.pt, способ переноса весов в сборку model=*.yaml). Подробнее смотри в документации по режиму Train.

  • Количество эпох — это число полных проходов по обучающему набору данных в процессе обучения модели. Обычно рекомендуется начать с 300 эпох. Если модель рано переобучается, количество эпох можно уменьшить. Если переобучение не наблюдается, обучение можно продлить до 600, 1200 или большего количества эпох. Чтобы задать это значение в YOLO26, используй параметр epochs в скрипте обучения. Дополнительные рекомендации по определению идеального количества эпох смотри в этом разделе о количестве эпох.

Комментарии