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.

Cómo resolver el error “out of memory” en Jupyter Notebook?

Estaba tratando de crear parches de las imágenes de mi conjunto de datos. Este es mi código:

for path, subdirs, files in os.walk(directorio_raíz):
    nombre_dir = path.split(os.path.sep)[-1]
    if nombre_dir == 'imágenes':   #Encuentra todos los directorios 'imágenes'
        imágenes = os.listdir(path)  #Lista de todos los nombres de imágenes en este subdirectorio
        for i, nombre_imagen in enumerate(imágenes):
            if nombre_imagen.endswith(".tif"):   #Solo leer imágenes jpg...
                image = cv2.imread(path+"/"+nombre_imagen, 1)  #Leer cada imagen como BGR
                SIZE_X = (image.shape[1]//tamaño_parche)*tamaño_parche #Tamaño más cercano divisible por nuestro tamaño de parche
                SIZE_Y = (image.shape[0]//tamaño_parche)*tamaño_parche #Tamaño más cercano divisible por nuestro tamaño de parche
                image = Image.fromarray(image)
                image = image.crop((0 ,0, SIZE_X, SIZE_Y))  #Recortar desde la esquina superior izquierda
                #image = image.resize((SIZE_X, SIZE_Y))  #Intentar no redimensionar para la segmentación semántica
                image = np.array(image)             

                #Extraer parches de cada imagen
                print("Ahora creando parches para la imagen:", path+"/"+nombre_imagen)
                parches_img = patchify(image, (tamaño_parche, tamaño_parche, 3), step=tamaño_parche)  #Step=256 para 256 parches significa sin superposición

                for i in range(parches_img.shape[0]):
                    for j in range(parches_img.shape[1]):

                        parche_individual_img = parches_img[i,j,:,:]

                        #Usar minmaxscaler en lugar de simplemente dividir por 255.
                        parche_individual_img = scaler.fit_transform(parche_individual_img.reshape(-1, parche_individual_img.shape[-1])).reshape(parche_individual_img.shape)

                        #parche_individual_img = (parche_individual_img.astype('float32')) / 255.
                        parche_individual_img = parche_individual_img[0] #Eliminar la dimensión extra innecesaria que agrega patchify.                               
                        conjunto_datos_imágenes.append(parche_individual_img)

Pero muestra el error “memoria insuficiente” y se apaga inmediatamente. Estoy usando 32GB de RAM y una GPU 1660Ti. Las imágenes son de 5000X5000 píxeles y el tamaño de mi conjunto de datos es de 12.7GB.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El error “sin memoria” indica que el programa se está quedando sin memoria disponible para almacenar los datos. Una posible razón para esto podría ser que el código esté intentando cargar todas las imágenes en memoria de una vez, lo cual puede ser una tarea compleja para imágenes grandes y conjuntos de datos extensos.

    Para resolver este problema, es posible que necesite considerar cargar las imágenes por lotes en lugar de todas al mismo tiempo. Puede utilizar bibliotecas como keras.preprocessing.image que le permiten cargar imágenes por lotes para tareas de procesamiento de imágenes. Además, puede intentar redimensionar las imágenes a una resolución menor antes de seguir procesándolas, ya que esto puede ayudar a reducir los requisitos de memoria. Por último, también puede intentar aumentar el espacio de intercambio en su sistema para acomodar el aumento en el uso de memoria.

    Además, puede verificar si hay fugas de memoria en el código e intentar optimizarlo para un uso eficiente de la memoria. Esto puede implicar reducir copias de memoria innecesarias o liberar explícitamente la memoria no utilizada. También puede intentar utilizar un perfilador para identificar cuellos de botella de memoria en su código.

Comments are closed.