Как использовать DeepLab в TensorFlow для сегментации объектов с помощью глубокого обучения

1656531968 kak ispolzovat deeplab v tensorflow dlya segmentaczii obektov s pomoshhyu

автором Beeren Sahu

Изменение кода DeepLab для обучения на собственном наборе данных для сегментации объектов в изображениях

1*mfz-HW5TIBU0AvprtApydQ
Фото Ника Карвуниса на Unsplash

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

DeepLab – идеальное решение для семантической сегментации. Код доступен в TensorFlow.

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

Что такое DeepLab?

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

Установка

Реализация DeepLab в TensorFlow доступна на GitHub здесь.

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

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

  • Обучение модели с нуля: Вы можете иметь любое количество классов объектов (количество меток) для сегментации. Это требует очень долгого времени для обучения.
  • Используйте предварительно обученную модель: можно иметь любое количество классов объектов для сегментации. Используйте предварительно подготовленную модель и обновляйте весы классификатора только с помощью переноски. Это займет гораздо меньше времени на обучение по сравнению с предыдущим сценарием.

Давайте назовем ваш новый набор данных как PQR. Создайте новую папку «PQR» как: tensorflow/models/research/deeplab/datasets/PQR.

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

Создайте папку с названием набор данных внутри PQR. Он должен иметь следующую структуру каталогов:

+ dataset    -JPEGImages    -SegmentationClass    -ImageSets+ tfrecord

Изображение JPEGI

Он содержит все входящие цветные изображения *.jpg формат.

0*M5PBchudNjWPqxPP
Образец входного изображения из набора данных PASCAL VOC

SegmentationClass

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

Эти изображения должны быть проиндексированы цветом. Каждый цветовой индекс представляет собой уникальный класс (с уникальным цветом), известный как карта цветов.

0*OjQiFBSrKsYnZzGS
Образец карты цветов [source: https://github.com/DrSleep/tensorflow-deeplab-resnet]

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

0*L3AEyxEId0-95rRq
Образец семантической сегментации на основе изображения правды из набора данных PASCAL VOC

Набор изображений

Эта папка содержит:

  • train.txt: список имен изображений для учебного набора
  • val.txt: список имен изображений для набора проверки
  • trainval.txt: список имен изображений для обучения + набор проверок

Образец *.txt файл выглядит примерно так:

pqr_000032pqr_000039pqr_000063pqr_000068pqr_000121

Удалите цветовую карту в инструкциях наземной правды

Если ваши изображения аннотации сегментации являются изображениями RGB, а не цветными индексированными изображениями. Вот скрипт Python, который пригодится.

Здесь палитра определяет пару RGB:LABEL. В этом примере кода (0,0,0):0 – это фон, а (255,0,0):1 – класс переднего плана. Обратите внимание, что new_label_dir — это место, где хранятся исходные данные сегментации.

Далее задача состоит в преобразовании набора данных изображения в запись TensorFlow. Сделайте новую копию файла сценария./dataset/download_and_convert_voc2012.sh как ./dataset/convert_pqr.sh. Ниже приведен измененный скрипт.

Преобразованный набор данных будет сохранен по адресу ./deeplab/datasets/PQR/tfrecord

Определение описания набора данных

Откройте файл segmentation_dataset.py присутствуют в исследование/deelab/наборы данных/ папку. Добавьте следующий сегмент кода, определяющий описание вашего набора PQR данных.

_PQR_SEG_INFORMATION = DatasetDescriptor(    splits_to_sizes={        'train': 11111, # number of file in the train folder        'trainval': 22222,        'val': 11111,    },    num_classes=2, # number of classes in your dataset    ignore_label=255, # white edges that will be ignored to be class)

Внесите следующие изменения, как показано ниже:

_DATASETS_INFORMATION = {    'cityscapes': _CITYSCAPES_INFORMATION,    'pascal_voc_seg': _PASCAL_VOC_SEG_INFORMATION,    'ade20k': _ADE20K_INFORMATION,    'pqr': _PQR_SEG_INFORMATION}

Обучение

Чтобы обучить модель на вашем наборе данных, нужно запустить файл train.py в файле исследование/deelab/ папку. Итак, мы написали файл сценария train-pqr.sh для выполнения задания за вас.

Здесь мы использовали xception_65 для вашего местного обучения. Вы можете указать количество обучающих итераций для переменной NUM_ITERATIONS. и установите « — tf_initial_checkpoint» в место, где вы загрузили или предварительно научили модель *.ckpt. После обучения окончательную обученную модель можно найти в каталоге TRAIN_LOGDIR.

Наконец запустите приведенный выше сценарий из каталога …/research/deelab.

# sh ./train-pqr.sh

Вуаль! Вы успешно научили DeepLab на своем наборе данных.

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

Добавить комментарий

Ваш адрес email не будет опубликован.