es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Importar lotes de imágenes para problemas de no clasificación.

Estoy intentando hacer una red de superresolución, pero tengo problemas para importar mis propios datos. Tengo dos tipos de imágenes: imágenes redimensionadas (más pequeñas), imágenes originales. La primera se utilizará como entrada de la red y las segundas se utilizarán para entrenar la red.

El problema es que necesito cargar mis imágenes en lotes porque mi computadora no tiene suficiente memoria de GPU para construir todo el conjunto de datos de una sola vez. Pensé que utilizando el siguiente código podría funcionar:

train_ds = tf.keras.utils.image_dataset_from_directory(
  data_dir,
  validation_split=0.2,
  subset="training",
  seed=123,
  image_size=(img_height, img_width),
  batch_size=batch_size)

El problema es que solo sé cómo hacerlo funcionar para problemas de clasificación porque, según tengo entendido, está diseñado para tener solo conjuntos de datos de entrenamiento y validación.

Para hacer la superresolución necesito cuatro conjuntos de datos:

-normal-size-train

-small-size-train

-normal-size-test

-small-size-test

NOTA: Mi programa funciona cuando creo un tensor para imágenes redimensionadas y otro para imágenes originales, pero ahora quiero implementar un conjunto de datos más grande.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para cargar tus propios datos en lotes para una red de superresolución, puedes usar la clase ImageDataGenerator en el módulo tensorflow.keras.preprocessing.image. Aquí tienes un ejemplo de código para cargar cuatro conjuntos de datos diferentes:

    from tensorflow.keras.preprocessing.image import ImageDataGenerator
    
    data_gen = ImageDataGenerator(rescale=1./255)
    
    # Cargar el conjunto de datos de imágenes redimensionadas para entrenamiento
    train_resized_ds = data_gen.flow_from_directory(
        "path/to/train_resized_images_dir",
        target_size=(img_height, img_width),
        batch_size=batch_size,
        class_mode=None,
        shuffle=True,
        seed=123
    )
    
    # Cargar el conjunto de datos de imágenes originales para entrenamiento
    train_original_ds = data_gen.flow_from_directory(
        "path/to/train_original_images_dir",
        target_size=(img_height, img_width),
        batch_size=batch_size,
        class_mode=None,
        shuffle=True,
        seed=123
    )
    
    # Cargar el conjunto de datos de imágenes redimensionadas para pruebas
    test_resized_ds = data_gen.flow_from_directory(
        "path/to/test_resized_images_dir",
        target_size=(img_height, img_width),
        batch_size=batch_size,
        class_mode=None,
        shuffle=False
    )
    
    # Cargar el conjunto de datos de imágenes originales para pruebas
    test_original_ds = data_gen.flow_from_directory(
        "path/to/test_original_images_dir",
        target_size=(img_height, img_width),
        batch_size=batch_size,
        class_mode=None,
        shuffle=False
    )
    

    Este código cargará cuatro conjuntos de datos, cada uno conteniendo el correspondiente conjunto de imágenes. La clase ImageDataGenerator escalaremos los valores de píxeles para que estén entre 0 y 1. Cada conjunto de datos será una instancia de la clase DirectoryIterator, que se puede utilizar con los métodos fit() o fit_generator() de la clase tensorflow.keras.models.Model para entrenar la red de superresolución.

    Alternativamente, también puedes utilizar la API tf.data.Dataset para crear una tubería de carga de datos. Esto te brindará más control sobre las etapas de preprocesamiento y aumento de datos.

Comments are closed.