Как мне создать образцы последовательности изображений, используя tf.data? - PullRequest
1 голос
/ 19 января 2020

Я хочу создать образцы последовательности изображений с помощью API tf.data. Но на данный момент, кажется, что нет простого способа объединить несколько изображений в один образец. Я попытался использовать функцию dataset.window, которая правильно группирует мои изображения. Но я не знаю, как их объединить.

import tensorflow as tf
from glob import glob

IMG_WIDTH = 256
IMG_HEIGHT = 256

def load_and_process_image(path):
    img = tf.io.read_file(path)
    img = tf.image.decode_jpeg(img, channels=3)
    img = tf.image.resize(img, [IMG_WIDTH, IMG_HEIGHT])
    img = tf.reshape(img, shape=(IMG_WIDTH, IMG_HEIGHT, 1, 3))
    return img

def create_dataset(files, time_distance=8, frame_step=1):
    dataset = tf.data.Dataset.from_tensor_slices(files)
    dataset = dataset.map(load_and_process_image)
    dataset = dataset.window(time_distance, 1, frame_step, True)

    # TODO: Concatenate elements from dataset.window
    return dataset

files = sorted(glob('some/path/*.jpg'))
images = create_dataset(images)

Я знаю, что могу сохранить свои последовательности изображений как TFRecords, но это сделало бы мой конвейер данных гораздо более гибким и стоило бы тонны памяти.

Мои входные пакеты должны иметь форму N x W x H x T x C (N: количество выборок W: ширина изображения H: высота изображения T: длина последовательности изображений C: каналы изображения).

1 Ответ

0 голосов
/ 19 января 2020

Вы можете использовать пакетирование для создания пакетов размером N.

iterations = # 
batched_dataset = dataset.batch(N) 
for batch in batched_dataset.take(iterations):
    # process your batch

Здесь iterations - это количество пакетов, которое вы хотите сгенерировать.

...