Path: blob/master/site/es-419/tutorials/generative/cyclegan.ipynb
25118 views
Copyright 2019 The TensorFlow Authors.
CycleGAN
En este cuaderno se enseña la traducción de imagen a imagen no emparejadas con la red condicional de GAN, como se describe en Traducción de imagen a imagen no emparejadas con las redes adversarias de ciclo constante, también conocido como CycleGAN. En el artículo se propone un método que puede capturar las características del dominio de una imagen y resolver cómo se podrían traducir estas características en el dominio de otra imagen, todo en ausencia de ejemplos de entrenamiento emparejados.
En este cuaderno se asume que usted tiene conocimientos de Pix2Pix, que puede aprenderlo en el Tutorial de Pix2Pix. El código de CycleGAN es similar, la diferencia principal es la función de pérdida adicional y el uso de datos de entrenamiento no emparejados.
CycleGAN usa una pérdida de consistencia del ciclo para poder entrenarla sin datos emparejados. En otras palabras, puede traducir de un dominio a otro sin un mapeo de uno a uno entre el dominio de origen y el de destino.
Esto expande las posibilidades de hacer muchas tareas interesantes como mejorar fotografías, colorizar imágenes, transferir estilos, etc. Todo lo que necesita es un conjunto de datos de origen y uno de destino (que son simplemente directorios de imágenes).
Preparación de la canalización de entrada
Instale el paquete tensorflow_examples que permite importar el generador y el discriminador.
Canalización de entrada
En este tutorial, se entrena un modelo para traducir desde imágenes de caballos a imágenes de cebras. Puede encontrar este conjunto de datos y otros similares aquí.
Como se menciona en el artículo, aplique irregularidades y réplicas aleatorias en el conjunto de datos de entrenamiento. Estas son algunas de las técnicas de aumento de imagen que evitan el sobreajuste.
Es similar a lo que se hace en pix2pix
Al aplicar irregularidades de forma aleatoria, se cambia el tamaño de la imagen a
286 x 286
y se recorta aleatoriamente a256 x 256
.Al aplicar reflejos de forma aleatoria, se voltea la imagen horizontalmente de forma aleatoria, es decir, de izquierda a derecha.
Importar y reusar los modelos Pix2Pix
Importe el generador y el discriminador que se usa en Pix2Pix a través del paquete instalado tensorflow_examples.
La arquitectura del modelo que se usa en este tutorial es muy similar a la que se usa en pix2pix. Estas son algunas de las diferencias:
Cyclegan usa la normalización de instancias en vez de la normalización de lotes.
En el artículo de CycleGAN se usa un generador basado en
resnet
. En este tutorial se usa un generadorunet
por la simplicidad.
Se entrenarán 2 generadores (G y F) y 2 discriminadores (X e Y).
El generador
G
aprende a transformar la imagenX
en la imagenY
.El generador
F
aprende a transformar la imagenY
en la imagenX
.El discriminador
D_X
aprende a diferenciar entre la imagenX
y la imagen generadaX
(F(Y)
).El discriminador
D_Y
aprende a diferenciar entre la imagenY
y la imagen generadaY
(G(X)
).
Funciones de pérdida
En CycleGAN, no hay datos emparejados con los que entrenar, por eso no hay garantía de que la pareja de la entrada x
y de la salida y
sea significativa durante el entrenamiento. Por eso. para reforzar que la red aprenda a mapear correctamente, los autores proponen la pérdida de consistencia del ciclo.
La pérdida del discriminador y la pérdida del generador son similares a las que se usan en pix2pix.
La consistencia del ciclo significa que los resultados deberían ser casi igual a la entrada original. Por ejemplo, si se traduce una oración del inglés al francés y luego se vuelve a traducir del francés al inglés, la oración resultante debería ser igual a la oración original.
En la pérdida de consistencia del ciclo,
Se pasa la imagen por el generador que genera la imagen .
La imagen generada se pasa por el generador que nos da la imagen del ciclo .
Se calcula el error absoluto de la media entre y .
Como se mostró anteriormente, el generador tiene que traducir la imagen a la imagen . Según la pérdida de identidad, si se ingresa la imagen en el generador , debería dar la imagen real o algo que sea muy parecido a la .
Si ejecuta el modelo de cebra a caballo en un caballo o el modelo de caballo a cebra en una cebra, la imagen no se debería modificar tanto si la imagen ya contiene la clase de destino.
Inicialice los optimizadores para todos los generadores y discriminadores.
Puntos de verificación
Entrenamiento
Nota: Este modelo de ejemplo es entrenado para menos épocas (10) que en el artículo (200) para que la duración de entrenamiento de este tutorial sea prudente. Las imágenes generadas tendrán mucha menos calidad.
A pesar de que el bucle de entrenamiento parece complicado, consiste en cuatro pasos básicos:
Obtener las predicciones.
Calcular la pérdida.
Calcular los gradientes con la retropropagación.
Aplicar los gradientes en el optimizador.
Generar con el conjunto de datos de prueba
Próximos pasos
En este tutorial se muestra cómo implementar CycleGAN a partir del generador y el discriminador que se implementan en el tutorial de Pix2Pix. Su próximo paso a tomar puede ser usar diferentes conjuntos de datos de TensorFlow Datasets.
También puede probar entrenarlo para más épocas para mejorar los resultados o puede implementar el generador ResNet modificado que se usa en el artículo en vez de usar el generador U-Net que se usa aquí.