tfRecords с изображениями в качестве входов и целей - PullRequest
0 голосов
/ 12 марта 2019

В настоящее время я пытаюсь создать tf.Records из некоторых изображений .png, хранящихся локально.

Большинство примеров, которые я видел по этому поводу, относятся к задаче классификации, где целевыми значениями являются классы. Я пытаюсь построить VAE, поэтому моими целевыми значениями также будут изображения.

Я нашел этот пример генерации tf.Records:

# Converting the values into features
# _int64 is used for numeric values
def _int64_feature(value):
    return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))

# _bytes is used for string/char values
def _bytes_feature(value):
    return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))

tfrecord_filename = 'something.tfrecords'

# Initiating the writer and creating the tfrecords file.
writer = tf.python_io.TFRecordWriter(tfrecord_filename)

# Loading the location of all files - image dataset
# Considering our image dataset has apple or orange
# The images are named as apple01.jpg, apple02.jpg .. , orange01.jpg .. etc.

images = glob.glob('data/*.jpg')
for image in images[:1]:
    img = Image.open(image)
    img = np.array(img.resize((32,32)))
label = 0 if 'apple' in image else 1
feature = { 'label': _int64_feature(label),'image': _bytes_feature(img.tostring()) }

# Create an example protocol buffer
example = tf.train.Example(features=tf.train.Features(feature=feature))

# Writing the serialized example.
writer.write(example.SerializeToString())

writer.close()

Вопрос : что нужно изменить, чтобы сохранить также изображения в качестве целевых значений?

Это меняется:

feature = { 'label': _int64_feature(label),'image': _bytes_feature(img.tostring()) }

до

feature = { 'label': _bytes_feature(img.tostring()),'image': _bytes_feature(img.tostring()) }

Заранее спасибо

1 Ответ

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

Я думаю, вы можете просто сохранить два изображения в одном примере. И это обычно хорошая идея сохранить размеры изображения

features=tf.train.Features(feature={'height': _int64_feature(h),
                                    'width': _int64_feature(w),
                                    'channels': _int64_feature(c)
                                    'image_1': _bytes_feature(image1)
                                    'image_2': _bytes_feature(image2)
                                    }
                          ))
example = tf.train.Example(features=tf.train.Features(feature=feature))

Редактировать

Если я правильно понял:

list = np.array([image_1, image_2,...image_n])
images = np.split(np.fromstring(list.tostring()), number_of_images)
...