В этом тематическом исследовании мы рассмотрим процесс тонкой настройки предварительно обученной модели YOLOv8-seg для повышения ее точности для конкретных классов объектов. Ikomia API упрощает разработку рабочих процессов компьютерного зрения и позволяет легко экспериментировать с различными параметрами для достижения наилучших результатов.

Начните работу с API Ikomia

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

Как установить виртуальную среду

pip install ikomia

API-документация

API-репо

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

Запустите алгоритм сегментации экземпляра поезда YOLOv8 с помощью нескольких строк кода.

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

from ikomia.dataprocess.workflow import Workflow


# Initialize the workflow
wf = Workflow()

# Add the dataset loader to load your custom data and annotations
dataset = wf.add_task(name='dataset_coco')

# Set the parameters of the dataset loader
dataset.set_parameters({
    'json_file': 'Path/To/Mesophotic Coral/Dataset/train/_annotations.coco.json',
    'image_folder': 'Path/To/Mesophotic Coral/Dataset/train',
    'task': 'instance_segmentation',
}) 

# Add the YOLOv8 segmentation algorithm
train = wf.add_task(name='train_yolo_v8_seg', auto_connect=True)

# Set the parameters of the YOLOv8 segmentation algorithm
train.set_parameters({
    'model_name': 'yolov8m-seg',
    'batch_size': '4',
    'epochs': '50',
    'input_size': '640',
    'dataset_split_ratio': '0.8',
    'output_folder':'Path/To/Folder/Where/Model-weights/Will/Be/Saved'
})

Процесс обучения для 50 эпох был завершен примерно за 1 час с использованием графического процессора для ноутбука NVIDIA GeForce RTX 3060 с 6143,5 МБ памяти.

Что такое сегментация экземпляра YOLOv8?

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

Что такое сегментация экземпляров?

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

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

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

Многие современные алгоритмы сегментации экземпляров, такие как YOLOv8-seg, используют методы глубокого обучения, в частности, сверточные нейронные сети (CNN), для одновременного выполнения попиксельной классификации и локализации объектов. Эти алгоритмы часто сочетают в себе сильные стороны обнаружения объектов и семантической сегментации для достижения точных результатов сегментации на уровне экземпляра.

Обзор YOLOv8

Релиз и преимущества

YOLOv8, разработанная компанией Ultralytics, представляет собой модель, которая специализируется на задачах обнаружения объектов, классификации изображений и сегментации экземпляров. Он известен своей точностью и компактными размерами, что делает его заметным дополнением к серии YOLO, которая добилась успеха благодаря YOLOv5. Благодаря улучшенной архитектуре и удобным для пользователя улучшениям YOLOv8 предлагает отличный вариант для проектов компьютерного зрения.

Архитектура и инновации

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

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

Программа тренировок и дополнения

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

Точность и производительность

Повышение точности YOLOv8 было подтверждено широко используемым тестом COCO, где модель достигла впечатляющих средних показателей средней точности (mAP). Например, модель YOLOv8m-seg достигает замечательного показателя MAP 49,9% на COCO. В следующей таблице представлена ​​сводная информация о размерах модели, показателях mAP и других показателях производительности для различных вариантов YOLOv8-сегмента:

Вот пример результатов использования моделей обнаружения YOLOv8x и сегментации экземпляров:

Шаг за шагом: точная настройка предварительно обученной модели YOLOv8-сегмента с помощью Ikomia API

С помощью загруженного вами набора данных аэрофотоснимков вы можете обучить пользовательскую модель YOLO v7 с помощью API Ikomia.

Шаг 1: импортируйте и создайте рабочий процесс

from ikomia.dataprocess.workflow import Workflow

wf = Workflow()
  • Рабочий процесс — это базовый объект для создания рабочего процесса. Он предоставляет методы для настройки входных данных, таких как изображения, видео и каталоги, настройки параметров задачи, получения показателей времени и доступа к конкретным выводам задачи, таким как графика, маски сегментации и тексты.

Мы инициализируем экземпляр рабочего процесса. Объект «wf» затем можно использовать для добавления задач в экземпляр рабочего процесса, настройки их параметров и запуска их на входных данных.

Шаг 2: добавьте загрузчик набора данных

Загруженный набор данных COCO включает в себя два основных формата: .JSON и файлы изображений. Изображения разделены на папки train, val, test, каждая из которых связана с файлом .json, содержащим аннотации к изображениям:

  • Имя файла изображения
  • Размер изображения (ширина и высота)
  • Список объектов со следующей информацией: Класс объекта (например, человек, автомобиль); Координаты ограничивающего прямоугольника (x, y, ширина, высота) и маска сегментации (многоугольник)

Мы будем использовать модуль dataset_coco, предоставленный Ikomia API, для загрузки пользовательских данных и аннотаций.

# Add the dataset loader to load your custom data and annotations
dataset = wf.add_task(name='dataset_coco')

# Set the parameters of the dataset loader
dataset.set_parameters({
    'json_file': 'Path/To/Mesophotic Coral/Dataset/train/_annotations.coco.json',
    'image_folder': 'Path/To/Mesophotic Coral/Dataset/train,
    'task': 'instance_segmentation'
})

Шаг 3: добавьте модель сегментации YOLOv8 и задайте параметры.

Мы добавляем задачу «train_yolo_v8_seg» в наш рабочий процесс для обучения нашей пользовательской модели YOLOv8-seg. Чтобы настроить наше обучение, мы указываем следующие параметры:

# Add the YOLOv8 segmentation algorithm
train = wf.add_task(name='train_yolo_v8_seg', auto_connect=True)

# Set the parameters of the YOLOv8 segmentation algorithm
train.set_parameters({
    'model_name': 'yolov8m-seg',
    'batch_size': '4',
    'epochs': '50',
    'input_size': '640',
    'dataset_split_ratio': '0.8',
    'output_folder':'Path/To/Folder/Where/Model-weights/Will/Be/Saved'
})

Вот настраиваемые параметры и их соответствующие описания:

  • batch_size: количество образцов, обработанных перед обновлением модели.
  • эпохи: количество полных проходов через набор обучающих данных.
  • input_size: размер входного изображения во время обучения и проверки.
  • dataset_split_ratio: алгоритм автоматически делит набор данных на обучающий и оценочный наборы. Значение 0,8 означает использование 80% данных для обучения и 20% для оценки.

У вас также есть возможность изменить следующие параметры:

  • рабочие: количество рабочих потоков для загрузки данных. В настоящее время установлено значение «0».
  • оптимизатор: используемый оптимизатор. Доступные варианты: SGD, Adam, Adamax, AdamW, NAdam, RAdam, RMSProp и auto.
  • weight_decay: снижение веса для оптимизатора. В настоящее время установлено значение «5e-4».
  • импульс: значение импульса SGD/бета1 Адама. В настоящее время установлено значение «0,937».
  • lr0: начальная скорость обучения. Для SGD установлено значение 1E-2, а для Адама — 1E-3.
  • lrf: конечная скорость обучения, рассчитываемая как lr0 * lrf. В настоящее время установлено значение «0,01».

Шаг 4. Запустите рабочий процесс

Наконец, мы запускаем рабочий процесс, чтобы начать процесс обучения.

wf.run()

Вы можете отслеживать ход своего обучения с помощью таких инструментов, как Tensorboard или MLflow.

После завершения обучения задача train_yolo_v8_seg сохранит лучшую модель в папке с отметкой времени внутри выходной_папки. Вы можете найти свою модель best.pt в папке Weights папки с отметкой времени.

Проверьте свою точно настроенную модель YOLOv8-сегмента.

Во-первых, можем ли мы запустить изображение коралла на предварительно обученной модели YOLOv8-seg:

from ikomia.dataprocess.workflow import Workflow
from ikomia.utils.displayIO import display


# Initialize the workflow
wf = Workflow()

# Add the YOLOv8 segmentation alrogithm
yolov8seg = wf.add_task(name='infer_yolo_v8_seg', auto_connect=True)

# Set the parameters of the YOLOv8 segmentation algorithm
yolov8seg.set_parameters({
    'model_name': 'yolov8m-seg',
    'conf_thres': '0.2',
    'iou_thres': '0.7'
}) 

# Run on your image
wf.run_on(path="Path/To/Mesophotic Coral Identification.v1i.coco-segmentation/valid/TCRMP20221021_clip_LBP_T109_jpg.rf.a4cf5c963d5eb62b6dab06b8d4b540f2.jpg")

# Inspect your results
display(yolov8seg.get_image_with_mask_and_graphics())

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

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

# Set the path of you custom YOLOv8-seg model to the parameter
yolov8seg.set_parameters({
    'model_weight_file': 'Path/To/Output_folder/[timestamp]/train/weights/best.pt',
    'conf_thres': '0.5',
    'iou_thres': '0.7'
})

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

Другой пример, демонстрирующий эффективные результаты обнаружения, продемонстрирован на примере вида Agaricia agaricites:

Начните обучение легко с Ikomia

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