Лучшие практики машинного обучения и советы по обучению моделей
Введение
Одним из наиболее важных шагов при работе над проектом компьютерного зрения является обучение модели. Прежде чем перейти к этому шагу, вам необходимо определить свои цели и собрать и аннотировать свои данные. После предварительной обработки данных, чтобы убедиться, что они чистые и согласованные, вы можете перейти к обучению своей модели.
Смотреть: Советы по обучению моделей | Как обрабатывать большие наборы данных | Размер пакета, использование GPU и Смешанная точность
Итак, что такое обучение модели? Обучение модели — это процесс обучения вашей модели распознаванию визуальных образов и прогнозированию на основе ваших данных. Это напрямую влияет на производительность и точность вашего приложения. В этом руководстве мы рассмотрим лучшие практики, методы оптимизации и советы по устранению неполадок, которые помогут вам эффективно обучать ваши модели компьютерного зрения.
Как обучить модель машинного обучения
Модель компьютерного зрения обучается путем корректировки своих внутренних параметров для минимизации ошибок. Первоначально модели предоставляется большой набор размеченных изображений. Она делает прогнозы о том, что находится на этих изображениях, и прогнозы сравниваются с фактическими метками или содержимым для вычисления ошибок. Эти ошибки показывают, насколько прогнозы модели отличаются от истинных значений.
Во время обучения модель итеративно делает прогнозы, вычисляет ошибки и обновляет свои параметры посредством процесса, называемого обратным распространением. В этом процессе модель корректирует свои внутренние параметры (веса и смещения), чтобы уменьшить ошибки. Повторяя этот цикл много раз, модель постепенно повышает свою точность. Со временем она учится распознавать сложные закономерности, такие как формы, цвета и текстуры.
Этот процесс обучения позволяет модели компьютерного зрения выполнять различные задачи, включая обнаружение объектов, сегментацию экземпляров и классификацию изображений. Конечная цель состоит в том, чтобы создать модель, которая может обобщать свои знания на новые, ранее не виденные изображения, чтобы она могла точно понимать визуальные данные в реальных приложениях.
Теперь, когда мы знаем, что происходит за кулисами во время обучения модели, давайте рассмотрим моменты, которые следует учитывать при обучении модели.
Обучение на больших наборах данных
Есть несколько различных аспектов, о которых следует подумать, когда вы планируете использовать большой набор данных для обучения модели. Например, вы можете настроить размер пакета, контролировать использование GPU, выбрать использование многомасштабного обучения и т. д. Давайте подробно рассмотрим каждый из этих вариантов.
Размер пакета и использование GPU
При обучении моделей на больших наборах данных ключевым моментом является эффективное использование вашего GPU. Размер пакета является важным фактором. Это количество образцов данных, которые модель машинного обучения обрабатывает за одну итерацию обучения. Используя максимальный размер пакета, поддерживаемый вашим GPU, вы можете в полной мере воспользоваться его возможностями и сократить время обучения модели. Однако необходимо избегать нехватки памяти GPU. Если вы столкнулись с ошибками памяти, уменьшайте размер пакета постепенно, пока модель не начнет обучаться плавно.
Смотреть: Как использовать пакетный вывод с Ultralytics YOLO11 | Ускорение обнаружения объектов в python 🎉
Что касается YOLO11, вы можете установить параметр batch_size
в конфигурации обучения в соответствии с возможностями вашего GPU. Кроме того, установка batch=-1
в вашем скрипте обучения автоматически определит размер пакета который может быть эффективно обработан на основе возможностей вашего устройства. Точная настройка размера пакета позволяет максимально эффективно использовать ресурсы GPU и улучшить общий процесс обучения.
Обучение на подмножестве данных
Обучение на подмножестве — это разумная стратегия, которая включает в себя обучение вашей модели на меньшем наборе данных, который представляет больший набор данных. Это может сэкономить время и ресурсы, особенно во время начальной разработки и тестирования модели. Если у вас мало времени или вы экспериментируете с различными конфигурациями модели, обучение на подмножестве — хороший вариант.
Что касается YOLO11, вы можете легко реализовать обучение на подмножестве, используя параметр fraction
Этот параметр позволяет указать, какую часть вашего набора данных использовать для обучения. Например, установка fraction=0.1
обучит вашу модель на 10% данных. Вы можете использовать этот метод для быстрой итерации и настройки вашей модели, прежде чем приступать к обучению модели с использованием полного набора данных. Обучение на подмножестве помогает вам быстро продвигаться вперед и выявлять потенциальные проблемы на раннем этапе.
Многомасштабное обучение
Многомасштабное обучение — это метод, который улучшает способность вашей модели к обобщению, обучая ее на изображениях разных размеров. Ваша модель может научиться обнаруживать объекты в разных масштабах и на разных расстояниях и стать более надежной.
Например, когда вы обучаете YOLO11, вы можете включить многомасштабное обучение, установив параметр scale
Этот параметр регулирует размер обучающих изображений на указанный коэффициент, имитируя объекты на разных расстояниях. Например, установка scale=0.5
случайным образом масштабирует обучающие изображения в диапазоне от 0,5 до 1,5 во время обучения. Настройка этого параметра позволяет вашей модели сталкиваться с различными масштабами изображений и улучшает ее возможности обнаружения объектов разных размеров и в различных сценариях.
Кэширование
Кэширование — важный метод повышения эффективности обучения моделей машинного обучения. Сохраняя предварительно обработанные изображения в памяти, кэширование сокращает время ожидания GPU загрузки данных с диска. Модель может непрерывно получать данные без задержек, вызванных операциями дискового ввода-вывода.
Кэшированием можно управлять при обучении YOLO11 с помощью параметра cache
:
cache=True
: Сохраняет изображения набора данных в ОЗУ, обеспечивая самую высокую скорость доступа, но за счет увеличения использования памяти.cache='disk'
: Сохраняет изображения на диске, медленнее, чем ОЗУ, но быстрее, чем загрузка новых данных каждый раз.cache=False
: Отключает кэширование, полностью полагаясь на дисковый ввод-вывод, что является самым медленным вариантом.
Обучение со смешанной точностью
Обучение со смешанной точностью использует как 16-битные (FP16), так и 32-битные (FP32) типы с плавающей запятой. Преимущества FP16 и FP32 используются за счет использования FP16 для более быстрых вычислений и FP32 для поддержания точности там, где это необходимо. Большинство операций нейронной сети выполняются в FP16, чтобы воспользоваться преимуществами более быстрых вычислений и меньшего использования памяти. Однако основная копия весов модели хранится в FP32 для обеспечения точности во время шагов обновления весов. Вы можете обрабатывать более крупные модели или более крупные размеры пакетов в рамках тех же аппаратных ограничений.
Для реализации обучения со смешанной точностью необходимо изменить скрипты обучения и убедиться, что ваше оборудование (например, GPU) поддерживает его. Многие современные фреймворки глубокого обучения, такие как PyTorch и TensorFlow, предлагают встроенную поддержку смешанной точности.
При работе с YOLO11 смешанное обучение — довольно простая задача. Вы можете использовать флаг amp
в вашей конфигурации обучения. Установка amp=True
включает автоматическое смешанное обучение (AMP). Смешанное обучение — это простой, но эффективный способ оптимизировать процесс обучения вашей модели.
Предварительно обученные веса
Использование предварительно обученных весов — отличный способ ускорить процесс обучения вашей модели. Предварительно обученные веса берутся из моделей, которые уже были обучены на больших наборах данных, что дает вашей модели преимущество на старте. Transfer learning адаптирует предварительно обученные модели к новым, связанным задачам. Тонкая настройка предварительно обученной модели включает в себя начало с этими весами, а затем продолжение обучения на вашем конкретном наборе данных. Этот метод обучения приводит к более быстрому времени обучения и часто к лучшей производительности, поскольку модель начинает с четкого понимания основных функций.
Параметр pretrained
упрощает transfer learning с помощью YOLO11. Установка pretrained=True
будет использовать предварительно обученные веса по умолчанию, или вы можете указать путь к пользовательской предварительно обученной модели. Использование предварительно обученных весов и transfer learning эффективно повышает возможности вашей модели и снижает затраты на обучение.
Другие методы, которые следует учитывать при работе с большим набором данных
Есть несколько других методов, которые следует учитывать при работе с большим набором данных:
- Learning Rate Schedulers (планировщики скорости обучения): Реализация планировщиков скорости обучения динамически регулирует скорость обучения во время обучения. Хорошо настроенная скорость обучения может предотвратить перескакивание моделью минимумов и повысить стабильность. При обучении YOLO11 параметр
lrf
помогает управлять планированием скорости обучения, устанавливая окончательную скорость обучения как долю от начальной скорости. - Распределенное обучение: Для обработки больших наборов данных распределенное обучение может кардинально изменить ситуацию. Вы можете сократить время обучения, распределив нагрузку по обучению между несколькими GPU или машинами. Этот подход особенно ценен для проектов корпоративного масштаба со значительными вычислительными ресурсами.
Количество эпох для обучения
При обучении модели эпоха означает один полный проход через весь обучающий набор данных. Во время эпохи модель обрабатывает каждый пример в обучающем наборе один раз и обновляет свои параметры на основе алгоритма обучения. Обычно требуется несколько эпох, чтобы модель могла со временем изучить и уточнить свои параметры.
Часто возникает вопрос, как определить количество эпох для обучения модели. Хорошая отправная точка — 300 эпох. Если модель переобучается на ранней стадии, вы можете уменьшить количество эпох. Если overfitting не происходит после 300 эпох, вы можете продлить обучение до 600, 1200 или более эпох.
Однако идеальное количество эпох может варьироваться в зависимости от размера вашего набора данных и целей проекта. Большим наборам данных может потребоваться больше эпох, чтобы модель эффективно обучилась, а меньшим наборам данных может потребоваться меньше эпох, чтобы избежать переобучения. Что касается YOLO11, вы можете установить epochs
параметр в вашем скрипте обучения.
Ранняя остановка
Ранняя остановка — ценный метод оптимизации обучения модели. Отслеживая производительность проверки, вы можете остановить обучение, как только модель перестанет улучшаться. Вы можете сэкономить вычислительные ресурсы и предотвратить переобучение.
Процесс включает в себя установку параметра patience, который определяет, сколько эпох ожидать улучшения метрик валидации перед остановкой обучения. Если производительность модели не улучшается в течение этих эпох, обучение останавливается, чтобы избежать траты времени и ресурсов.
Для YOLO11 вы можете включить раннюю остановку, установив параметр patience в конфигурации обучения. Например, patience=5
означает, что обучение будет остановлено, если в метриках проверки не будет улучшений в течение 5 последовательных эпох. Использование этого метода обеспечивает эффективность процесса обучения и достижение оптимальной производительности без чрезмерных вычислений.
Выбор между облачным и локальным обучением
Есть два варианта обучения вашей модели: облачное обучение и локальное обучение.
Облачное обучение предлагает масштабируемость и мощное оборудование и идеально подходит для обработки больших наборов данных и сложных моделей. Платформы, такие как Google Cloud, AWS и Azure, предоставляют доступ по требованию к высокопроизводительным GPU и TPU, ускоряя время обучения и позволяя экспериментировать с более крупными моделями. Однако облачное обучение может быть дорогостоящим, особенно в течение длительных периодов, а передача данных может увеличить затраты и задержку.
Локальное обучение обеспечивает больший контроль и настройку, позволяя адаптировать вашу среду к конкретным потребностям и избежать текущих облачных затрат. Это может быть более экономичным для долгосрочных проектов, и, поскольку ваши данные остаются на месте, это более безопасно. Однако локальное оборудование может иметь ограничения по ресурсам и требовать обслуживания, что может привести к увеличению времени обучения для больших моделей.
Выбор оптимизатора
Оптимизатор — это алгоритм, который регулирует веса вашей нейронной сети, чтобы минимизировать loss function, которая измеряет, насколько хорошо работает модель. Проще говоря, оптимизатор помогает модели учиться, настраивая ее параметры для уменьшения ошибок. Выбор правильного оптимизатора напрямую влияет на то, как быстро и точно модель учится.
Вы также можете точно настроить параметры оптимизатора, чтобы улучшить производительность модели. Регулировка скорости обучения устанавливает размер шагов при обновлении параметров. Для стабильности вы можете начать с умеренной скорости обучения и постепенно уменьшать ее с течением времени, чтобы улучшить долгосрочное обучение. Кроме того, установка momentum определяет, какое влияние прошлые обновления оказывают на текущие обновления. Распространенное значение для momentum составляет около 0,9. Обычно это обеспечивает хороший баланс.
Распространенные оптимизаторы
Разные оптимизаторы имеют различные сильные и слабые стороны. Давайте взглянем на несколько распространенных оптимизаторов.
-
SGD (Stochastic Gradient Descent) — стохастический градиентный спуск:
- Обновляет параметры модели, используя градиент функции потерь по отношению к параметрам.
- Простой и эффективный, но может медленно сходиться и застревать в локальных минимумах.
-
Adam (Adaptive Moment Estimation):
- Сочетает в себе преимущества SGD с моментом и RMSProp.
- Регулирует скорость обучения для каждого параметра на основе оценок первого и второго моментов градиентов.
- Хорошо подходит для зашумленных данных и разреженных градиентов.
- Эффективен и обычно требует меньшей настройки, что делает его рекомендуемым оптимизатором для YOLO11.
-
RMSProp (Root Mean Square Propagation) — распространение среднеквадратичного отклонения:
- Регулирует скорость обучения для каждого параметра, разделяя градиент на скользящее среднее значений последних градиентов.
- Помогает в решении проблемы исчезающего градиента и эффективен для рекуррентных нейронных сетей.
Для YOLO11 параметр optimizer
позволяет выбирать из различных оптимизаторов, включая SGD, Adam, AdamW, NAdam, RAdam и RMSProp, или вы можете установить его в auto
для автоматического выбора на основе конфигурации модели.
Связь с сообществом
Участие в сообществе энтузиастов компьютерного зрения поможет вам решать проблемы и быстрее учиться. Вот несколько способов связаться, получить помощь и поделиться идеями.
Ресурсы сообщества
- GitHub Issues: Посетите репозиторий YOLO11 на GitHub и используйте вкладку Issues, чтобы задавать вопросы, сообщать об ошибках и предлагать новые функции. Сообщество и мейнтейнеры очень активны и готовы помочь.
- Сервер Ultralytics Discord: Присоединяйтесь к серверу Ultralytics Discord, чтобы общаться с другими пользователями и разработчиками, получать поддержку и делиться своим опытом.
Официальная документация
- Документация Ultralytics YOLO11: Ознакомьтесь с официальной документацией YOLO11 для получения подробных руководств и полезных советов по различным проектам компьютерного зрения.
Использование этих ресурсов поможет вам решать задачи и быть в курсе последних тенденций и практик в сообществе компьютерного зрения.
Основные выводы
Обучение моделей компьютерного зрения включает в себя следование передовым практикам, оптимизацию стратегий и решение возникающих проблем. Такие методы, как настройка размеров пакетов, обучение со смешанной точностью и начало с предварительно обученных весов, могут улучшить работу ваших моделей и ускорить обучение. Методы, такие как обучение на подмножествах и ранняя остановка, помогают сэкономить время и ресурсы. Поддержание связи с сообществом и следование новым тенденциям помогут вам постоянно совершенствовать свои навыки обучения моделей.
Часто задаваемые вопросы
Как улучшить использование GPU при обучении большой выборки данных с помощью Ultralytics YOLO?
Чтобы улучшить использование GPU, установите batch_size
параметру в вашей конфигурации обучения до максимального размера, поддерживаемого вашим GPU. Это гарантирует, что вы в полной мере используете возможности GPU, сокращая время обучения. Если вы столкнулись с ошибками памяти, постепенно уменьшайте размер пакета, пока обучение не будет проходить гладко. Для YOLO11 установка batch=-1
в вашем скрипте обучения автоматически определит оптимальный размер пакета для эффективной обработки. Для получения дополнительной информации обратитесь к конфигурации обучения.
Что такое обучение со смешанной точностью и как его включить в YOLO11?
Обучение со смешанной точностью использует как 16-битные (FP16), так и 32-битные (FP32) типы данных с плавающей точкой для балансировки вычислительной скорости и точности. Этот подход ускоряет обучение и снижает использование памяти без ущерба для модели. точность. Чтобы включить обучение со смешанной точностью в YOLO11, установите amp
параметр в True
в вашей конфигурации обучения. Это активирует Automatic Mixed Precision (AMP) обучение. Для получения более подробной информации об этом методе оптимизации, смотрите конфигурации обучения.
Как многомасштабное обучение повышает производительность модели YOLO11?
Многомасштабное обучение повышает производительность модели за счет обучения на изображениях различных размеров, что позволяет модели лучше обобщать данные в разных масштабах и на разных расстояниях. В YOLO11 вы можете включить многомасштабное обучение, установив scale
параметр в конфигурации обучения. Например, scale=0.5
уменьшает размер изображения вдвое, в то время как scale=2.0
удваивает его. Этот метод имитирует объекты на разных расстояниях, делая модель более устойчивой в различных сценариях. Для настроек и получения дополнительной информации ознакомьтесь с конфигурации обучения.
Как использовать предварительно обученные веса для ускорения обучения в YOLO11?
Использование предварительно обученных весов может значительно ускорить обучение и повысить точность модели, используя модель, уже знакомую с основными визуальными признаками. В YOLO11 просто установите pretrained
параметр в True
или укажите путь к вашим собственным предварительно обученным весам в конфигурации обучения. Этот метод, называемый transfer learning (перенос обучения), позволяет эффективно адаптировать модели, обученные на больших наборах данных, к вашему конкретному приложению. Узнайте больше о том, как использовать предварительно обученные веса и их преимущества в руководство по конфигурации обучения.
Какое количество эпох рекомендуется для обучения модели и как установить это значение в YOLO11?
Количество эпох относится к полным проходам через обучающий набор данных во время обучения модели. Типичная отправная точка - 300 эпох. Если ваша модель переобучается на ранней стадии, вы можете уменьшить это число. В качестве альтернативы, если переобучение не наблюдается, вы можете продлить обучение до 600, 1200 или более эпох. Чтобы установить это в YOLO11, используйте epochs
параметр в вашем скрипте обучения. Для получения дополнительных советов по определению идеального количества эпох обратитесь к этому разделу о количестве эпох.