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.

Construyendo un archivo .npz grande de manera eficiente

Tengo un conjunto de datos de alrededor de 20,000 imágenes que voy a utilizar para entrenar una CNN. Las imágenes se encuentran en mi Google Drive. Estoy tratando de averiguar cómo cargar las imágenes en Colab para no tener que consultar cada imagen en cada época en Google Drive.

Mi enfoque actual es guardar las imágenes en un archivo .npz, de esa manera puedo cargarlo en Colaboratory una vez y evitar tener que leer Google Drive miles de veces.

Sin embargo, me estoy encontrando con limitaciones de memoria mientras construyo la lista “arr” a continuación. Las limitaciones de memoria en los 25 GB de RAM de Colabs. Intenté construir un archivo .npz con solo 1000 imágenes, y la sesión de Colab sigue fallando debido a la memoria RAM. Cada imagen tiene un tamaño promedio de alrededor de 192 KB. No estoy seguro si el problema es exclusivo de la lista de matrices de numpy, o tal vez PIL no es la mejor opción para cargar imágenes en esta situación.

¿Alguna idea de dónde podría estar el problema?

Edit: ¡Después de experimentar más, un archivo .npz de solo 50 imágenes ocupa 640 MB!
Supongo que mi pregunta en este punto debería ser: ¿cuál método es mejor para importar mis datos en Colab?

De:

from PIL import Image
import numpy as np

# x is a list of file locations for all images
arr = []
for i in range(len(x)):
    img = np.array(Image.open(x[ii]))
    # append array to list
    arr.append(img)
X_array = np.asarray(arr)
np.savez('/content/drive/My Drive/', X_array)

A:

from PIL import Image
import numpy as np

# x es una lista de ubicaciones de archivo para todas las imágenes
arr = []
for i in range(len(x)):
    img = np.array(Image.open(x[i]))
    # añadir array a la lista
    arr.append(img)
X_array = np.asarray(arr)
np.savez('/content/drive/My Drive/', X_array)
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una posible solución para reducir las limitaciones de memoria al trabajar con un gran conjunto de datos de imágenes en Google Colaboratory es utilizar generadores de datos de imágenes de la biblioteca Keras. Esto te permite cargar unas pocas imágenes a la vez y preprocesarlas sobre la marcha, sin necesidad de almacenar todas las imágenes en memoria de una vez.

    Otra opción es utilizar un servicio de almacenamiento basado en la nube como AWS o Microsoft Azure, que puede manejar conjuntos de datos más grandes y tener opciones de memoria más flexibles.

    En cuanto al enfoque de archivo .npz, una sugerencia sería intentar redimensionar las imágenes a una dimensión más pequeña para reducir el consumo de memoria, sin comprometer demasiado la calidad de la imagen. Además, podría valer la pena investigar otros formatos de archivo o técnicas de compresión para almacenar las imágenes, como .jpeg o .zip, dependiendo de los requisitos específicos del modelo de CNN que esté entrenando.

    En general, es importante optimizar el uso de memoria y la asignación de recursos al trabajar con grandes conjuntos de datos, especialmente en entornos basados en la nube donde los recursos pueden ser limitados o variables.

Comments are closed.