Введение

В методах обнаружения объектов объект выделяется ограничивающей рамкой, где ограничивающая рамка представлена ​​четырьмя точками пикселей. Метод сегментации экземпляра переводит аннотацию изображений на новый уровень. Где он использует пиксельный уровень для выделения объекта. Маска экземпляра содержит несколько точек в пикселях в качестве координат, которые выделяют контур объекта для его обнаружения. YOLACT (You Only Look At CoefficienTs) - это одноэтапная модель сегментации экземпляров в реальном времени, разработанная для обнаружения экземпляров объектов и пиксельных сегментированных масок. (Ссылка на статью: YOLACT: Сегментация экземпляров в реальном времени) Авторы упомянули, что модель достигла 29,8 MAP на MS COCO при 33,5 кадрах в секунду на одном Titan XP. В этом посте мы расскажем, как подготовить собственный набор данных, например для сегментации, и обучить его на YOLACT.

Подготовка данных

Сбор данных

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

Аннотация изображения

Я использовал инструмент аннотации изображений labelme для процесса маркировки данных. Пожалуйста, скачайте и установите ярлык мне по следующей ссылке. Я предпочитаю labelme, который прост в использовании, и они дали хороший пример, например, сегментации (labelme-Instance Segmentation Example). Перед процессом аннотации создайте файл labels.txt с именами классов, добавьте __ignore__ и _background_ в качестве первых двух строк файла. Затем выполните следующую команду, чтобы запустить labelme.

labelme <image_folder> --labels labels.txt --autosave

Используйте создание многоугольников для аннотирования изображений, и он будет генерировать файл JSON для каждого аннотированного изображения в папке изображений.

Я создаю отдельные наборы данных для обучения и проверки. После процесса аннотации набор данных должен преобразоваться в формат COCO JSON. Для этого процесса запустите сценарий labelme2coco.py из Пример сегментации labelme-Instance

./labelme2coco.py <input_folder> <output_folder> --labels labels.txt

После этого процесса он создаст файл JSON в формате COCO с аннотированными изображениями в выходной папке.

Тренировочный процесс

Для процесса обучения клонируйте репозиторий YOLACT Github с https://github.com/dbolya/yolact и следуйте инструкциям по установке из репозитория. Я установил анаконду с PyTorch 1.4.0 и torchvision 0.5.0 в качестве своей среды в Ubuntu 20.04.2 LTS.

Конфигурация набора данных

Для конфигурации набора данных откройте файл yolact / data / config.py и перейдите в раздел «НАБОРЫ ДАННЫХ». Создайте копию из dataset_base и настройте ее для набора таможенных данных. Я настроил его согласно своему набору данных. Задайте путь «train_images» к папке с обучающими изображениями, а путь «valid_images» - к папке с изображениями для проверки. Кроме того, установите путь «train_info» к файлу аннотации поезда и путь «valid_info» к файлу аннотации проверки. Здесь я использовал два класса для обучения и установил ‘class_names’ с ярлыками классов.

# ----------------------- DATASETS ----------------------- #
.
.
.
leaves_dataset = dataset_base.copy({
'name': 'Leaves_Dataset',
'train_images':'Input_data/Train_Images',
'train_info':'Input_data/train_annotations.json',
'valid_images': 'Input_data/Valid_Images',
'valid_info':   'Input_data/valid_annotations.json',
'class_names': ('defective', 'non_defective'),
})

Конфигурация модели

После процесса настройки набора данных мы должны настроить модель. Они предоставили имэдженет предварительно обученные модели для тренировочного процесса. Ознакомьтесь с обучающим разделом в репозитории YOLACT, где есть предварительно обученные модели. Resnet101, Resnet50 и Darknet53 - это предварительно обученные модели, которые они предоставили. В этом тренировочном процессе я использовал предварительно обученную модель Darknet53. Вы можете скачать модели по указанным ссылкам в репозитории. После загрузки поместите его в папку weights. Затем перейдите в раздел YOLACT v1.0 CONFIGS в файле yolact / data / config.py и настройте конфигурацию модели. Здесь я использовал Darknet53 в качестве базовой архитектуры, поэтому для конфигурации модели использовался yolact_darknet53_config. Задайте для набора данных имя набора данных, которое использовалось на предыдущем шаге. Если вам нужно, вы можете использовать Resnet50 или Resnet101 в качестве базовой архитектуры, и вам необходимо изменить конфигурацию модели в соответствии с моделью. Здесь ‘max_size’ представляет размер изображения.

# ----------------------- YOLACT v1.0 CONFIGS -------------------- #
.
.
.
yolact_darknet53_leaves_config = yolact_darknet53_config.copy({
'name': "leaves_detection",
'dataset': leaves_dataset,
'num_classes': len(leaves_dataset.class_names) + 1,
'max_size': 416,
})

После настройки модели откройте файл yolact / train.py. Здесь вы можете изменить параметры для обучения или запустить python train.py --help , чтобы просмотреть описание аргументов. Они дали хорошее объяснение этим аргументам. Если вы хотите использовать параметры по умолчанию, выполните следующую команду для обучения с аргументом config. Вы должны указать имя конфигурации модели в качестве аргумента config.

python train.py --config=yolact_darknet53_leaves_custom_config 

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

На обучение уйдет какое-то время. Спустя несколько эпох я исключил тренировочный процесс. Потому что результат был достаточно хорош для набора данных проверки. После прерывания файл веса будет сохранен в папке весов. Вы можете использовать этот файл веса для оценки. Выполните следующую команду для процесса оценки.

python eval.py --trained_model=weights/leaves_detection_185_1782_interrupt.pth --config=yolact_darknet53_leaves_custom_config --score_threshold=0.60 --images=test_images:output_images

Если вы хотите добиться лучших результатов или продолжить тренировку после перерыва, вы можете возобновить тренировку с предыдущих весов. Посетите репозиторий YOLACT на github для получения дополнительной информации.