Формат аннотации на самом деле не имеет значения.Я сам создал 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),