Декодированный TFRecord имеет неправильный размер - PullRequest
1 голос
/ 05 мая 2020

Я использую TensorFlows DeepLab и хочу проверить, правильно ли были преобразованы мои данные в tfrecords. Я использовал предопределенный код download_and_convert_ade20k.sh и ниже, чтобы декодировать его обратно:

import tensorflow as tf

feature_desc = {
    'image/encoded': tf.io.FixedLenFeature((), tf.string, default_value=''),
    'image/filename': tf.io.FixedLenFeature((), tf.string, default_value=''),
    'image/format': tf.io.FixedLenFeature((), tf.string, default_value='jpeg'),
    'image/height': tf.io.FixedLenFeature((), tf.int64, default_value=0),
    'image/width': tf.io.FixedLenFeature((), tf.int64, default_value=0),
    'image/segmentation/class/encoded': tf.io.FixedLenFeature((), tf.string, default_value=''),
    'image/segmentation/class/format': tf.io.FixedLenFeature((), tf.string, default_value='png'),
}

def _parse_image_function(example_proto):
    return tf.io.parse_single_example(example_proto, feature_desc)

raw_image_dataset = tf.data.TFRecordDataset('ADE20K/tfrecord/train-00000-of-00004.tfrecord')

parsed_image_dataset = raw_image_dataset.map(_parse_image_function)

for image_features in parsed_image_dataset:
    img = tf.io.decode_raw(image_features['image/encoded'], tf.uint8).numpy()
    seg = tf.io.decode_raw(image_features['image/segmentation/class/encoded'], tf.uint8).numpy()

У меня две проблемы. Сначала я не знаю тип данных изображений до того, как они были закодированы. Я предполагаю tf.uint8, потому что это единственный работающий, который также выводит значения от 0 до 255. С другой стороны, полученное изображение находится в 1D (как и ожидалось), но недостаточно длинном, чтобы преобразовать его в исходную форму. Декодированное изображение имеет длину 48836, тогда как исходная высота и ширина (512, 612), что в сумме равняется 313344 пикселям.

...