И следим за нашими результатами в Comet

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

Давайте рассмотрим сегментацию изображений, ограничения моделей сегментации и процесс тонкой настройки YOLOv8 для сегментации изображений.

Следуйте полному руководству по коду здесь!

Что такое сегментация изображения?

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

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

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

Зачем точно настраивать модель?

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

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

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

Тонкая настройка модели дает следующие преимущества.

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

Ограничения моделей сегментации изображений

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

  • Обработка неструктурированных и неравномерно распределенных 3D-данных. С появлением оборудования для получения изображений, такого как камеры LiDAR, растет потребность в методах сегментации 3D-данных, таких как облака точек, воксели и т. д. Однако представление и обработка этих неструктурированных, неупорядоченных, избыточных и неравномерно распределенных трехмерных данных остается серьезной проблемой для алгоритмов сегментации.
  • Ограниченная доступность помеченных наборов данных. В некоторых областях существует нехватка наборов данных с подробными аннотациями, что затрудняет обучение сетей сегментации с использованием алгоритмов обучения с учителем.
  • Вычислительная сложность и производительность в реальном времени.Сети глубокого обучения, используемые для сегментации изображений, требуют значительных вычислительных ресурсов из-за их вычислительной сложности во время обучения. Достижение сегментации в реальном времени, необходимой в различных областях, таких как обработка видео, которая нацелена на не менее 25 кадров в секунду, остается сложной задачей.
  • Ограниченная способность обрабатывать шумы и изменения качества изображения. Многие алгоритмы сегментации изображений чувствительны к шуму и изменениям качества изображения, что затрудняет получение точных результатов на изображениях низкого качества или низкого разрешения.

Что такое YOLOv8: краткое объяснение

YOLOv8, сокращение от You Only Look Once version 8, представляет собой современную модель, которую можно использовать для классификации изображений, обнаружения объектов и задач сегментации экземпляров. Это эволюция семейства моделей YOLO, известных своими возможностями обнаружения объектов в реальном времени.

YOLOv8 представляет значительные архитектурные достижения и опыт разработчиков, которые отличают его от своего предшественника, YOLOv5. Ключевые улучшения YOLOv8 включают

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

YOLOv8 можно запустить из интерфейса командной строки (CLI) или установить как пакет PIP для облегчения использования. Кроме того, он обеспечивает несколько интеграций для маркировки, обучения и развертывания, что еще больше оптимизирует рабочий процесс.

При оценке набора данных MS COCO test-dev 2017 YOLOv8x достиг впечатляющей средней точности (AP) 53,9% с размером изображения 640 пикселей, превысив 50,7%, достигнутый YOLOv5 при том же размере входных данных. Кроме того, YOLOv8x демонстрирует скорость 280 кадров в секунду на NVIDIA A100 и TensorRT, что подчеркивает его эффективность и вычислительную производительность.

Тонкая настройка модели YOLOv8 с кометой

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

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

Этот эксперимент был проведен в среде Google Colab со средой выполнения GPU.

Исследование данных

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

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

Предварительно обученный эксперимент

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

Сначала устанавливаем необходимые библиотеки.

!pip install ultralytics comet_ml torch torchvision kaggle --quiet

Пакет ultralytics позволит нам получить доступ к моделям YOLOv8, comet_ml позволит нам инициировать эксперименты на платформе кометы, а torch и torchvision необходимы для необходимого импорта в YOLOv8.

Далее импортируем необходимые пакеты.

import comet_ml
from ultralytics import YOLO
import os
from google.colab import files

Сначала мы импортируем наш набор данных из Kaggle. Для этого нам потребуется токен Kaggle API и соответствующий URI набора данных. Чтобы получить доступ к набору данных, вам нужно будет создать и загрузить свой собственный токен Kaggle в рабочую область Colab. Как только это будет сделано, вы можете получить доступ к набору данных, выполнив следующую команду.

!kaggle datasets download haziqasajid5122/yolov8-finetuning-dataset-ducks
!unzip yolov8-finetuning-dataset-ducks -d /content/Data
!cp /content/Data/config.yaml /content/config.yaml

Для проведения экспериментов с comet_ml нам нужен ключ API. Возьмите свой ключ API из бесплатной учетной записи Comet. Вы можете найти ключ API в разделе Account Settings -> API Keys.

Самый простой способ использовать этот ключ — установить его в качестве переменной среды.

os.environ[“COMET_API_KEY”] = “<YOUR_API_KEY_HERE>”

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

comet_ml.init(“YOLOv8-With-Comet”)

Далее нам нужно выбрать предварительно обученную модель YOLO. По умолчанию ultralytics включает несколько моделей для каждой задачи с разными размерами. Модуль сегментации включает в себя

  • YOLOv8n-seg
  • YOLOv8s-seg
  • YOLOv8m-seg
  • YOLOv8l-seg
  • YOLOv8x-сегмент

Полную информацию о моделях можно найти в официальной документации.

Мы будем использовать модель YOLOv8m-seg (средняя), поскольку она должна обеспечивать баланс между эффективностью обучения и результатами.

model = YOLO(‘yolov8m-seg.pt’)

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

Теперь давайте посмотрим, как эта модель работает с нашим пользовательским набором данных.

results = model.predict("/content/Data/images/val/0a411d151f978818.png", save=True)

Наши эксперименты проводятся в среде Google Colab с подключенным Google Диском, поэтому путь выглядит так. Вам придется изменить путь в соответствии с вашей системой. Теперь вернемся к результатам.

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

Тонкая настройка

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

Вложенная папка «images» содержит все файлы «.png», а каталог labels содержит аннотации в формате «.txt».

YOLO также ожидает файл `.yaml`, который содержит сведения о путях для набора данных и метках классов в наборе данных. Полную информацию о пользовательских наборах данных можно найти в руководстве по набору данных. Поскольку у нас есть только один класс в наборе данных, наш файл .yaml содержит следующую информацию.

path: /content/Data
train: images/train
val: images/val

nc: 1
names:
  0: duck

Конфигурации путей для набора данных будут соответствовать вашей системе.

Со всеми необходимыми деталями нам просто нужно начать обучение.

results = model.train(
    data="/content/config.yaml",
    project="YOLOv8-With-Comet",
    batch=12,
    save_json=True,
    epochs=15,
    pretrained=True
)

Как только обучение будет отправлено, Comet автоматически создаст эксперимент в вашем рабочем пространстве Comet для отслеживания выполнения.

Прежде чем перейти к журналам эксперимента, давайте посмотрим, работает ли наша точно настроенная модель так, как ожидалось.

results = model.predict("/content/Data/images/val/0a411d151f978818.png", save=True)

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

Регистрация с кометой

Comet будет отслеживать столько экспериментов, сколько необходимо, и отображать показатели для всех ваших запусков.

На левой панели отображаются все эксперименты (если имя не указано, Comet назначит случайное) и различные метрики, построенные для каждого эксперимента. Давайте посмотрим на наш последний запуск.

Сразу видно, что Comet визуализирует некоторые общие показатели для каждой эпохи. Вот некоторые общие показатели:

  • Потеря маски сегмента (seg_loss)
  • Потеря класса (cls_loss)
  • Точность
  • Средняя средняя точность (mAP50–95)

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

Мы также можем просматривать показатели в отдельной панели.

Это отображает детали в табличном формате для дополнительной точности.

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

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

Более того, Comet также ведет журнал системы, использованной во время эксперимента.

Он отображает такую ​​информацию, как:

  • Использование графического процессора
  • Использование памяти графического процессора
  • Использование ЦП
  • Использование оперативной памяти

Эти метрики помогают отслеживать работоспособность вашей системы и отлаживать сбои экспериментов из-за ошибок ресурсов.

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

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

Последние мысли

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

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

Чтобы ощутить весь потенциал Comet, создайте бесплатную учетную запись сегодня.

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

Независимая от редакции, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и командам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим нашим авторам и не продаем рекламу.

Если вы хотите внести свой вклад, перейдите к нашему призыву к участию. Вы также можете подписаться на получение нашего еженедельного информационного бюллетеня (Еженедельник глубокого обучения), заглянуть в блог Comet, присоединиться к нам в Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов и событий. и многое другое, что поможет вам быстрее создавать более качественные модели машинного обучения.