Deoldify es el proyecto utilizado para colorear y restaurar imágenes antiguas del formato en blanco y negro. Fue desarrollado por Jason Antic. Deoldify utiliza la arquitectura GAN para colorear la imagen. Contiene un generador que añade color al crítico (Discriminador), cuyo objetivo es criticar el colorido generado por el generador. Propuso un tipo especial de método de entrenamiento GAN llamado No-GAN.
Detalles Arquitectónicos
El autor utiliza los siguientes conceptos de aprendizaje profundo en estos modelos. Estos conceptos son:
- Autoatención: los autores usan la arquitectura U-Net para el generador, también modificaron la arquitectura para usar la normalización espectral y la autoatención en el modelo.
- Regla de actualización de dos tiempos: es una forma de entrenar la arquitectura GAN. Es solo una arquitectura de generador/crítico uno a uno y una mayor tasa de aprendizaje crítico. Esto se modifica para incorporar una pérdida crítica de umbral que asegura que el crítico sea «alcanzado» antes de pasar al entrenamiento del generador. Esto es particularmente útil para el entrenamiento NoGAN.
- No-GAN: Este método de entrenamiento GAN es desarrollado por los autores del modelo. La idea principal detrás de ese modelo es que obtiene los beneficios del entrenamiento GAN mientras dedica un tiempo mínimo al entrenamiento GAN directo. Discutiremos NoGAN con más detalle.
- Pérdida del generador: Hay dos tipos de aprendizaje NoGAN en el generador:
- Perpetual Loss: Esta pérdida se utiliza en el generador para reportar y minimizar las pérdidas generadas por sesgo en el modelo.
- Pérdida Crítica: Es la pérdida utilizada en el discriminador/crítico.
sin GAN
Este es un nuevo tipo de entrenamiento GAN desarrollado por los autores de Deoldify. Brinda los beneficios del entrenamiento GAN mientras dedica un tiempo mínimo al entrenamiento GAN directo. En su lugar, pasamos la mayor parte del tiempo entrenando al generador y al crítico por separado con métodos convencionales más directos, rápidos y confiables.
Los pasos son los siguientes:
- Primero, entrenamos el generador de manera convencional solo con la pérdida de características.
- A continuación, generamos imágenes a partir del generador entrenado y capacitamos al crítico para que distinga entre esos resultados y las imágenes reales como un clasificador binario básico.
- Finalmente, entrene al generador y al crítico juntos en una configuración GAN (comenzando con el tamaño objetivo de 192 px en este caso).
Todo el entrenamiento GAN importante solo tiene lugar en una fracción de tiempo muy pequeña. Hay un punto de inflexión donde parece que el crítico ha transferido todo el conocimiento útil al generador. No parece haber capacitación productiva después de que el modelo alcanzó el punto de inflexión. La parte difícil parece ser encontrar el punto de inflexión y el modelo es bastante inestable, por lo que el autor tiene que crear muchos puntos de control. Otra cosa clave sobre No-GAN es que puede repetir el entrenamiento previo del crítico en las imágenes generadas después del entrenamiento GAN inicial, luego repetir el entrenamiento GAN de la misma manera.
Hay 3 tipos de modelos que son entrenados por Deoldify:
- Artístico: este modelo logra los mejores resultados en términos de coloración de la imagen, detalles y vitalidad. Los modelos utilizan una arquitectura de red troncal ResNet 34 con U-Net con énfasis en la profundidad de las capas en el lado del decodificador. Hay algunos inconvenientes del modelo, como que este modelo no brinda estabilidad para tareas comunes, como escenas naturales y retratos, y requiere mucho tiempo y ajuste de parámetros para obtener los mejores resultados.
- Estable: Este modelo consigue los mejores resultados en paisajes y retratos. Brinda una mejor coloración a los rostros humanos en lugar de una coloración gris en las caras. Los modelos utilizan una arquitectura de red troncal ResNet 101 con U-Net con énfasis en la profundidad de las capas en el lado del decodificador. Este modelo generalmente tiene una decoloración menos extraña que el modelo artístico, pero también es menos colorido.
- Video: este modelo está optimizado para videos fluidos, consistentes y sin parpadeos. Este sería el menos colorido de los tres modelos. El modelo es similar a la arquitectura ‘estable’ pero se diferencia en la formación.
Implementación
Python3
# Clone deoldify Repository ! git clone https://github.com/jantic/DeOldify.git DeOldify # change directory to DeOldify Repo cd DeOldify # For Colab ! pip install -r colab_requirements.txt # For Local Script ! pip install -r requirements.txt # import pytorch library import torch # check for GPU if not torch.cuda.is_available(): print('GPU not available.') # necessary imports import fastai from deoldify.visualize import * import warnings warnings.filterwarnings("ignore", category=UserWarning, message=".*?Your .*? set is empty.*?") # download the artistic model !mkdir 'models' !wget https://data.deepai.org/deoldify/ColorizeArtistic_gen.pth -O ./models/ColorizeArtistic_gen.pth # use the get image colorizer function with artistic model colorizer = get_image_colorizer(artistic=True) # Here, we provide the parameters such as source URL, render factor etc. source_url = 'https://preview.redd.it/a702q2585j961.jpg?width=640'+ '&crop=smart&auto=webp&s=a5f2523513bb24648737760369d2864eb1f57118' #@param {type:"string"} render_factor = 39 #@param {type: "slider", min: 7, max: 40} watermarked = False #@param {type:"boolean"} if source_url is not None and source_url !='': image_path = colorizer.plot_transformed_image_from_url(url=source_url, render_factor=render_factor, compare=True, watermarked=watermarked) show_image_in_notebook(image_path) else: print('Provide the valid image URL.')