Проведя пару дней, пытаясь решить эту задачу, я хотел бы поделиться своим опытом, как я пошел, отвечая на вопрос:
Как использовать Обнаружение объектов TS для обучения с использованием моего собственного набора данных?
Проведя пару дней, пытаясь решить эту задачу, я хотел бы поделиться своим опытом, как я пошел, отвечая на вопрос:
Как использовать Обнаружение объектов TS для обучения с использованием моего собственного набора данных?
Предполагается, что модуль уже установлен. Пожалуйста, обратитесь к их документации, если нет.
Отказ
Этот ответ не должен быть правильным или единственным способом обучения модуля обнаружения объекта. Это просто я делюсь своим опытом и тем, что сработало для меня. Я открыт для предложений и больше узнаю об этом, поскольку я все еще новичок в ML в целом.
TL; DR
Каждая часть этого ответа состоит из соответствующего редактирования (см. ниже). После прочтения каждого раздела, пожалуйста, прочитайте его "Редактировать", а также для пояснений. Для каждого раздела были добавлены исправления и советы.
Используемые инструменты
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}
Я написал сообщение на Medium о моем опыте также о том, как я обучил детектору объекта (в частности, это детектор енотонов) с Tensorflow на моем собственном наборе данных. Это также может быть полезно для других и является бесплатным для ответа eshirima.