В этом тематическом исследовании мы рассмотрим процесс тонкой настройки предварительно обученной модели YOLOv8-seg для повышения ее точности для конкретных классов объектов. Ikomia API упрощает разработку рабочих процессов компьютерного зрения и позволяет легко экспериментировать с различными параметрами для достижения наилучших результатов.
Начните работу с API Ikomia
С помощью API Ikomia мы можем обучить пользовательскую модель сегментации экземпляра YOLOv8 с помощью всего лишь нескольких строк кода. Для начала вам необходимо установить API в виртуальной среде.
Как установить виртуальную среду
pip install ikomia
В этом уроке мы будем использовать набор данных о кораллах из 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.