Link to this sectionРекомендации и советы по машинному обучению для обучения моделей#
Link to this sectionВведение#
Один из самых важных этапов работы над проектом компьютерного зрения — это обучение модели. Прежде чем приступить к нему, тебе необходимо определить свои цели, а также собрать и разметить данные. После предварительной обработки данных, чтобы убедиться в их чистоте и согласованности, можно переходить к обучению модели.
Watch: Model Training Tips | How to Handle Large Datasets | Batch Size, GPU Utilization and Mixed Precision
Итак, что такое обучение модели? Обучение модели — это процесс обучения твоей модели распознаванию визуальных образов и выполнению предсказаний на основе твоих данных. Это напрямую влияет на производительность и точность твоего приложения. В этом руководстве мы рассмотрим лучшие практики, методы оптимизации и советы по устранению неполадок, которые помогут тебе эффективно обучать модели компьютерного зрения.
Link to this sectionКак обучить модель машинного обучения#
Модель компьютерного зрения обучается путем корректировки своих внутренних параметров для минимизации ошибок. Изначально модели подается большой набор размеченных изображений. Она делает предсказания о том, что находится на этих изображениях, а предсказания сравниваются с фактическими метками или содержимым для вычисления ошибок. Эти ошибки показывают, насколько сильно предсказания модели отклоняются от истинных значений.
В процессе обучения модель итеративно делает предсказания, вычисляет ошибки и обновляет свои параметры с помощью процесса, называемого обратным распространением ошибки. В этом процессе модель настраивает свои внутренние параметры (веса и смещения), чтобы уменьшить ошибки. Повторяя этот цикл многократно, модель постепенно повышает свою точность. Со временем она учится распознавать сложные паттерны, такие как формы, цвета и текстуры.
Этот процесс обучения позволяет модели компьютерного зрения выполнять различные задачи, включая обнаружение объектов, сегментацию экземпляров, семантическую сегментацию и классификацию изображений. Конечная цель — создать модель, способную обобщать полученные знания на новые, ранее не виденные изображения, чтобы она могла точно понимать визуальные данные в реальных приложениях.
Теперь, когда мы знаем, что происходит «под капотом» при обучении модели, давай рассмотрим моменты, которые следует учитывать при тренировке.
Link to this sectionОбучение на больших наборах данных#
Есть несколько аспектов, о которых стоит подумать, когда ты планируешь использовать большой набор данных для обучения модели. Например, можно настроить размер пакета (batch size), контролировать использование GPU, выбрать многомасштабное обучение (multiscale training) и т. д. Давай подробно разберем каждый из этих вариантов.
Link to this sectionРазмер пакета и использование GPU#
При обучении моделей на больших наборах данных ключевым фактором является эффективное использование GPU. Размер пакета — важный фактор. Это количество примеров данных, которые модель машинного обучения обрабатывает за одну итерацию обучения. Используя максимальный размер пакета, поддерживаемый твоим GPU, ты можешь в полной мере использовать его возможности и сократить время обучения модели. Однако стоит избегать нехватки видеопамяти. Если возникают ошибки памяти, постепенно уменьшай размер пакета, пока модель не начнет обучаться стабильно.
Watch: How to Use Batch Inference with Ultralytics YOLO26 | Speed Up Object Detection in Python 🎉
Что касается YOLO26, ты можешь установить параметр batch в конфигурации обучения, чтобы он соответствовал возможностям твоего GPU. Кроме того, установка batch=-1 в твоем скрипте обучения автоматически определит размер пакета, который может быть эффективно обработан на основе возможностей твоего устройства. Настраивая размер пакета, ты можешь максимально эффективно использовать ресурсы GPU и улучшить общий процесс обучения.
Link to this sectionОбучение на подмножестве данных#
Обучение на подмножестве — это разумная стратегия, которая предполагает обучение модели на меньшем наборе данных, который представляет собой весь большой набор. Это позволяет сэкономить время и ресурсы, особенно на этапе начальной разработки и тестирования модели. Если у тебя мало времени или ты экспериментируешь с различными конфигурациями модели, обучение на подмножестве — хороший вариант.
Когда дело доходит до YOLO26, ты можешь легко реализовать обучение на подмножестве, используя параметр fraction. Этот параметр позволяет указать, какую часть набора данных использовать для обучения. Например, установка fraction=0.1 обучит твою модель на 10% данных. Ты можешь использовать этот метод для быстрых итераций и настройки модели перед тем, как переходить к обучению на полном наборе данных. Обучение на подмножестве помогает тебе быстро продвигаться вперед и выявлять потенциальные проблемы на ранних этапах.
Link to this sectionМногомасштабное обучение#
Многомасштабное обучение — это метод, который улучшает способность твоей модели к обобщению за счет обучения на изображениях разных размеров. Твоя модель учится обнаруживать объекты на разных расстояниях и становится более устойчивой.
Например, когда ты обучаешь YOLO26, ты можешь включить многомасштабное обучение, установив параметр scale. Этот параметр корректирует размер обучающих изображений на заданный коэффициент, имитируя объекты на разных расстояниях. Например, установка scale=0.5 случайным образом масштабирует обучающие изображения с коэффициентом от 0.5 до 1.5 во время обучения. Настройка этого параметра позволяет твоей модели «увидеть» разнообразие масштабов изображений и улучшить возможности обнаружения для объектов разных размеров и в различных сценариях.
Ultralytics также поддерживает многомасштабное обучение с изменением размера изображения через параметр multi_scale. В отличие от scale, который увеличивает/уменьшает изображения, а затем дополняет или обрезает их обратно до imgsz, multi_scale меняет сам imgsz для каждого пакета (с округлением до шага strides модели). Например, при imgsz=640 и multi_scale=0.25 размер обучения выбирается в диапазоне от 480 до 800 с шагом (например, 480, 512, 544, ..., 800), в то время как multi_scale=0.0 сохраняет фиксированный размер.
Link to this sectionКеширование#
Кеширование — важный метод повышения эффективности обучения моделей машинного обучения. Храня предварительно обработанные изображения в оперативной памяти, кеширование сокращает время, которое GPU тратит на ожидание загрузки данных с диска. Модель может непрерывно получать данные без задержек, вызванных операциями ввода-вывода диска.
Кеширование можно контролировать при обучении YOLO26 с помощью параметра cache:
cache=True: хранит изображения набора данных в оперативной памяти (RAM), обеспечивая максимальную скорость доступа, но ценой повышенного использования памяти.cache='disk': сохраняет изображения на диске; медленнее, чем RAM, но быстрее, чем загрузка свежих данных каждый раз.cache=False: отключает кеширование, полагаясь полностью на ввод-вывод диска, что является самым медленным вариантом.
Link to this sectionОбучение со смешанной точностью#
Обучение со смешанной точностью использует как 16-битные (FP16), так и 32-битные (FP32) типы чисел с плавающей запятой. Преимущества обоих форматов используются путем применения FP16 для более быстрых вычислений и FP32 для поддержания точности там, где это необходимо. Большая часть операций нейронной сети выполняется в FP16, чтобы получить выгоду от ускорения вычислений и меньшего потребления памяти. Однако главная копия весов модели хранится в FP32, чтобы обеспечить точность во время шагов обновления весов. Ты можешь работать с более крупными моделями или большими размерами пакетов при тех же аппаратных ограничениях.
Чтобы внедрить обучение со смешанной точностью, тебе нужно будет изменить свои скрипты обучения и убедиться, что твое оборудование (например, GPU) поддерживает это. Многие современные фреймворки глубокого обучения, такие как PyTorch и TensorFlow, предлагают встроенную поддержку смешанной точности.
Обучение со смешанной точностью очень просто реализовать при работе с YOLO26. Ты можешь использовать флаг amp в своей конфигурации обучения. Установка amp=True включает обучение с автоматической смешанной точностью (AMP). Обучение со смешанной точностью — это простой, но эффективный способ оптимизировать процесс обучения твоей модели.
Link to this sectionПредобученные веса#
Использование предобученных весов — умный способ ускорить процесс обучения твоей модели. Предобученные веса берутся из моделей, уже обученных на больших наборах данных, что дает твоей модели хороший старт. Transfer learning адаптирует предобученные модели к новым, схожим задачам. Тонкая настройка (fine-tuning) предобученной модели включает начало с этих весов и последующее продолжение обучения на твоем конкретном наборе данных. Этот метод тренировки приводит к более быстрому обучению и зачастую к лучшей производительности, так как модель начинает с прочного понимания базовых признаков.
Параметр pretrained упрощает трансферное обучение в YOLO26. Установка pretrained=True будет использовать стандартные предобученные веса, или ты можешь указать путь к своей пользовательской предобученной модели. Эффективное использование предобученных весов и трансферного обучения значительно расширяет возможности твоей модели и сокращает затраты на обучение.
Link to this sectionДругие методы, которые стоит рассмотреть при работе с большими наборами данных#
Есть еще пара методов, которые стоит учесть при работе с большими наборами данных:
- Планировщики скорости обучения: реализация планировщиков скорости обучения динамически корректирует её в процессе тренировки. Хорошо настроенная скорость обучения может предотвратить перескакивание модели через минимумы и улучшить стабильность. При обучении YOLO26 параметр
lrfпомогает управлять планированием скорости обучения, устанавливая финальную скорость как долю от начальной. - Распределенное обучение: при работе с большими наборами данных распределенное обучение может кардинально изменить ситуацию. Ты можешь сократить время обучения, распределив нагрузку между несколькими GPU или машинами. Этот подход особенно ценен для корпоративных проектов с большими вычислительными ресурсами.
Link to this sectionКоличество эпох для обучения#
При обучении модели эпоха означает один полный проход по всему обучающему набору данных. В течение эпохи модель обрабатывает каждый пример из обучающего набора один раз и обновляет свои параметры в соответствии с алгоритмом обучения. Обычно требуется несколько эпох, чтобы позволить модели учиться и со временем уточнять свои параметры.
Частый вопрос, который возникает: как определить количество эпох для обучения модели? Хорошая отправная точка — 300 эпох. Если модель начинает переобучаться раньше, ты можешь уменьшить количество эпох. Если переобучение не происходит после 300 эпох, ты можешь увеличить обучение до 600, 1200 или более эпох.
Однако идеальное количество эпох может варьироваться в зависимости от размера твоего набора данных и целей проекта. Для больших наборов данных может потребоваться больше эпох, чтобы модель эффективно обучилась, в то время как для маленьких наборов может потребоваться меньше эпох, чтобы избежать переобучения. Что касается YOLO26, ты можешь установить параметр epochs в своем скрипте обучения.
Link to this sectionРанняя остановка (Early Stopping)#
Ранняя остановка — ценный метод оптимизации обучения модели. Отслеживая производительность на валидационном наборе, ты можешь остановить обучение, как только модель перестает улучшаться. Ты можешь сэкономить вычислительные ресурсы и предотвратить переобучение.
Процесс включает установку параметра терпения (patience), который определяет, сколько эпох нужно ждать улучшения метрик валидации перед остановкой обучения. Если производительность модели не улучшается в течение этих эпох, обучение останавливается, чтобы не тратить время и ресурсы впустую.
Для YOLO26 ты можешь включить раннюю остановку, установив параметр patience в конфигурации обучения. Например, patience=5 означает, что обучение остановится, если не будет улучшения метрик валидации в течение 5 последовательных эпох. Использование этого метода гарантирует, что процесс обучения остается эффективным и достигает оптимальной производительности без чрезмерных вычислений.
Link to this sectionВыбор между облачным и локальным обучением#
Существует два варианта обучения твоей модели: облачное обучение и локальное обучение.
Облачное обучение предлагает масштабируемость и мощное оборудование и идеально подходит для работы с большими наборами данных и сложными моделями. Такие платформы, как Google Cloud, AWS и Azure, предоставляют доступ по требованию к высокопроизводительным GPU и TPU, ускоряя время обучения и позволяя экспериментировать с более крупными моделями. Однако облачное обучение может быть дорогим, особенно в течение длительных периодов, а передача данных может увеличить затраты и задержки.
Локальное обучение обеспечивает больший контроль и возможности настройки, позволяя адаптировать среду под конкретные нужды и избежать постоянных расходов на облако. Это может быть более экономично для долгосрочных проектов, а поскольку данные остаются у тебя, это безопаснее. Однако локальное оборудование может иметь ограничения по ресурсам и требовать обслуживания, что может привести к увеличению времени обучения для крупных моделей.
Link to this sectionВыбор оптимизатора#
Оптимизатор — это алгоритм, который корректирует веса твоей нейронной сети, чтобы минимизировать функцию потерь, которая измеряет, насколько хорошо работает модель. Проще говоря, оптимизатор помогает модели учиться, подкручивая параметры для уменьшения ошибок. Выбор правильного оптимизатора напрямую влияет на то, насколько быстро и точно учится модель.
Ты также можешь настраивать параметры оптимизатора для улучшения производительности модели. Настройка скорости обучения определяет размер шагов при обновлении параметров. Для стабильности ты можешь начать с умеренной скорости обучения и постепенно снижать ее со временем, чтобы улучшить долгосрочное обучение. Кроме того, установка импульса (momentum) определяет, какое влияние прошлые обновления оказывают на текущие. Стандартное значение импульса — около 0.9. Обычно это обеспечивает хороший баланс.
Link to this sectionРаспространенные оптимизаторы#
Разные оптимизаторы имеют свои сильные и слабые стороны. Давай взглянем на несколько распространенных вариантов.
-
SGD (Stochastic Gradient Descent):
- Обновляет параметры модели, используя градиент функции потерь относительно параметров.
- Простой и эффективный, но может медленно сходиться и застревать в локальных минимумах.
-
Adam (Adaptive Moment Estimation):
- Сочетает в себе преимущества 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=MuSGDLink to this sectionСвязь с сообществом#
Будучи частью сообщества энтузиастов компьютерного зрения, ты сможешь быстрее решать проблемы и учиться. Вот несколько способов связаться, получить помощь и поделиться идеями.
Link to this sectionРесурсы сообщества#
- GitHub Issues: Посети репозиторий YOLO26 на GitHub и используй вкладку Issues, чтобы задавать вопросы, сообщать об ошибках и предлагать новые функции. Сообщество и сопровождающие очень активны и готовы помочь.
- Сервер Ultralytics в Discord: Присоединяйся к серверу Ultralytics в Discord, чтобы общаться с другими пользователями и разработчиками, получать поддержку и делиться своим опытом.
Link to this sectionОфициальная документация#
- Документация Ultralytics YOLO26: Ознакомься с официальной документацией YOLO26, где найдешь подробные руководства и полезные советы по различным проектам компьютерного зрения.
Использование этих ресурсов поможет тебе решать сложные задачи и быть в курсе последних тенденций и практик в сообществе компьютерного зрения.
Link to this sectionОсновные выводы#
Обучение моделей компьютерного зрения включает следование лучшим практикам, оптимизацию стратегий и решение проблем по мере их возникновения. Такие методы, как регулировка размеров пакетов, обучение со смешанной точностью и начало с предобученных весов, могут сделать работу твоих моделей лучше, а обучение — быстрее. Методы вроде обучения на подмножестве и ранней остановки помогают экономить время и ресурсы. Поддержание связи с сообществом и отслеживание новых трендов помогут тебе постоянно совершенствовать навыки обучения моделей.
Link to this sectionFAQ#
Link to this sectionКак я могу улучшить использование GPU при обучении на большом наборе данных с Ultralytics YOLO?#
Чтобы улучшить использование GPU, установи параметры batch в конфигурации обучения до максимального размера, поддерживаемого твоим GPU. Это гарантирует, что ты задействуешь возможности GPU в полной мере, сокращая время обучения. Если ты столкнешься с ошибками памяти, постепенно уменьшай размер батча, пока обучение не пойдет гладко. Для YOLO26 установка batch=-1 в твоем скрипте обучения автоматически определит оптимальный размер батча для эффективной обработки. Дополнительную информацию ищи в конфигурации обучения.
Link to this sectionЧто такое обучение со смешанной точностью и как мне включить его в YOLO26?#
Обучение со смешанной точностью использует как 16-битные (FP16), так и 32-битные (FP32) типы чисел с плавающей запятой, чтобы сбалансировать скорость вычислений и точность. Этот подход ускоряет обучение и снижает использование памяти без потери точности модели. Чтобы включить обучение со смешанной точностью в YOLO26, установи параметр amp в значение True в конфигурации обучения. Это активирует обучение с автоматической смешанной точностью (AMP). Более подробную информацию об этом методе оптимизации смотри в конфигурации обучения.
Link to this sectionКак многомасштабное обучение улучшает производительность модели YOLO26?#
Многомасштабное обучение улучшает производительность модели за счет обучения на изображениях разных размеров, что позволяет модели лучше обобщать данные на разных масштабах и дистанциях. В YOLO26 ты можешь включить многомасштабное обучение, установив параметр scale в конфигурации обучения. Например, scale=0.5 делает выборку коэффициента масштабирования от 0.5 до 1.5, а затем дополняет/обрезает до imgsz. Этот метод имитирует объекты на разных расстояниях, делая модель более устойчивой в различных сценариях. Настройки и подробности смотри в конфигурации обучения.
Link to this sectionКак я могу использовать предобученные веса для ускорения обучения в YOLO26?#
Использование предобученных весов может значительно ускорить обучение и улучшить точность модели, используя преимущества модели, уже знакомой с фундаментальными визуальными признаками. В YOLO26 просто установи параметр pretrained в True или укажи путь к своим пользовательским предобученным весам в конфигурации обучения. Этот метод, называемый трансферным обучением, позволяет эффективно адаптировать модели, обученные на больших наборах данных, к твоему конкретному приложению. Узнай больше о том, как использовать предобученные веса и их преимуществах, в руководстве по конфигурации обучения.
Link to this sectionКакое количество эпох рекомендуется для обучения модели и как задать его в YOLO26?#
Количество эпох означает полное количество проходов по обучающему набору данных во время тренировки модели. Типичная отправная точка — 300 эпох. Если твоя модель начинает переобучаться раньше, ты можешь уменьшить это число. В качестве альтернативы, если переобучение не наблюдается, ты можешь продлить обучение до 600, 1200 или более эпох. Чтобы задать это в YOLO26, используй параметр epochs в своем скрипте обучения. Дополнительные советы по определению идеального количества эпох см. в этом разделе: количество эпох.