Bibliotecas GAN para aprendizaje profundo

Contenidos

Visión general

  • Las GAN son modelos generativos, crean lo que les das de comer.
  • Hemos enumerado 4 bibliotecas GAN destacadas

Introducción

Actualmente, GAN se considera una de las áreas de investigación más interesantes en la visión por computadora. Su destreza para procesar imágenes es incomparable y, siendo un científico de datos, no explorarlo sería un error. Incluso personas eminentes como Yann LeCun describieron las GAN como «la idea más interesante en el aprendizaje automático en los últimos 10 años».

please-make-a-featured-image-using-this-8311319

Cuando trabajé con GAN por primera vez, lo desarrollé desde cero usando PyTorch y fue una tarea tediosa. Se vuelve aún más difícil cuando el resultado no es satisfactorio y desea probar otra arquitectura, ya que ahora debe reescribir el código. Pero afortunadamente, los investigadores que trabajan en varios gigantes técnicos han desarrollado varias bibliotecas GAN para ayudarlo a explorar y desarrollar aplicaciones basadas en GAN.

En este artículo, veremos 4 bibliotecas GAN interesantes que definitivamente deberías conocer. Además, le daré una descripción general de las GAN, para empezar.

Te recomiendo que consultes nuestro completo Programa de visión artificial para iniciarse en este campo.

Tabla de contenido

  • Una descripción general rápida de las GAN
  • Bibliotecas GAN
  • TF-GAN
  • Antorcha-GAN
  • Mimetismo
  • Kit de herramientas de IBM- GAN

Una descripción general rápida de las GAN

Ian Good Fellow introdujo las GAN en 2014 y es un método de aprendizaje profundo de última generación. Es un miembro de la familia del Modelo Generativo que pasa por el entrenamiento adversario.

El modelado generativo es un método poderoso en el que la red aprende la distribución de los datos de entrada e intenta generar el nuevo punto de datos basándose en una distribución similar. Si miramos los ejemplos de modelos generativos tenemos Auto Encoders, máquinas Boltzmann, redes generativas adversarias, redes bayesianas, etc.

Arquitectura de GAN

Las GAN constan de dos redes neuronales, un generador GRAMO y un discriminador D. Además, estos dos modelos están involucrados en un juego de suma cero durante el entrenamiento.

La red del generador aprende la distribución de los datos de entrenamiento. Y cuando proporcionamos ruido aleatorio como entrada, genera algunos datos sintéticos que intentan imitar las muestras de entrenamiento.

Ahora aquí viene el modelo discriminador (D). Designa una etiqueta: Real o Falsa a los datos generados por GRAMO sobre la base de la distribución de datos. Esto significa que la nueva imagen proviene de las imágenes de entrenamiento o es una imagen generada artificialmente.

El caso cuando D reconoce con éxito la imagen como real o falsa conduce a un aumento en la pérdida del generador. Del mismo modo, cuando GRAMO logra construir imágenes de buena calidad similares a las reales y engaña al D, aumenta la pérdida del discriminador. Además, el generador aprende del proceso y genera imágenes mejores y más realistas en la próxima iteración.

Básicamente, se puede considerar como un juego MIN-MAX de dos jugadores. Aquí el rendimiento de ambas redes mejora con el tiempo. Ambas redes pasan por múltiples iteraciones de entrenamiento. Con el paso del tiempo y varias actualizaciones en los parámetros del modelo como pesos y sesgos, alcanzan el estado estable también conocido como equilibrio de Nash.

¿Qué es el equilibrio de Nash?

El equilibrio de Nash es un estado estable de un sistema que implica la interacción de diferentes participantes, en el que ningún participante puede ganar mediante un cambio unilateral de estrategia si las estrategias de los demás permanecen sin cambios.

En última instancia, en este juego de suma cero, podemos generar con éxito imágenes artificiales o falsas que en su mayoría se parecen al conjunto de datos de entrenamiento real.

Ejemplo-

Veamos qué tan útiles pueden ser las GAN.

Por ejemplo, durante el bloqueo, tuvo la oportunidad de revisar su antiguo álbum de fotos. En un momento tan estresante, es un buen repaso para revivir sus recuerdos. Pero como este álbum estuvo en tu armario durante años, intacto, algunas fotografías se dañaron y eso te entristeció. Y aquí es precisamente cuando decidió utilizar GAN.

La imagen a continuación se restauró con éxito con la ayuda de GAN, utilizando un método llamado Image Inpainting.

image_inpainting-4463766

Imagen original frente a imagen restaurada

Fuente de imagen: Bertalmío et al., 2000.

Image Inpainting es el arte de restaurar imágenes dañadas reconstruyendo las partes faltantes utilizando la información de fondo disponible. Esta técnica también se utiliza para eliminar objetos no deseados de las imágenes dadas.

Esta fue solo una revisión rápida de las GAN. Si quieres saber más al respecto, te sugiero que leas los siguientes artículos.

Ahora veremos algunas bibliotecas GAN interesantes.

TF-GAN

Tensorflow GAN, también conocido como TF-GAN, es una biblioteca de python ligera de código abierto. Fue desarrollado por investigadores de Google AI para la implementación fácil y efectiva de GAN.

TF-GAN proporciona una infraestructura bien desarrollada para capacitar y evaluar la Red Adversarial Generativa junto con funciones de pérdida y métricas de evaluación probadas de manera efectiva. La biblioteca consta de varios módulos para implementar el modelo. Proporciona llamadas de función simples que un usuario puede aplicar en sus propios datos sin escribir el código desde cero.

Es fácil de instalar y usar al igual que otros paquetes como NumPy y pandas, ya que proporciona el paquete PyPi. Utilice el siguiente código

#Installing the library
pip install tensorflow-gan
#importing the library 
import tenorflow_gan as tfgan

El siguiente es un código para generar imágenes a partir del conjunto de datos MNIST usando TF-Gan-

# Set up the input.
images = mnist_data_provider.provide_data(FLAGS.batch_size)
noise = tf.random_normal([FLAGS.batch_size, FLAGS.noise_dims])

# Build the generator and discriminator.
gan_model = tfgan.gan_model(
    generator_fn=mnist.unconditional_generator,  # you define
    discriminator_fn=mnist.unconditional_discriminator,  # you define
    real_data=images,
    generator_inputs=noise)

# Build the GAN loss.
gan_loss = tfgan.gan_loss(
    gan_model,
    generator_loss_fn=tfgan_losses.wasserstein_generator_loss,
    discriminator_loss_fn=tfgan_losses.wasserstein_discriminator_loss)

# Create the train ops, which calculate gradients and apply updates to weights.
train_ops = tfgan.gan_train_ops(
    gan_model,
    gan_loss,
    generator_optimizer=tf.train.AdamOptimizer(gen_lr, 0.5),
    discriminator_optimizer=tf.train.AdamOptimizer(dis_lr, 0.5))

# Run the train ops in the alternating training scheme.
tfgan.gan_train(
    train_ops,
    hooks=[tf.train.StopAtStepHook(num_steps=FLAGS.max_number_of_steps)],
    logdir=FLAGS.train_log_dir)

Lo que me gusta de la biblioteca

  1. Una cosa importante sobre la biblioteca es que TF-GAN actualmente es compatible con Tensorflow-2.0, es decir, la última versión de TensorFlow. Además, puede usarlo de manera eficiente con otros marcos.
  2. Entrenar un modelo de adversario generativo es una tarea de procesamiento pesada, que solía llevar semanas. TF-GAN es compatible con Cloud TPU. De ahí que el proceso de formación se complete en unas pocas horas. Para saber más sobre cómo usar TF-GAN en TPU, puede ver esta tutorial de los autores de la biblioteca.
  3. En caso de que necesite comparar los resultados de varios artículos, TF-GAN le proporciona métricas estándar que facilitan al usuario comparar de manera eficiente y sencilla diferentes artículos de investigación sin ningún sesgo estadístico.

Los siguientes son algunos proyectos implementados con TF-GAN-

Además, para obtener más información sobre esta interesante biblioteca GAN utilizada por los investigadores de Google, lea el documento oficial.

Antorcha-GAN

Torch-GAN es un marco basado en PyTorch para escribir códigos cortos y fáciles de entender para desarrollar GAN. Este paquete consta de varias redes adversarias generativas junto con las utilidades necesarias para su implementación.

Generalmente, las GAN comparten un diseño estándar que tiene múltiples componentes como el modelo de generador, el modelo de discriminador, la función de pérdida y las métricas de evaluación. Mientras que Torch GAN imita el diseño de las GAN a través de una API simple y permite personalizar los componentes cuando sea necesario.

screenshot-from-2020-08-24-07-32-34-1229273

Fuente

Esta biblioteca GAN facilita la interacción entre los componentes de GAN a través de un entrenador altamente versátil que se adapta automáticamente a los modelos y pérdidas definidos por el usuario.

Instalar la biblioteca es simple usando pip. Solo necesita usar el siguiente comando a continuación y listo.

pip3 install torchgan

Implementación de los modelos Torch-GAN

En el núcleo del diseño, tenemos un módulo de entrenador responsable de la flexibilidad y facilidad de uso. El usuario debe proporcionar las especificaciones requeridas, es decir, la arquitectura de los modelos de generador y discriminador, junto con el optimizador asociado. El usuario también debe proporcionar las funciones de pérdida y las métricas de evaluación.

La biblioteca ofrece la libertad de elegir las especificaciones entre la amplia gama disponible o variantes personalizadas propias. En la siguiente imagen, podemos ver la implementación de DC-GAN en solo 10 líneas de código, ¿no es sorprendente?

screenshot-from-2020-08-24-07-38-55-6766079

Fuente

¿Qué me gusta de esta biblioteca GAN?

    1. La amplia gama de arquitectura GAN que admite. Usted nombra la arquitectura y encontrará la implementación de TorchGAN de la misma. Por ejemplo, Vanilla GAN, DCGAN, CycleGan, Conditional GAN, Generative Multi adversarial network y muchos más.
    2. Otra característica importante del marco es su extensibilidad y flexibilidad. Torch-GAN es un paquete comprensible. Podemos usarlo de manera eficiente con funcionalidades incorporadas o definidas por el usuario.
    3. Además, proporciona una visualización eficiente del rendimiento a través de un objeto Logger. Admite el registro de la consola y la visualización del rendimiento mediante TensorBoard y Vizdom.

Si desea profundizar más, no olvide leer el documentación oficial de TorchGAN.

Mimetismo

Con el aumento de la investigación en el campo, podemos ver varias implementaciones de GAN. Es difícil comparar múltiples implementaciones desarrolladas usando diferentes marcos, entrenadas en diferentes condiciones y evaluadas usando diferentes métricas. Esta comparación es una tarea ineludible para los investigadores. Por lo tanto, esta fue la principal motivación detrás del desarrollo de Mimicry.

mimcry-4050562

fuente

Mimicry es una biblioteca PyTorch ligera para la reproducibilidad de GAN. Proporciona funcionalidades comunes necesarias para entrenar y evaluar un modelo Gan. Eso permite a los investigadores concentrarse en la implementación del modelo en lugar de escribir el mismo código repetitivo una y otra vez.

Esta biblioteca GAN proporciona la implementación estándar de varias arquitecturas GAN como DCGAN, Wasserstein GAN con penalización de gradiente (WGAN-GP), GAN auto-supervisada (SSGAN), etc. mismo tamaño de modelo, entrenado en condiciones similares.

Al igual que las otras dos bibliotecas, podemos instalar fácilmente Mimicry usando pip y está listo para usar.

pip install torch-mimicry

Aquí está la implementación rápida de SNGAN usando mimetismo

import torch
import torch.optim as optim
import torch_mimicry as mmc
from torch_mimicry.nets import sngan


# Data handling objects
device = torch.device('cuda:0' if torch.cuda.is_available() else "cpu")
dataset = mmc.datasets.load_dataset(root='./datasets', name='cifar10')
dataloader = torch.utils.data.DataLoader(
        dataset, batch_size=64, shuffle=True, num_workers=4)

# Define models and optimizers
netG = sngan.SNGANGenerator32().to(device)
netD = sngan.SNGANDiscriminator32().to(device)
optD = optim.Adam(netD.parameters(), 2e-4, betas=(0.0, 0.9))
optG = optim.Adam(netG.parameters(), 2e-4, betas=(0.0, 0.9))

# Start training
trainer = mmc.training.Trainer(
    netD=netD,
    netG=netG,
    optD=optD,
    optG=optG,
    n_dis=5,
    num_steps=100000,
    lr_decay='linear',
    dataloader=dataloader,
    log_dir='./log/example',
    device=device)
trainer.train()

Otra característica importante del mimetismo es que proporciona compatibilidad con Tensorboard para la visualización del rendimiento. Por lo tanto, puede crear una curva de pérdida y probabilidad para monitorear el entrenamiento. Puede mostrar imágenes generadas aleatoriamente para comprobar la variedad.

El mimetismo es un desarrollo interesante destinado a ayudar a los investigadores. Yo personalmente le sugeriré que lea el Papel de imitación.

Kit de herramientas de IBM GAN

Hasta ahora, hemos visto algunas bibliotecas GAN muy eficientes y de vanguardia. Hay muchas más bibliotecas GAN como Keras-GAN, PyTorch-GAN, PyGAN, etc. Cuando observamos de cerca, vemos algunas cosas en común entre estas bibliotecas GAN. Son intensivos en código. Si desea utilizar alguno de ellos, debe estar bien versado en

  • El conocimiento y la implementación de GAN.
  • Fluido en Python
  • Cómo utilizar el marco particular

Es un poco difícil saberlo todo para un programador de software. Para resolver el problema, aquí tenemos una herramienta GAN fácil de usar: IBM GAN-Toolkit.

El kit de herramientas GAN proporciona una variante altamente flexible, sin código, para implementar modelos GAN. Además, proporciona un alto nivel de abstracción para implementar el modelo GAN. Aquí, el usuario solo necesita dar los detalles del modelo usando un archivo de configuración o un argumento de línea de comandos. Entonces el marco se encargará de todo lo demás. Personalmente lo encontré muy interesante.

Los siguientes pasos le ayudarán con la instalación:

  1. En primer lugar, clonamos el código
    $ git clone https://github.com/IBM/gan-toolkit
    $ cd gan-toolkit

  2. Luego instale todos los requisitos
    $ pip install -r requirements.txt

    Ahora está listo para usar. Finalmente, para entrenar la red tenemos que darle un archivo de configuración en formato JSON de la siguiente manera

    { 
            "generator":{
                "choice":"gan"
            },
            "discriminator":{
                "choice":"gan"
            },
            "data_path":"datasets/dataset1.p",
            "metric_evaluate":"MMD"
        }
    $ python main.py --config my_gan.json

El kit de herramientas implementa múltiples arquitecturas GAN como vanilla GAN, DC-GAN, Conditional-GAN y más.

Ventajas del kit de herramientas GAN

  1. Facilita una forma sin código de implementar la tecnología de visión por computadora de última generación. Solo se requiere un archivo JSON simple para definir una arquitectura GAN. No es necesario escribir el código de entrenamiento ya que el framework se encargará de ello.
  2. Proporciona soporte para múltiples bibliotecas, es decir, PyTorch, Keras y TensorFlow también.
  3. Además, en el kit de herramientas de GAN, tenemos la libertad de mezclar y combinar fácilmente los componentes de diferentes modelos. Por ejemplo, puede utilizar el modelo de generador de DC-GAN, el discriminador de C-GAN y el proceso de entrenamiento de vanilla gan.

Ahora solo lee el documento y juegue con las GAN a su manera.

Notas finales

Las GAN son un campo de investigación activo. Vemos actualizaciones periódicas casi semanalmente sobre la próxima versión de GAN. Puede consultar el trabajo que han realizado los investigadores aquí.

Para concluir, en este artículo discutimos las 4 bibliotecas GAN más importantes que se pueden implementar fácilmente en Python. Diariamente, vemos desarrollos tremendos y vemos nuevas aplicaciones de GAN. El siguiente artículo explica algunas de estas increíbles aplicaciones:

¿Cuáles son las bibliotecas GAN que usa? ¿Cree que debería haber incluido alguna otra biblioteca? Háganos saber en los comentarios a continuación.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.