Вы можете обучать DeepLab v3 + на исходном наборе данных.
Используйте официальную модель TensorFlow.
Как пользоваться DeepLab, в основном написано в официальном репозитории.
Если у вас есть вопросы, пожалуйста, прочтите эту статью.

Изображения выше представляют собой набор данных PASCAL VOC, но вы можете тренироваться с вашим собственным набором данных.

Процедура

Шаг 1. Установите модель и модуль

1. Клонируйте официальный репозиторий моделей.

git clone https://github.com/tensorflow/models

2. Работа в исследовательском каталоге.

cd models/research

3. Выберите TensorFlow1 при работе с Colab.

%tensorflow_version 1.x

4. Установите tf_slim.

pip install tf_slim

Необходимые модули:

Numpy
Pillow 1.0
tf Slim (который включен в раздел "tensorflow / models / research /")
Matplotlib
Tensorflow

Если нет, установите их.

5. Добавьте каталог tensorflow / models / research / в PYTHONPATH, чтобы вы могли использовать библиотеку.

# From tensorflow/models/research/export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

2. Подготовьте данные

Подготовьте следующее.

1, Исходные изображения

2, изображения класса

Требования к изображению

  • Соберите каждый из них в каталог.
    Имя каталога исходных изображений: JPEGImage
    Имя каталога изображений класса: SegmentationClass
    -Сделайте количество и имена исходных изображений и изображений классов (имя без расширения) одинаковыми .
    -Размер изображения произвольный. Имейте в виду, что во время тренировки оно будет обрезано до 513 513.
    (Если вы хотите уместить все изображение, мы рекомендуем 513 513 или меньше)

Для создания данных сегментации можно использовать такие инструменты, как labelme.

3. Предварительно обработайте данные.

  1. Если изображение этикетки цветное, используйте черно-белое изображение этикетки.
mkdir "{DataDirectory}/SegmentationClassRaw"

python deeplab/datasets/remove_gt_colormap.py \
 --original_gt_folder= "{DataDirectory}/SegmentationClass"\
 --output_dir="{DataDirectory}/SegmentationClassRaw"

Черно-белое преобразованное изображение сохраняется в каталоге SegmentationClassRaw.
Это черно-белое изображение с небольшим значением метки, поэтому оно почти черное.

2. Создайте текстовый файл со списком имен файлов изображений.

изображение0
изображение1
изображение3

Создайте текстовый файл со списком имен файлов в формате без расширения.
Создайте следующие 3 текстовых файла.
1, trainval.txt: все имена файлов изображений
2, train. txt: обучающий набор (назначить около 90% trainval?)
3. val.txt: из trainval.txt, набор внутренней проверки (выделить около 10% trainval?)

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

3. Сделайте набор данных в формате TFRecord.

Сделайте набор данных в формате TFRcord, который можно будет эффективно читать при обучении в TensorFlow.

python deeplab/datasets/build_voc2012_data.py \
  --image_folder="{DataDirectory}/JPEGImages" \
  --semantic_segmentation_folder="{DataDirectory}/SegmentationClassRaw" \
  --list_folder="{DataDirectory}//ImageSets/Segmentation" \
  --image_format="jpg" \
  --output_dir="{DataDirectory}/tfrecord/"

4. Настроить обучение.

  1. Перепишите deeplab / datasets / data_generator.py согласно вашим собственным данным.
_PASCAL_VOC_SEG_INFORMATION = DatasetDescriptor(
    splits_to_sizes={
        'train': 4552, # Rewrite to the number of training image files
        'train_aug': 10582, # OK as it is
        'trainval': 5088, # Rewrite to the total number of image files
        'val': 536, # Rewrite to the number of verification image files
    },
    num_classes=21, # OK as it is
    ignore_label=255, # OK as it is
)

2. Загрузите предварительно обученную модель.

Используйте веса предварительно обученной модели для трансферного обучения.
Загрузите понравившуюся контрольную точку из ссылки на официальный репозиторий.
Есть база MobileNetv2 (22 МБ) и база Xception (439 МБ).

5, обучение

  1. В случае магистрали MobileNet v2
python deeplab/train.py --logtostderr \
   --training_number_of_steps=30000 \
   --train_split="train" \
   --model_variant="mobilenet_v2" \
   --output_stride=16 \
   --decoder_output_stride=4 \
   --train_crop_size="513,513" \
   --train_batch_size=1 \
   --dataset="pascal_voc_seg" \
   --tf_initial_checkpoint="{CheckpointDirectory}/deeplabv3_mnv2_pascal_train_aug/model.ckpt-30000" \
   --train_logdir="{DataDirectory}/checkpoint" \ # Create a checkpoint write destination directory first
   --dataset_dir="{DataDirectory}/tfrecord" \
   --fine_tune_batch_norm=false \ # If using CPU only, set ”true”.
   --initialize_last_layer=true \
   --last_layers_contain_logits_only=false

2. В случае с магистралью Xception_65

python deeplab/train.py --logtostderr \
   --training_number_of_steps=30000 \
   --train_split="train" \
   --model_variant="xception_65" \
   --atrous_rates=6 \
   --atrous_rates=12 \
   --atrous_rates=18 \
   --output_stride=16 \
   --decoder_output_stride=4 \
   --train_crop_size="513,513" \
   --train_batch_size=1 \
   --dataset="pascal_voc_seg" \
   --tf_initial_checkpoint="{CheckpointDirectory}/deeplabv3_pascal_train_aug/model.ckpt" \
   --train_logdir="{DataDirectory}/checkpoint" \ # Create a checkpoint write destination directory first
   --dataset_dir="{DataDirectory}/tfrecord" \
   --fine_tune_batch_norm=false \# If using CPU only, set ”true”.
   --initialize_last_layer=true \
   --last_layers_contain_logits_only=false

* Справочный результат

После обучения с использованием 5000 изображений, 30000 эпох, магистрали MobileNetv2 и графического процессора Colab потребовалось около 1 часа.
Результат был очень удовлетворительным, вероятно, потому, что был только один объект (2 метки), который я хотел сегментировать.

6, тест

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

python deeplab/vis.py --logtostderr \
  --vis_split="val" \
  --model_variant="mobilenet_v2" \
  --output_stride=16 \
  --decoder_output_stride=4 \
  --vis_crop_size="513,513" \
  --dataset="pascal_voc_seg" \
  --checkpoint_dir="{CheckpointDirectory}/checkpoint" \
  --vis_logdir="{Directory path to write the result images}" \
  --dataset_dir="{DataDirectory}/tfrecord" \
  --max_number_of_iterations=1 --eval_interval_secs=0

🐣

****

Запрос на работу:

[email protected]