Моя пользовательская модель, обученная мобильной сети, не показывает никаких результатов. Что я делаю неправильно?

Я начал изучать ML с помощью Tensorflow / Deeplab. Я попробовал с нуля обучить собственную модель для распознавания одежды, используя семантическую сегментацию с вариантом модели mobilenet_v2. Но я не получаю результатов.

Я использую tensorflow / models для экспорта и обучения tfrecord. И deeplab / example код для визуализации и тестирования (переименованный локально в main.py), я изменяю некоторые строки, чтобы получить локальные модели и тестовое изображение.

Я покажу процесс, которому я следовал:

  1. Загрузите 100 изображений JPEG (я знаю, что это не так уж и много, но я думаю, что могу попробовать с этим количеством). Для 1 класса -> рубашки
  2. Создайте класс сегментации PNG для каждого изображения.
  3. Создайте определение наборов изображений для файлов: train (85 имен файлов), trainval (100 имен файлов) и val (15 имен файлов).
    Итак, в моем каталоге "набор данных паскаль" есть папки: ImageSets, JPEGImages и SegmentationClassPNG.
  4. Экспортируйте каталог "pascal dataset" в tfrecord следующим образом (я нахожусь в папке "models-master / research / deeplab / datasets"):

    py build_voc2012_data.py --image_folder="pasc_imgs/JPEGImages" --semantic_segmentation_folder="pasc_imgs/SegmentationClassPNG" --list_folder="pasc_imgs/ImageSets" --image_format="jpg" --output_dir="train/tfrecord" 
    
    • this works fine, it generates *.tfrecord files on "train/tfrecord"
  5. Я редактировал "models-master / research / deeplab / data_generator.py" следующим образом: {'train': 85, 'trainval': 100, 'val': 15}, num_classes = 2.

  6. Now time to start the training, (I'm on "models-master/research/deeplab"). I used 10000 steps, why? I proved with 30000 and takes like 30 hours with no results, so I reduce it with new params. I guess 10000 steps could show me something:
    py train.py --logtostderr  --training_number_of_steps=10000 --train_split="train" --model_variant="mobilenet_v2" --output_stride=16 --decoder_output_stride=4 --train_batch_size=1 --dataset="pascal_voc_seg"  --train_logdir="datasets/train/deeplab_model_mn" --dataset_dir="datasets/train/tfrecord"
    
    • This step takes almost 8 hours (have a tiny GPU, so.. can't use it), and it generates the checkpoint, graph.pbtxt, and model.ckpt-XXX (10000 included) files.
  7. I exported the previous result with (I'm on "models-master/research/deeplab") this command line:
    py export_model.py --checkpoint_path=datasets/train/deeplab_model_mn/model.ckpt-10000 --export_path=datasets/train/deeplab_inference_mn/frozen_inference_graph.pb --model_variant="mobilenet_v2" --output_stride=16 --num_classes=2
    
    • It creates the frozen graph (frozen_inference_graph.pb).
  8. Теперь запустите: py main.py (пробное изображение и файл frozen_inference_graph.pb уже импортированы)
  9. Нет результатов с моей нестандартной моделью. Этот последний скрипт работает с предварительно обученным mobilenetv2_coco_voc_trainaug. Не с моей нестандартной моделью

data_generator.py (отредактированные строки):

_PASCAL_VOC_SEG_INFORMATION = DatasetDescriptor(
    splits_to_sizes={
        'train': 85,
        'trainval': 100,
        'val': 15,
    },
    num_classes=2,# 0:background, 1:shirt
    ignore_label=255,
)

Пример изображения (1/100), который я использую для обучения (я использовал утилиту labelMe):
shirt_001.jpg
shirt_001.png


результат main.py для mobilenetv2_coco_voc_trainaug (рубашка как личность, это нормально) и моей нестандартной модели:
mobilenetv2_coco_voc_trainaug результат
мой пользовательский результат модели

Как видите, моя модель не работает. Я безуспешно тестировал множество комбинаций. Что мне делать? Спасибо!


person Brayan Bonilla    schedule 24.08.2019    source источник
comment
Привет! У вас сейчас такие же результаты? У меня та же проблема, я пытался обучить свою модель с разными масками (с цветами rgb (1,0,0) - ›индексированный цвет, rgb (1, 1, 1) -› индексированный цвет, rgb (128, 0, 0) - ›indexed color, rgb -› bw), но результатов нет (через 2 недели) :(   -  person Daniel Nuzhdin    schedule 19.09.2019
comment
Привет, это последний результат с 90000 training_number_of_steps. - ›результат изображения‹ -   -  person Brayan Bonilla    schedule 01.10.2019


Ответы (1)


Хорошо, у меня была такая же проблема, и после многих попыток я сделал это. Во-первых, вам следует сделать правильные маски. Если вы используете один класс, вы должны создавать маски с индексированной цветовой картой, причем все пиксели должны быть 0 или 1, 0 - фон, 1 - маска (всего 255 цвета в индексированной цветовой карте). Во-вторых, вам нужен больший набор данных. Я пробовал тренироваться с использованием набора данных с ~ 200 изображениями и не получил результатов (даже с правильным набором данных) даже на контрольной точке-30k. Но когда я попробовал тренироваться с использованием набора данных с 450 изображениями, я получил некоторые результаты только для ~ 9000 эпох. После эпохи ~ 18000 улучшений не было, но результаты были правдоподобными (хотя и далекими от идеала). Затем я обучал модель с 1100 изображениями, но результаты были такими же.

person Daniel Nuzhdin    schedule 01.10.2019
comment
Спасибо за ваш ответ. Вы правы, я увеличил свой набор данных на ~ 860 и получил очень хорошие результаты. Я начал брать образцы рубашек. надеюсь, что эта машина дает хорошие результаты, я скоро поделюсь. - person Brayan Bonilla; 14.11.2019