Подтвердить что ты не робот

Обнаружение объекта Tensorflow на своем собственном наборе данных

Проведя пару дней, пытаясь решить эту задачу, я хотел бы поделиться своим опытом, как я пошел, отвечая на вопрос:

Как использовать Обнаружение объектов TS для обучения с использованием моего собственного набора данных?

4b9b3361

Ответ 1

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

Отказ

Этот ответ не должен быть правильным или единственным способом обучения модуля обнаружения объекта. Это просто я делюсь своим опытом и тем, что сработало для меня. Я открыт для предложений и больше узнаю об этом, поскольку я все еще новичок в ML в целом.

TL; DR

  • Создайте собственный набор данных PASCAL VOC
  • Сгенерировать TFRecords из него
  • Настроить конвейер
  • Визуализация

Каждая часть этого ответа состоит из соответствующего редактирования (см. ниже). После прочтения каждого раздела, пожалуйста, прочитайте его "Редактировать", а также для пояснений. Для каждого раздела были добавлены исправления и советы.

Используемые инструменты

LabelImg: инструмент для создания аннотаций формата PASCAL VOC.

1. Создайте свой собственный набор данных PASCAL VOC

PS:. Для простоты соглашение об именах папок моего ответа соответствует простоте Pascal VOC 2012

Загляните в каталог май 2012 г., вы увидите, что папка имеет следующую структуру

+VOCdevkit +VOC2012 +Annotations +ImageSets +Action +Layout +Main +Segmentation +JPEGImages +SegmentationClass +SegmentationObject

В настоящее время внесены изменения в следующие папки:

Аннотации. Это будут все соответствующие XML файлы изображений. Используйте предлагаемый инструмент выше для создания аннотаций. Не беспокойтесь о тегах <truncated> и <difficulty>, поскольку они будут проигнорированы двоичными файлами обучения и eval.

JPEGImages. Расположение фактических изображений. Убедитесь, что они имеют тип JPEG, потому что это то, что в настоящее время поддерживается для создания TFRecords с использованием предоставленных script.

ImageSets- > Main. Это просто состоит из текстовых файлов. Для каждого класса существует соответствующий train.txt, trainval.txt и val.txt. Ниже приведен образец содержимого файла aeroplane_train.txt в папке VOC 2012

2008_000008 -1
2008_000015 -1
2008_000019 -1
2008_000023 -1
2008_000028 -1
2008_000033  1

Структура - это в основном имя изображения, за которым следует логическое выражение, соответствует ли соответствующий объект этому изображению или нет. Возьмем, к примеру, изображение 2008_000008 не состоит из самолета, поэтому помечено знаком -1, но изображение 2008_000033 делает.

Я написал небольшой Python script для создания этих текстовых файлов. Просто проведите по именам изображений и назначьте 1 или -1 рядом с ними для существования объекта. Я добавил случайность среди своих текстовых файлов, перетасовывая имена изображений.

Файлы {classname} _val.txt состоят из наборов данных проверки testing. Подумайте об этом как о тестовых данных во время обучения. Вы хотите разделить свой набор данных на обучение и проверку. Более подробную информацию можно найти здесь. Формат этих файлов аналогичен формату обучения.

В этот момент ваша структура папок должна быть

+VOCdevkit +VOC2012 +Annotations --(for each image, generated annotation) +ImageSets +Main --(for each class, generated *classname*_train.txt and *classname*_val.txt) +JPEGImages --(a bunch of JPEG images)


1.1 Создание карты меток

При подготовке набора данных нам необходимо создать соответствующие карты меток. Перейдите к моделям /object _detection/data и откройте файл pascal_label_map.pbtxt.

Этот файл состоит из JSON, который присваивает каждому элементу идентификатор и имя. Внесите изменения в этот файл, чтобы отразить нужные вам объекты.


2. Создание TFRecords

Если вы посмотрите на свой код, особенно этот line, они явно захватывают только файл aeroplane_train.txt. Для любопытных умов вот почему. Измените это имя на любой текстовый файл вашего учебного курса.

Удостоверьтесь, что VOCdevkit находится внутри моделей /object _detection, тогда вы можете продолжить и создать TFRecords.

Пожалуйста, сначала просмотрите их код, если у вас возникнут проблемы. Он объясняет себя и хорошо документирован.


3. Конфигурация трубопровода

Инструкции должны быть понятны для покрытия этого сегмента. Примеры конфигураций можно найти в object_detection/samples/configs.

Для тех, кто хочет тренироваться с нуля, я просто удаляю узлы fine_tune_checkpoint и from_detection_checkpoint. Вот, что мой конфигурационный файл выглядел для справки.

Здесь вы можете продолжить учебник и запустить учебный процесс.


4. Визуализируйте

Обязательно выполните eval параллельно с обучением, чтобы иметь возможность визуализировать процесс обучения. Процитировать Джонатан Хуан

лучший способ - просто запустить двоичный файл eval.py. Обычно мы запускаем этот бинарный параллельно с обучением, указывая его на каталог, содержащий контрольно-пропускной пункт, который проходит подготовку. Бинарный файл eval.py напишет logs к eval_dir, который вы указываете, который затем можете указать на с тензодатчиком.

Вы хотите видеть, что в течение нескольких часов mAP "снял", и затем вы хотите увидеть, когда он сходится. Трудно сказать без глядя на эти графики, сколько шагов вам нужно.


EDIT я ​​(28 июля '17):

Я никогда не ожидал, что мой ответ привлечет такое внимание, поэтому я решил вернуться и рассмотреть его.

Инструменты

Для моих пользователей Apple, вы можете использовать RectLabel для аннотаций.

Pascal VOC

После копания я наконец понял, что trainval.txt на самом деле является объединением наборов данных обучения и валидации.

Пожалуйста, посмотрите на официальный официальный комплект разработки, чтобы лучше понять формат.

Создание карты меток

Во время моего написания идентификатор 0 представляет none_of_the_above. Рекомендуется, чтобы ваши идентификаторы начинались с 1.

Визуализация

После запуска оценки и направленного тензора в ваш каталог Eval, он покажет вам mAP каждой категории вместе с каждой категорией. Это хорошо, но мне нравится видеть мои данные обучения также параллельно с Eval.

Для этого запустите тензограмму на другом порту и укажите ее в каталог поезда

tensorboard --logdir=${PATH_TO_TRAIN} --port=${DESIRED_NUMBER}

Ответ 2

Я написал сообщение на Medium о моем опыте также о том, как я обучил детектору объекта (в частности, это детектор енотонов) с Tensorflow на моем собственном наборе данных. Это также может быть полезно для других и является бесплатным для ответа eshirima.