Загрузите набор данных tfds.load в формате jpgs на локальный диск - PullRequest
0 голосов
/ 10 июля 2020

Я хочу загрузить полный набор данных о кошках и собаках на свой p c и иметь актуальные файлы jpg. Я мог бы загрузить его напрямую, например, из Microsoft, однако я хотел бы использовать функцию набора данных tfds.load.

Когда я пытаюсь:

(raw_train, raw_validation, raw_test), metadata = tfds.load(
    'cats_vs_dogs',
    split=['train[:80%]', 'train[80%:90%]', 'train[90%:]'],
    with_info=True,
    as_supervised=True,
    data_dir=r'D:\TFProjects\catsdogscompl')

Он что-то загружает, но это TFRECORD файлы, а не jpg. Как я могу получить актуальные JPG?

1 Ответ

1 голос
/ 10 июля 2020

TFDS фактически возвращает tf.data.Dataset. Как упоминалось на главной странице

Все наборы данных представлены как tf.data.Datasets, что обеспечивает простые в использовании и высокопроизводительные конвейеры ввода.

Но вы действительно может загрузить ваш набор данных и сохранить его вручную в формате jpeg.

import tensorflow as tf
import tensorflow_datasets as tfds
from uuid import uuid1
import os
import warnings

(raw_train, raw_validation, raw_test), metadata = tfds.load(
    'cats_vs_dogs',
    split=['train[:80%]', 'train[80%:90%]', 'train[90%:]'],
    with_info=True,
    data_dir=r'D:\TFProjects\catsdogscompl')

def save_dataset_as_jpegs(dataset, path,):
    """

    saves every image to the 'path' using random name + target

    :param dataset: dataset you want to save
    :param path: where you want to store it
    :param metadata: metadata from dataset. required to get class names.
    :return: Nothing. Just saves the dataset as jpegs.
    """

    for obj in dataset:
        im, name = obj['image'], obj['image/filename']
        serialized_im = tf.image.encode_jpeg(im)

        path_and_name = os.path.join(path, name.numpy().decode())
        tf.io.write_file(path_and_name, serialized_im)

save_dataset_as_jpegs(raw_train, 'jpegs_train/')
save_dataset_as_jpegs(raw_validation, 'jpegs_validation/')
save_dataset_as_jpegs(raw_test, 'jpegs_test/')

Этот код сохраняет набор данных raw_test в папку jpegs_test.

...