| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| """Utility functions for creating TFRecord data sets.""" |
|
|
| import tensorflow as tf |
|
|
|
|
| def int64_feature(value): |
| return tf.train.Feature(int64_list=tf.train.Int64List(value=[value])) |
|
|
|
|
| def int64_list_feature(value): |
| return tf.train.Feature(int64_list=tf.train.Int64List(value=value)) |
|
|
|
|
| def bytes_feature(value): |
| return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value])) |
|
|
|
|
| def bytes_list_feature(value): |
| return tf.train.Feature(bytes_list=tf.train.BytesList(value=value)) |
|
|
|
|
| def float_list_feature(value): |
| return tf.train.Feature(float_list=tf.train.FloatList(value=value)) |
|
|
|
|
| def read_examples_list(path): |
| """Read list of training or validation examples. |
| |
| The file is assumed to contain a single example per line where the first |
| token in the line is an identifier that allows us to find the image and |
| annotation xml for that example. |
| |
| For example, the line: |
| xyz 3 |
| would allow us to find files xyz.jpg and xyz.xml (the 3 would be ignored). |
| |
| Args: |
| path: absolute path to examples list file. |
| |
| Returns: |
| list of example identifiers (strings). |
| """ |
| with tf.gfile.GFile(path) as fid: |
| lines = fid.readlines() |
| return [line.strip().split(' ')[0] for line in lines] |
|
|
|
|
| def recursive_parse_xml_to_dict(xml): |
| """Recursively parses XML contents to python dict. |
| |
| We assume that `object` tags are the only ones that can appear |
| multiple times at the same level of a tree. |
| |
| Args: |
| xml: xml tree obtained by parsing XML file contents using lxml.etree |
| |
| Returns: |
| Python dictionary holding XML contents. |
| """ |
| if not xml: |
| return {xml.tag: xml.text} |
| result = {} |
| for child in xml: |
| child_result = recursive_parse_xml_to_dict(child) |
| if child.tag != 'object': |
| result[child.tag] = child_result[child.tag] |
| else: |
| if child.tag not in result: |
| result[child.tag] = [] |
| result[child.tag].append(child_result[child.tag]) |
| return {xml.tag: result} |
|
|
|
|
|
|