Лучшие практики и советы по машинному обучению для обучения моделей
Введение
Одним из самых важных шагов при работе над проектом компьютерного зрения является обучение модели. Прежде чем прийти к этому этапу, тебе нужно определить цели, а также собрать и разметить данные. После предобработки данных, чтобы убедиться, что они чистые и непротиворечивые, ты можешь переходить к обучению модели.
Watch: Model Training Tips | How to Handle Large Datasets | Batch Size, GPU Utilization and Mixed Precision
Итак, что же такое обучение модели? Обучение модели — это процесс обучения твоей модели распознаванию визуальных паттернов и выполнению предсказаний на основе твоих данных. Это напрямую влияет на производительность и точность твоего приложения. В этом руководстве мы рассмотрим лучшие практики, методы оптимизации и советы по устранению неполадок, которые помогут тебе эффективно обучать модели компьютерного зрения.
Как обучить модель машинного обучения
Модель компьютерного зрения обучается путем корректировки своих внутренних параметров для минимизации ошибок. Сначала в модель подается большой набор размеченных изображений. Она делает предсказания о том, что находится на этих изображениях, и предсказания сравниваются с фактическими метками или содержимым для вычисления ошибок. Эти ошибки показывают, насколько предсказания модели отклоняются от истинных значений.
Во время обучения модель итеративно делает предсказания, вычисляет ошибки и обновляет свои параметры с помощью процесса, называемого обратным распространением ошибки. В ходе этого процесса модель корректирует свои внутренние параметры (веса и смещения), чтобы уменьшить ошибки. Повторяя этот цикл много раз, модель постепенно улучшает свою точность. Со временем она учится распознавать сложные паттерны, такие как формы, цвета и текстуры.
Этот процесс обучения позволяет модели компьютерного зрения выполнять различные задачи, включая обнаружение объектов, сегментацию экземпляров и классификацию изображений. Конечная цель — создать модель, которая сможет обобщать свои знания на новые, ранее не виденные изображения, чтобы она могла точно понимать визуальные данные в реальных приложениях.
Теперь, когда мы знаем, что происходит «за кулисами» при обучении модели, давай рассмотрим моменты, которые стоит учесть при обучении модели.
Обучение на больших наборах данных
Существует несколько различных аспектов, о которых стоит подумать, когда ты планируешь использовать большой набор данных для обучения модели. Например, ты можешь настроить размер пакета (batch size), контролировать использование GPU, использовать многомасштабное обучение (multiscale training) и т. д. Давай подробно разберем каждую из этих опций.
Размер пакета и использование GPU
При обучении моделей на больших наборах данных ключевым моментом является эффективное использование GPU. Размер пакета (batch size) — важный фактор. Это количество образцов данных, которые модель машинного обучения обрабатывает за одну итерацию обучения. Используя максимально возможный размер пакета, поддерживаемый твоим GPU, ты можешь полностью использовать его возможности и сократить время, затрачиваемое на обучение модели. Однако тебе следует избегать нехватки памяти GPU. Если ты столкнулся с ошибками памяти, постепенно уменьшай размер пакета, пока модель не начнет обучаться плавно.
Watch: How to Use Batch Inference with Ultralytics YOLO26 | Speed Up Object Detection in Python 🎉
Что касается YOLO26, ты можешь установить параметр batch_size в конфигурации обучения, чтобы он соответствовал возможностям твоего GPU. Кроме того, установка batch=-1 в твоем скрипте обучения автоматически определит размер пакета, который можно эффективно обработать в зависимости от возможностей твоего устройства. Тонко настраивая размер пакета, ты сможешь максимально эффективно использовать ресурсы своего GPU и улучшить общий процесс обучения.
Обучение на подмножестве данных
Обучение на подмножестве (subset training) — это умная стратегия, которая включает обучение твоей модели на меньшем наборе данных, который представляет собой весь большой набор данных. Это может сэкономить время и ресурсы, особенно на этапе первоначальной разработки и тестирования модели. Если у тебя мало времени или ты экспериментируешь с различными конфигурациями модели, обучение на подмножестве — хороший вариант.
Когда дело доходит до YOLO26, ты можешь легко внедрить обучение на подмножестве, используя параметр fraction. Этот параметр позволяет указать, какую часть набора данных использовать для обучения. Например, установка fraction=0.1 обучит твою модель на 10% данных. Ты можешь использовать этот метод для быстрых итераций и настройки модели перед тем, как переходить к обучению на полном наборе данных. Обучение на подмножестве помогает тебе быстро прогрессировать и выявлять потенциальные проблемы на ранних этапах.
Многомасштабное обучение
Многомасштабное обучение (multiscale training) — это метод, который улучшает способность модели к обобщению путем обучения на изображениях разных размеров. Твоя модель может научиться обнаруживать объекты на разных масштабах и расстояниях и стать более устойчивой.
Например, при обучении YOLO26 ты можешь включить многомасштабное обучение, установив параметр scale. Этот параметр корректирует размер обучающих изображений на определенный коэффициент, имитируя объекты на разных расстояниях. Например, установка scale=0.5 случайным образом масштабирует обучающие изображения с коэффициентом от 0.5 до 1.5 во время обучения. Настройка этого параметра позволяет твоей модели видеть изображения в разных масштабах и улучшить ее способности к обнаружению объектов разного размера в различных сценариях.
Ultralytics также поддерживает многомасштабное обучение с изменением размера изображения через параметр multi_scale. В отличие от scale, который увеличивает изображения, а затем дополняет/обрезает их обратно до imgsz, multi_scale меняет сам imgsz для каждого пакета (округленный до шага stride модели). Например, при imgsz=640 и multi_scale=0.25 размер обучения выбирается в диапазоне от 480 до 800 с шагом stride (например, 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 для сохранения точности там, где это необходимо. Большинство операций нейронной сети выполняются в FP16, чтобы воспользоваться преимуществами более быстрых вычислений и меньшего потребления памяти. Однако мастер-копия весов модели хранится в FP32, чтобы обеспечить точность во время шагов обновления весов. Ты можешь работать с большими моделями или большими размерами пакетов при тех же аппаратных ограничениях.
Чтобы внедрить обучение со смешанной точностью, тебе нужно будет изменить свои скрипты обучения и убедиться, что твое оборудование (например, GPU) его поддерживает. Многие современные фреймворки глубокого обучения, такие как PyTorch и TensorFlow, предлагают встроенную поддержку смешанной точности.
Обучение со смешанной точностью при работе с YOLO26 очень простое. Ты можешь использовать флаг amp в своей конфигурации обучения. Установка amp=True включает обучение с автоматической смешанной точностью (AMP). Обучение со смешанной точностью — это простой, но эффективный способ оптимизировать процесс обучения твоей модели.
Предобученные веса
Использование предобученных весов — это умный способ ускорить процесс обучения твоей модели. Предобученные веса берутся от моделей, уже обученных на больших наборах данных, что дает твоей модели хороший старт. Трансферное обучение адаптирует предобученные модели к новым, связанным задачам. Тонкая настройка (fine-tuning) предобученной модели включает начало с этих весов с последующим продолжением обучения на твоем специфическом наборе данных. Этот метод обучения приводит к более быстрому времени обучения и часто к лучшей производительности, поскольку модель начинает с прочного понимания базовых признаков.
Параметр pretrained делает трансферное обучение легким с YOLO26. Установка pretrained=True будет использовать предопределенные предобученные веса, или ты можешь указать путь к пользовательской предобученной модели. Использование предобученных весов и трансферного обучения эффективно расширяет возможности твоей модели и сокращает затраты на обучение.
Другие методы, которые стоит учесть при работе с большими наборами данных
Есть еще пара методов, которые стоит учесть при работе с большими наборами данных:
- Планировщики скорости обучения (Learning Rate Schedulers): внедрение планировщиков скорости обучения динамически корректирует скорость обучения во время процесса. Хорошо настроенная скорость обучения может предотвратить проскакивание моделью минимумов и повысить стабильность. При обучении YOLO26 параметр
lrfпомогает управлять планированием скорости обучения, устанавливая конечную скорость обучения как часть от начальной скорости. - Распределенное обучение: для работы с большими наборами данных распределенное обучение может кардинально изменить ситуацию. Ты можешь сократить время обучения, распределив нагрузку по обучению между несколькими GPU или машинами. Этот подход особенно ценен для проектов корпоративного уровня с существенными вычислительными ресурсами.
Количество эпох для обучения
При обучении модели эпоха означает один полный проход по всему обучающему набору данных. Во время эпохи модель обрабатывает каждый пример в обучающем наборе по одному разу и обновляет свои параметры на основе алгоритма обучения. Обычно требуется несколько эпох, чтобы позволить модели учиться и уточнять свои параметры со временем.
Частый вопрос, который возникает: как определить количество эпох для обучения модели. Хорошая отправная точка — 300 эпох. Если модель переобучается слишком рано, ты можешь уменьшить количество эпох. Если переобучение не происходит после 300 эпох, ты можешь продлить обучение до 600, 1200 или более эпох.
Однако идеальное количество эпох может варьироваться в зависимости от размера твоего набора данных и целей проекта. Большим наборам данных может потребоваться больше эпох, чтобы модель обучалась эффективно, в то время как маленьким наборам данных может потребоваться меньше эпох, чтобы избежать переобучения. Что касается YOLO26, ты можешь установить параметр epochs в своем скрипте обучения.
Ранняя остановка (Early Stopping)
Ранняя остановка — это ценный метод для оптимизации обучения модели. Отслеживая производительность на валидации, ты можешь остановить обучение, как только модель перестает улучшаться. Ты можешь сэкономить вычислительные ресурсы и предотвратить переобучение.
Процесс включает установку параметра терпения (patience), который определяет, сколько эпох нужно ждать улучшения метрик валидации, прежде чем остановить обучение. Если производительность модели не улучшается в течение этих эпох, обучение останавливается, чтобы не тратить зря время и ресурсы.
Для YOLO26 ты можешь включить раннюю остановку, установив параметр patience в своей конфигурации обучения. Например, patience=5 означает, что обучение остановится, если не будет улучшения метрик валидации в течение 5 последовательных эпох. Использование этого метода гарантирует, что процесс обучения остается эффективным и достигает оптимальной производительности без чрезмерных вычислений.
Выбор между облачным и локальным обучением
Есть два варианта обучения твоей модели: облачное обучение и локальное обучение.
Облачное обучение предлагает масштабируемость и мощное оборудование и идеально подходит для работы с большими наборами данных и сложными моделями. Платформы, такие как Google Cloud, AWS и Azure, предоставляют доступ по требованию к высокопроизводительным GPU и TPU, ускоряя время обучения и позволяя проводить эксперименты с большими моделями. Однако облачное обучение может быть дорогим, особенно в течение длительных периодов, а передача данных может увеличить расходы и задержки.
Локальное обучение обеспечивает больший контроль и возможность настройки, позволяя тебе адаптировать свою среду под конкретные нужды и избегать постоянных расходов на облако. Это может быть экономичнее для долгосрочных проектов, и поскольку твои данные остаются на месте, это более безопасно. Однако локальное оборудование может иметь ограничения по ресурсам и требовать обслуживания, что может привести к более длительному времени обучения для больших моделей.
Выбор оптимизатора
Оптимизатор — это алгоритм, который корректирует веса твоей нейронной сети для минимизации функции потерь, которая измеряет, насколько хорошо работает модель. Проще говоря, оптимизатор помогает модели учиться, подстраивая ее параметры для уменьшения ошибок. Выбор правильного оптимизатора напрямую влияет на то, как быстро и точно модель учится.
Ты также можешь тонко настраивать параметры оптимизатора, чтобы улучшить производительность модели. Настройка скорости обучения определяет размер шагов при обновлении параметров. Для стабильности ты можешь начать с умеренной скорости обучения и постепенно снижать ее со временем, чтобы улучшить долгосрочное обучение. Кроме того, установка импульса (momentum) определяет, какое влияние прошлые обновления оказывают на текущие. Распространенное значение для импульса — около 0.9. Это обычно обеспечивает хороший баланс.
Распространенные оптимизаторы
Разные оптимизаторы имеют различные сильные и слабые стороны. Давай взглянем на несколько распространенных оптимизаторов.
-
SGD (стохастический градиентный спуск):
- Обновляет параметры модели, используя градиент функции потерь относительно параметров.
- Простой и эффективный, но может быть медленным в сходимости и может застрять в локальных минимумах.
-
Adam (адаптивная оценка момента):
- Сочетает преимущества как SGD с импульсом, так и RMSProp.
- Регулирует скорость обучения для каждого параметра на основе оценок первого и второго моментов градиентов.
- Хорошо подходит для зашумленных данных и разреженных градиентов.
- Эффективен и обычно требует меньше настройки, что делает его рекомендуемым оптимизатором для YOLO26.
-
RMSProp (Root Mean Square Propagation):
- Регулирует скорость обучения для каждого параметра путем деления градиента на скользящее среднее величин недавних градиентов.
- Помогает в решении проблемы затухающего градиента и эффективен для рекуррентных нейронных сетей.
-
MuSGD (гибрид Muon + SGD):
- Сочетает обновления в стиле SGD с поведением, вдохновленным Muon, для улучшенной стабильности при крупномасштабном обучении.
- Хороший выбор, когда ты хочешь обобщения как у SGD, но нужна более плавная сходимость, чем у обычного SGD.
- Особенно актуален для рецептов обучения YOLO26; если сомневаешься, начни с
optimizer=autoи сравни результат с MuSGD на своем наборе данных.
Для YOLO26 параметр optimizer позволяет тебе выбирать из различных оптимизаторов, включая SGD, MuSGD, Adam, AdamW, NAdam, RAdam и RMSProp, или ты можешь установить его в auto для автоматического выбора на основе конфигурации модели.
yolo train model=yolo26n.pt data=coco8.yaml optimizer=MuSGDСвязь с сообществом
Быть частью сообщества энтузиастов компьютерного зрения помогает решать проблемы и учиться быстрее. Вот несколько способов подключиться, получить помощь и поделиться идеями.
Ресурсы сообщества
- GitHub Issues: посети репозиторий YOLO26 на GitHub и используй вкладку Issues, чтобы задавать вопросы, сообщать об ошибках и предлагать новые функции. Сообщество и сопровождающие очень активны и готовы помочь.
- Сервер Ultralytics в Discord: Присоединяйся к серверу Ultralytics в Discord, чтобы общаться с другими пользователями и разработчиками, получать поддержку и делиться своим опытом.
Официальная документация
- Документация Ultralytics YOLO26: Ознакомься с официальной документацией YOLO26, где найдёшь подробные руководства и полезные советы по различным проектам в области компьютерного зрения.
Использование этих ресурсов поможет тебе решать сложные задачи и оставаться в курсе последних тенденций и практик в сообществе компьютерного зрения.
Основные выводы
Обучение моделей компьютерного зрения включает соблюдение хороших практик, оптимизацию своих стратегий и решение проблем по мере их возникновения. Такие методы, как настройка размеров пакета, обучение со смешанной точностью и использование предобученных весов, могут заставить твои модели работать лучше и обучаться быстрее. Такие методы, как обучение на подмножестве и ранняя остановка, помогают тебе экономить время и ресурсы. Оставаясь на связи с сообществом и следя за новыми трендами, ты сможешь продолжать улучшать свои навыки обучения моделей.
Часто задаваемые вопросы (FAQ)
Как я могу улучшить использование GPU при обучении на большом наборе данных с помощью Ultralytics YOLO?
Чтобы улучшить использование GPU, установи параметр batch_size в конфигурации обучения на максимально допустимый для твоего GPU размер. Это гарантирует, что ты используешь возможности GPU на полную мощность, сокращая время обучения. Если ты столкнешься с ошибками памяти, постепенно уменьшай размер пакета, пока обучение не пойдет гладко. Для YOLO26 установка batch=-1 в твоем скрипте обучения автоматически определит оптимальный размер пакета для эффективной обработки. Для получения дополнительной информации обратись к конфигурации обучения.
Что такое обучение со смешанной точностью и как мне включить его в YOLO26?
Обучение со смешанной точностью использует как 16-битные (FP16), так и 32-битные (FP32) типы с плавающей запятой, чтобы сбалансировать скорость вычислений и точность. Этот подход ускоряет обучение и сокращает использование памяти без ущерба для точности модели. Чтобы включить обучение со смешанной точностью в YOLO26, установи параметр amp в значение True в своей конфигурации обучения. Это активирует обучение с автоматической смешанной точностью (AMP). Более подробно об этом методе оптимизации читай в конфигурации обучения.
Как многомасштабное обучение улучшает производительность модели YOLO26?
Многомасштабное обучение улучшает производительность модели путем обучения на изображениях разных размеров, позволяя модели лучше обобщать данные на разных масштабах и расстояниях. В YOLO26 ты можешь включить многомасштабное обучение, установив параметр scale в конфигурации обучения. Например, scale=0.5 выбирает коэффициент масштабирования между 0.5 и 1.5, а затем дополняет/обрезает до imgsz. Этот метод имитирует объекты на разном удалении, делая модель более устойчивой в различных сценариях. Настройки и подробности ищи в конфигурации обучения.
Как я могу использовать предобученные веса, чтобы ускорить обучение в YOLO26?
Использование предобученных весов может значительно ускорить обучение и повысить точность модели за счет использования уже знакомой модели с базовыми визуальными признаками. В YOLO26 просто установи параметр pretrained в True или укажи путь к своим пользовательским предобученным весам в конфигурации обучения. Этот метод, называемый трансферным обучением, позволяет эффективно адаптировать модели, обученные на больших наборах данных, к твоей специфической задаче. Узнай больше о том, как использовать предобученные веса и об их преимуществах в руководстве по конфигурации обучения.
Каково рекомендуемое количество эпох для обучения модели и как установить это в YOLO26?
Количество эпох означает полное количество проходов по набору данных во время обучения модели. Типичная отправная точка — 300 эпох. Если твоя модель переобучается рано, ты можешь уменьшить это количество. В противном случае, если переобучение не наблюдается, ты можешь продлить обучение до 600, 1200 или более эпох. Чтобы установить это в YOLO26, используй параметр epochs в своем скрипте обучения. Дополнительные советы по определению идеального количества эпох см. в этом разделе количество эпох.