Как подготовить мои изображения и аннотацию к тренировкам по ретинанету? - PullRequest
0 голосов
/ 06 марта 2019

Я следовал этому уроку для обучения модели обнаружения объекта на наборе данных кокосового производства.Учебное пособие содержит шаг для загрузки и использования набора данных кокосовых орехов и его аннотаций и преобразования их в TFRecord .

Мне нужно использовать свои собственные пользовательские данные для обучения, я аннотировал, используя labelimg , который создавал xml-файлы, содержащие (w, h, xmin, ymin, xmax, ymax) для изображений.

Но набор данных кокосов имеет формат JSON с полями сегментации изображений для создания TFRecord .

Обязательна ли сегментация для обучения resnet, retinanet?

Итак, кто-нибудь может подсказать мне процедуру создания аннотации JSON из моих аннотаций XML без значений сегментации?

xml:

<annotation>
    <folder>frames</folder>
    <filename>83.jpg</filename>
    <path>/home/tdadmin/Downloads/large/f/frames/83.jpg</path>
    <source>
        <database>Unknown</database>
    </source>
    <size>
        <width>640</width>
        <height>480</height>
        <depth>3</depth>
    </size>
    <segmented>0</segmented>
    <object>
        <name>person</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>246</xmin>
            <ymin>48</ymin>
            <xmax>350</xmax>
            <ymax>165</ymax>
        </bndbox>
    </object>
</annotation>

Ответы [ 2 ]

1 голос
/ 07 марта 2019

То, что вы делаете сейчас, похоже на проект, который я делал раньше.Итак, у меня есть несколько советов для вас.

Когда я тренировался с моделью маски RCNN, я использовал VGG Image Annotator (, вы легко можете найти это в Google ).Используя этот инструмент, легко создавать файлы аннотаций json.Затем включите это в свое обучение.

Надеюсь, это поможет вам.Не стесняйтесь комментировать это, если у вас все еще есть вопросы.

Rowen

0 голосов
/ 06 марта 2019

Формат аннотации на самом деле не имеет значения.Я сам создал tfrecord из текстовых файлов раньше.Для создания пользовательской записи tfrecord вам нужно написать свою собственную create_custom_tf_record.py так же, как другие, показанные в этой папке .

Но так как вы используете кокосовые аннотации, вы можете использовать файлcreate_coco_tf_record.py.Важная вещь, которую вам нужно реализовать - это annotations_list.annotations_list - это просто словарь, поэтому ваша цель - проанализировать ваш xml-файл в словаре, содержащем пары ключ-значение, а затем передать правильное значение в feature_dict, а затем создать tf.train.Example из feature_dict.Если у вас есть tf.train.Example created, вы можете легко создать tfrecord.

Итак, для вашего точного примера сначала проанализируйте файл xml.

import xml.etree.ElementTree as ET
tree = ET.parse('annotations.xml')

Затем создайте annotaions_list из treeнапример:

annotations_list = {}
it = tree.iter()
for key in it:
    annotations_list[str(key.tag)] = key.text

Затем вы можете создать feature_dict из annotations_list

feature_dict = {
  'image/height':
      dataset_util.int64_feature(annotatios_list['height']),
  'image/width':
      dataset_util.int64_feature(...),
  'image/filename':
      dataset_util.bytes_feature(...),
  'image/source_id':
      dataset_util.bytes_feature(...),
  'image/key/sha256':
      dataset_util.bytes_feature(...),
  'image/encoded':
      dataset_util.bytes_feature(...),
  'image/format':
      dataset_util.bytes_feature(...),
  'image/object/bbox/xmin':
      dataset_util.float_list_feature(...),
  'image/object/bbox/xmax':
      dataset_util.float_list_feature(...),
  'image/object/bbox/ymin':
      dataset_util.float_list_feature(...),
  'image/object/bbox/ymax':
      dataset_util.float_list_feature(...),
  'image/object/class/text':
      dataset_util.bytes_list_feature(....),
  'image/object/is_crowd':
      dataset_util.int64_list_feature(...),
  'image/object/area':
      dataset_util.float_list_feature(...),
  }

Просто нужно убедиться, что поле feature_dict соответствует правильному полю изannotations_list и label_map.

Вы можете задаться вопросом, почему именно эти поля в feature_dict необходимы, согласно официальной документации , использующей ваш собственный набор данных , следующие файлынеобходимы, а другие не являются обязательными.

'image/height': dataset_util.int64_feature(height),
  'image/width': dataset_util.int64_feature(width),
  'image/filename': dataset_util.bytes_feature(filename),
  'image/source_id': dataset_util.bytes_feature(filename),
  'image/encoded': dataset_util.bytes_feature(encoded_image_data),
  'image/format': dataset_util.bytes_feature(image_format),
  'image/object/bbox/xmin': dataset_util.float_list_feature(xmins),
  'image/object/bbox/xmax': dataset_util.float_list_feature(xmaxs),
  'image/object/bbox/ymin': dataset_util.float_list_feature(ymins),
  'image/object/bbox/ymax': dataset_util.float_list_feature(ymaxs),
  'image/object/class/text': dataset_util.bytes_list_feature(classes_text),
  'image/object/class/label': dataset_util.int64_list_feature(classes),
...