Traducción de imagen a imagen con CycleGAN

Traducción imagen a imagen con CycleGAN

Introducción

En el ámbito de la inteligencia artificial y la visión por computadora, CycleGAN se destaca como una innovación notable que ha redefinido la forma en que percibimos y manipulamos imágenes. Esta técnica de vanguardia ha revolucionado la traducción de imágenes a imágenes, permitiendo transformaciones sin problemas entre dominios, como convertir caballos en cebras o convertir paisajes de verano en vistas nevadas. En este artículo, descubriremos la magia de CycleGAN y exploraremos sus diversas aplicaciones en varios dominios.

Objetivos de aprendizaje

  1. El concepto de CycleGAN y su enfoque innovador de traducción bidireccional de imágenes.
  2. La arquitectura de las redes generadoras (G_AB y G_BA) en CycleGAN, el diseño de las redes discriminadoras (D_A y D_B) y su papel en el entrenamiento.
  3. Las aplicaciones del mundo real de CycleGAN incluyen transferencia de estilo, adaptación de dominio y transiciones estacionales, y planificación urbana.
  4. Los desafíos enfrentados durante la implementación de CycleGAN incluyen la calidad de la traducción y los cambios de dominio.
  5. Posibles direcciones futuras para mejorar las capacidades de CycleGAN.

Este artículo se publicó como parte del Data Science Blogathon.

¿Qué es CycleGAN?

CycleGAN, abreviatura de “Cycle-Consistent Generative Adversarial Network”, es una novedosa arquitectura de aprendizaje profundo que facilita la traducción de imágenes no supervisada. Las GAN tradicionales enfrentan un generador contra un discriminador en un juego de minimización y maximización, pero CycleGAN introduce un giro ingenioso. En lugar de apuntar a una traducción unidireccional, CycleGAN se enfoca en lograr un mapeo bidireccional entre dos dominios sin depender de datos de entrenamiento emparejados. Esto significa que CycleGAN puede convertir imágenes del dominio A al dominio B y, crucialmente, de regreso del dominio B al dominio A asegurando que la imagen se mantenga coherente a través del ciclo.

Arquitectura de CycleGAN

La arquitectura de CycleGAN se caracteriza por sus dos generadores, G_A y G_B, responsables de traducir imágenes del dominio A al dominio B y viceversa. Estos generadores se entrenan junto con dos discriminadores, D_A y D_B, que evalúan la autenticidad de las imágenes traducidas en comparación con las reales de sus respectivos dominios. El entrenamiento adversarial obliga a los generadores a producir imágenes indistinguibles de imágenes reales en el dominio objetivo, mientras que la pérdida de ciclo-consistencia garantiza que la imagen original pueda ser reconstruida después de la traducción bidireccional.

Implementación de la traducción de imagen a imagen utilizando CycleGAN

# importar bibliotecas
import tensorflow as tf
import tensorflow_datasets as tfdata
from tensorflow_examples.models.pix2pix import pix2pix
import os
import time
import matplotlib.pyplot as plt
from IPython.display import clear_output

# Preparación del conjunto de datos
dataset, metadata = tfdata.load('cycle_gan/horse2zebra',
                              with_info=True, as_supervised=True)

train_horses, train_zebras = dataset['trainA'], dataset['trainB']
test_horses, test_zebras = dataset['testA'], dataset['testB']

def preprocess(image):
  # cambiar tamaño
  image = tf.image.resize(image, [286, 286],
                          method=tf.image.ResizeMethod.NEAREST_NEIGHBOR)
  # recortar
  image = random_crop(image)
  # voltear
  image = tf.image.random_flip_left_right(image)
  return image 
  
# Conjunto de entrenamiento y conjunto de prueba
train_horses = train_horses.cache().map(
    preprocess_image, num_parallel_calls=AUTOTUNE).shuffle(
    1000).batch(1)

train_zebras = train_zebras.cache().map(
    preprocess_image, num_parallel_calls=AUTOTUNE).shuffle(
    1000).batch(1)
    
horse = next(iter(train_horses))
zebra = next(iter(train_zebras))

 # Importar modelo pre-entrenado
channels = 3

g_generator = pix2pix.unet_generator(channels, norm_type='instancenorm')
f_generator = pix2pix.unet_generator(channels, norm_type='instancenorm')

a_discriminator = pix2pix.discriminator(norm_type='instancenorm', target=False)
b_discriminator = pix2pix.discriminator(norm_type='instancenorm', target=False) 

to_zebra = g_generator(horse)
to_horse = f_generator(zebra)
plt.figure(figsize=(8, 8))
contrast = 8

# Definir funciones de pérdida
loss = tf.keras.losses.BinaryCrossentropy(from_logits=True)
def discriminator(real, generated):
  real = loss(tf.ones_like(real), real)

  generated = loss(tf.zeros_like(generated), generated)

  total_disc= real + generated

  return total_disc * 0.5
  
def generator(generated):
  return loss(tf.ones_like(generated), generated)

# Entrenamiento del modelo
def train(a_real, b_real):
  
  with tf.GradientTape(persistent=True) as tape:
    
    b_fake = g_generator(a_real, training=True)
    a_cycled = f_generator(b_fake, training=True)

    a_fake = f_generator(b_real, training=True)
    b_cycled = g_generator(a_fake, training=True)

    a = f_generator(a_real, training=True)
    b = g_generator(b_real, training=True)

    a_disc_real = a_discriminator(a_real, training=True)
    b_disc_real = b_discriminator(b_real, training=True)

    a_disc_fake = a_discriminator(a_fake, training=True)
    b_disc_fake = b_discriminator(b_fake, training=True)

    # cálculo de pérdida
    g_loss = generator_loss(a_disc_fake)
    f_loss = generator_loss(b_disc_fake)
    
# Ejecución del modelo
for epoch in range(10):
  start = time.time()

  n = 0
  for a_image, b_image in tf.data.Dataset.zip((train_horses, train_zebras)):
    train(a_image, b_image)
    if n % 10 == 0:
      print ('.', end='')
    n += 1

  clear_output(wait=True)
  generate_images(g_generator, horse)

Aplicaciones de CycleGAN

El poder de CycleGAN se extiende mucho más allá de sus intrincadas técnicas, encontrando aplicaciones en diversos ámbitos donde la transformación de imágenes es fundamental:

1. Renderizado artístico y transferencia de estilo

La capacidad de CycleGAN para traducir imágenes mientras preserva el contenido y la estructura es potente para empresas artísticas. Facilita la transferencia de estilos artísticos entre imágenes, ofreciendo nuevas perspectivas sobre obras clásicas o dando vida nueva a la fotografía moderna.

2. Adaptación y enriquecimiento de dominios

En el aprendizaje automático, CycleGAN ayuda en la adaptación de dominios al traducir imágenes de un dominio (por ejemplo, fotos reales) a otro (por ejemplo, imágenes sintéticas), ayudando a que los modelos entrenados con datos limitados se generalicen mejor a escenarios del mundo real. También enriquece los datos de entrenamiento al crear variaciones de imágenes, enriqueciendo la diversidad del conjunto de datos.

3. Transiciones estacionales y planificación urbana

El talento de CycleGAN para transformar paisajes entre estaciones ayuda en la planificación urbana y los estudios ambientales. Simular cómo se ven las áreas durante diferentes estaciones apoya la toma de decisiones para el paisajismo, la planificación de ciudades e incluso la predicción de los efectos del cambio climático.

4. Enriquecimiento de datos para imágenes médicas

Puede generar imágenes médicas aumentadas para entrenar modelos de aprendizaje automático. Generar diversas variaciones de imágenes médicas (por ejemplo, escáneres de resonancia magnética) puede mejorar la generalización y el rendimiento del modelo.

5. Traducción de imágenes satelitales

Las imágenes satelitales capturadas en diferentes condiciones de iluminación, momentos del día o condiciones climáticas pueden ser difíciles de comparar. CycleGAN puede convertir imágenes satelitales tomadas en diferentes momentos o bajo condiciones variables, ayudando a rastrear cambios ambientales y desarrollo urbano.

6. Realidad virtual y juegos

Los desarrolladores de juegos pueden crear experiencias inmersivas al transformar imágenes del mundo real en el estilo visual de sus entornos virtuales. Esto puede mejorar el realismo y la participación del usuario en aplicaciones de realidad virtual y juegos.

Desafíos de CycleGAN

  • Calidad de traducción: Garantizar traducciones de alta calidad sin distorsiones o artefactos sigue siendo un desafío, especialmente en escenarios que involucran diferencias extremas de dominio.
  • Cambios de dominio: Manejar cambios de dominio donde los dominios de origen y destino presentan variaciones significativas puede llevar a traducciones subóptimas y pérdida de fidelidad al contenido.
  • Ajuste fino para tareas: Adaptar CycleGAN para tareas específicas requiere un ajuste fino cuidadoso de hiperparámetros y modificaciones arquitectónicas, lo cual puede ser intensivo en recursos.
  • Inestabilidad de la red: El entrenamiento de las redes CycleGAN a veces puede ser inestable, lo que lleva a problemas de convergencia, colapso de modos o aprendizaje lento.

Direcciones futuras para CycleGAN

  • Integración de información semántica: Incorporar información semántica en CycleGAN para guiar el proceso de traducción podría llevar a transformaciones más significativas y conscientes del contexto.
  • Traducción condicional y multimodal: Explorar traducciones de imágenes condicionales y multimodales, donde el resultado depende de condiciones específicas o implica múltiples estilos, abre nuevas posibilidades.
  • Aprendizaje no supervisado para segmentación semántica: Aprovechar CycleGAN para el aprendizaje no supervisado de mapas de segmentación semántica podría revolucionar las tareas de visión por computadora al reducir los esfuerzos de etiquetado.
  • Arquitecturas híbridas: Combinar CycleGAN con otras técnicas como mecanismos de atención o autoatención podría mejorar la precisión de la traducción y reducir los problemas relacionados con diferencias extremas de dominio.
  • Aplicaciones de múltiples dominios: Ampliar las capacidades de CycleGAN a traducciones multi-dominio o entre dominios puede abrir el camino a aplicaciones más versátiles en diversos ámbitos.
  • Mejoras en la estabilidad: Futuras investigaciones pueden centrarse en mejorar la estabilidad del entrenamiento de CycleGAN a través de estrategias de optimización novedosas o modificaciones arquitectónicas.

Conclusión

El potencial transformador de CycleGAN en la traducción de imágenes es innegable. Une dominios, transforma estaciones e infunde creatividad en las artes visuales. A medida que la investigación y las aplicaciones evolucionan, su impacto promete alcanzar nuevas alturas, trascendiendo los límites de la manipulación de imágenes y dando paso a una nueva era de transformación visual sin problemas. Algunos puntos clave de este artículo son:

  • Su enfoque único en la traducción de imágenes bidireccionales lo distingue, permitiendo una conversión sin problemas entre dos dominios mientras se mantiene la consistencia de la imagen.
  • La capacidad de simular transiciones estacionales ayuda en la planificación urbana e investigación ambiental, ofreciendo conocimientos sobre cómo podrían evolucionar los paisajes.

Preguntas frecuentes

Los medios mostrados en este artículo no pertenecen a Analytics Vidhya y se utilizan a discreción del autor.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Ciencia de Datos

¿Qué hace exactamente un Científico de Datos?

Como muestra este variado conjunto de descripciones de trabajo, puede resultar realmente difícil tener una idea clara...

Inteligencia Artificial

Este documento de IA desbloquea el secreto del aprendizaje en contexto cómo los modelos de lenguaje codifican funciones en la magia de vectores

En los modelos de lenguaje transformadores autoregresivos, se identifica un mecanismo neuronal que representa una fun...

Inteligencia Artificial

Repensando la Integridad Académica en la Era de la IA Un Análisis Comparativo de ChatGPT y Estudiantes Universitarios en 32 Cursos

La inteligencia artificial (IA) que genera nuevo contenido utilizando algoritmos de aprendizaje automático para ampli...