Обнаружение объекта Train Tensorflow в собственном наборе данных
потратив пару дней на то, чтобы выполнить эту задачу, я хотел бы поделиться своим опытом того, как я ответил на вопрос:
как использовать обнаружение объектов TS тренироваться с помощью собственного набора данных?
2 ответов
предполагается, что модуль уже установлен. Пожалуйста, обратитесь к их документация если не.
отказ от ответственности
этот ответ не должен быть право или только способ обучения модуля обнаружения объекта. Это просто я делюсь своим опытом и тем, что сработало для меня. Я открыт для предложений и узнаю больше об этом, поскольку я все еще новичок в ML в генеральный.
TL; DR
- создайте свой собственный набор данных формата Pascal VOC
- генерировать TFRecords из него
- настройка конвейера
- визуализация
каждый раздел этого ответа состоит из соответствующего редактирования (см. ниже). После прочтения каждого раздела, пожалуйста, прочитайте его редактирование, а также для разъяснений. Исправления и советы для каждого раздела.
инструменты используется
LabelImg: инструмент для создания аннотаций формата Pascal VOC.
1. Создайте свой собственный набор данных Pascal VOC
PS: для простоты соглашение об именовании папок моего ответа следует за соглашением Pascal VOC 2012
заглянуть в май 2012 dataset, вы увидите папку как следующие структура
+VOCdevkit
+VOC2012
+Annotations
+ImageSets
+Action
+Layout
+Main
+Segmentation
+JPEGImages
+SegmentationClass
+SegmentationObject
в настоящее время внесены изменения в следующие папки:
аннотации: это были все соответствующие XML-файлы изображений будут помещены. Используйте предложенный выше инструмент для создания аннотаций. Не беспокойтесь о <truncated>
и <difficulty>
теги, поскольку они будут игнорироваться двоичными файлами обучения и оценки.
JPEGImages: Расположение ваших реальных изображений. Убедитесь, что они имеют тип JPEG, потому что это то, что в настоящее время поддерживается для создания TFRecords с помощью предоставленного скрипта.
ImageSets - > Main: это просто состоит из текстовых файлов. Для каждого класса существует соответствующий поезд.txt, trainval.txt и Вэл.txt. Ниже приведен пример содержимого aeroplane_train.txt в Лос Папка 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 для создания этих текстовых файлов. Просто повторите имена изображений и назначьте 1 или -1 рядом с ними для существование объекта. Я добавил некоторую случайность среди своих текстовых файлов, перетасовав имена изображений.
на {classname}_val.txt файлы состоят из тестирование проверка данных. Считайте это тестовыми данными во время тренировки. Вы хотите разделить набор данных на обучение и проверку. Более подробную информацию можно найти здесь. Формат этих файлов аналогичен формату обучения.
на данный момент ваша структура папок должно быть
+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 / данные и открытым pascal_label_map.pbtxt.
этот файл состоит из JSON, который присваивает идентификатор и имя каждому элементу. Внесите изменения в этот файл, чтобы отразить ваши пожелания объекты.
2. Создать TFRecords
если вы посмотрите на их код, особенно это строка, они явно захватите aeroplane_train.txt только. Для любопытных умов, вот почему. Измените это имя файла на любой текстовый файл класса train.
убедится VOCdevkit внутри моделей/object_detection затем вы можете идти вперед и создать в TFRecords.
пожалуйста, сначала пройдите их код, если вы столкнетесь с какими-либо проблемами. Это самоочевидно и хорошо документировано.
3. Конфигурация Трубопровода
на - инструкции должно быть понятно, чтобы охватить этот сегмент. Примеры конфигураций можно найти в object_detection/samples / configs.
для тех, кто хочет тренироваться с нуля Я сделал, просто убедитесь, что удалить fine_tune_checkpoint
и from_detection_checkpoint
узлы. здесь как выглядел мой конфигурационный файл для справки.
отсюда вы можете продолжить с учебник и запустить процесс обучения.
4. Визуализируйте
обязательно запустите eval параллельно с обучением, чтобы иметь возможность визуализировать процесс обучения. Цитата Джонатан Хуан
лучший способ - просто запустить eval.py двоичный. Мы, как правило, это двоичный файл параллельно с обучением, направляя его на каталог holding контрольной точки, которая обучается. В eval.py binary будет писать журналы в
eval_dir
что вы указываете, на что вы можете указать с Tensorboard.вы хотите увидеть, что карта "взлетела" в первые несколько часов, а потом вы хотите увидеть, когда он сойдется. Трудно скажи без глядя на эти графики, сколько шагов вам нужно.
правка I (28 июля ' 17):
Я никогда не ожидал, что мой ответ привлечет столько внимания, поэтому я решил вернуться и рассмотреть его.
инструменты
для моих коллег пользователей Apple, вы могли бы использовать RectLabel для аннотации.
Паскаль лов
после выкопки вокруг, я, наконец, понял, что trainval.txt фактически является объединением наборов данных обучения и проверки.
пожалуйста, посмотрите на их официальный комплект разработки чтобы понять формат еще лучше.
Генерация Карты Меток
во время моего написания ID 0 представляет none_of_the_above
. Рекомендуется, чтобы ваши идентификаторы начинались с 1.
визуализация
после запустив оценку и направив tensorboard в каталог Eval, он покажет вам карту каждой категории вместе с производительностью каждой категории. Это хорошо, но мне нравится видеть мои тренировочные данные параллельно с Eval.
для этого запустите tensorboard на другом порту и укажите его в свой каталог поездов
tensorboard --logdir=${PATH_TO_TRAIN} --port=${DESIRED_NUMBER}
Я написал блоге на носителе о моем опыте, а также о том, как я обучил детектор объектов (в частности, это детектор енота) с Tensorflow на моем собственном наборе данных. Это также может быть полезно для других и дополняет ответ эширимы.