Generador de carteles de género para películas y transferencia de estilo de imagen - proyectos de estudiantes del curso "Redes neuronales" Tecnosfera





Hablamos de los proyectos de graduación de graduados de cursos semestrales sobre desarrollo móvil en Technopark (Universidad Técnica Estatal Bauman de Moscú) (publicaciones anteriores: " Desarrollo de aplicaciones para iOS ", " Desarrollo de aplicaciones para Android "). Hoy compartimos proyectos interesantes de estudiantes del segundo semestre de la Tecnosfera, un proyecto educativo conjunto con la Universidad Estatal de Moscú con un programa de capacitación anual en el campo del análisis y trabajo con grandes cantidades de datos. Los estudiantes toman cursos de aprendizaje automático, búsqueda de información, redes neuronales y otras disciplinas. El método de proyectos se utiliza en la docencia, por lo que resumimos los resultados del semestre sobre la defensa de los proyectos de los estudiantes.



Los experimentos juegan un papel importante en el proceso educativo. Los proyectos de los estudiantes no pueden prescindir de ellos: los chicos prueban diferentes enfoques, métodos, arquitecturas, herramientas. A menudo, después del experimento, los estudiantes abandonan la elección de tecnología y algoritmo en favor de un nuevo enfoque. Esta es una gran parte de la experiencia y el aprendizaje. A continuación hablaremos de dichas etapas en el desarrollo de dos proyectos de estudiantes.



  • Carteles de películas GAN / proyecto de incrustación.
  • Proyecto Cyrclegan en serie de dibujos animados.


CycleGAN en serie de dibujos animados



Los autores de este proyecto decidieron utilizar la técnica CycleGAN para transferir imágenes de una película animada a otra. GAN (red generativa de confrontación) es un método para entrenar modelos de imagen a imagen. Se entrenan dos redes neuronales: la discriminadora y la generadora, que se encuentran en relaciones antagónicas. El generador intenta aumentar el error de clasificación, el discriminador intenta disminuirlo. Y CycleGAN es un método para transferir el aprendizaje de imagen a imagen en modo no supervisado.



Digamos que hay dos dominios de imagen: A y B. Se crean dos generadores y dos discriminadores: gen_A2B, gen_B2A, disc_A, disc_B. Es necesario que el generador gen_A2B cree la misma imagen a partir de la imagen de A, pero para que esté en el dominio B. Para hacer esto, ingrese la pérdida de consistencia del ciclo:



l1loss(gen_b2a(gen_a2b(a)), a)


En este caso, el generador generará imágenes que engañan al discriminador, pero al mismo tiempo retienen el contenido original.



Arquitectura de la solución:



Generador:





Los bloques Resnet le permiten recordar la imagen original. También usamos la normalización de instancias en lugar de la normalización por lotes, porque esta última agrega ruido de otras imágenes.



Discriminado:





No había un conjunto de imágenes listo para usar, así que elegimos imágenes de fotogramas clave de largometrajes de anime: para A, usamos "El viaje de Chihiro" de Hayao Miyazaki, y para B - "Tu nombre" de Makoto Shinkai. Dado que CycleGAN no es muy adecuado para cambios drásticos (por ejemplo, forma), los autores tomaron ambos dominios del anime.



Primero se utilizó LSGAN como función de pérdida, y luego WGAN GP, porque LSGAN creó artefactos extraños y perdió colores durante el entrenamiento.



Para el entrenamiento, usamos un modelo previamente entrenado en horse2zebra (los pesos se encontraron solo para los generadores). Ella ya entiende que necesita guardar el contenido de la imagen, por lo que los autores desde el principio obtuvieron un buen autocodificador, que solo necesitaba aprender a engañar al discriminador.



Al comienzo del entrenamiento, establecimos un valor grande para la pérdida de identidad por pérdida de ciclo y el recorte de gradiente, pero cuando pasaron suficientes épocas, decidimos disminuir gradualmente estos valores para que el generador comenzara a intentar engañar al discriminador un poco más.



También intentamos utilizar grandes redes pre-entrenadas (VGG, RESNET, Inception) como discriminador, pero son muy grandes y el entrenamiento se ralentizó mucho.



Como resultado, el trabajo logró lograr que el estilo se transfiera cerca del original, mientras se mantiene el esquema de color general (originales en la parte superior, imágenes generadas a continuación):











Código del proyecto: https://github.com/IlyasKharunov/Cyclegan_project



Equipo del proyecto: Ilyas Kharunov, Oleg Verbin.



Video con protección de proyectos .



Carteles de películas GAN / embed



El próximo proyecto es interesante desde el punto de vista del camino que ha tomado el alumno. A diferencia de otros proyectos de estudiantes, Dmitry hizo el trabajo por su cuenta. Este camino resultó ser más difícil que el de otros, pero los resultados y conclusiones son interesantes.



El autor decidió crear una red que generaría carteles para películas en los géneros dados. Por ejemplo, tener carteles de películas de terror en colores oscuros, de comedias en colores claros, etc.



Del sitio web de IMDB, el autor tomó 41 mil carteles de películas en veinte géneros para el período 1970-2020. Más tarde resultó que había muy pocas imágenes para algunos géneros, por lo que Dmitry equilibró el set por géneros y, como resultado, quedaron 32 mil carteles.



Luego, el alumno aplicó una red neuronal con arquitectura DCGAN para generar imágenes sin género. Trabajó con carteles de tamaño 64x128.





Los resultados resultaron ser espeluznantes:





Luego, el autor probó la arquitectura CVAE + DCGAN:





Y también VAE sin GAN y GAN con clasificador. Llegué a la conclusión de que el conjunto de carteles ensamblados es demasiado complejo para estos métodos. Luego, el autor aplicó GAN condicional: esto es lo mismo que DCGAN, ahora solo se introdujeron géneros tanto en el generador como en el discriminador. El vector latente z se tomó con una longitud de 100, géneros en formato caliente con una longitud de 20, dando como resultado un vector con una longitud de 120. Se agregó el género a la respuesta y se realizó una corrida adicional sobre una capa lineal.



Logré lograr el siguiente resultado:





Como puede ver, el estudiante estaba interesado en probar diferentes enfoques y los resultados fueron interesantes. Auto recibió mucha experiencia nueva, llegó a la conclusión de que para implementar tal idea, es necesario tomar inmediatamente una red neuronal más compleja, por ejemplo, StyleGAN.



Proceso de aprendizaje en red:





Equipo de proyecto: Dmitry Piterkin.



Video con protección de proyectos .






Próximamente te contaremos los proyectos de diploma más interesantes en desarrollo C ++ y Go, desarrollo front-end y creación de interfaces. Puede leer más sobre nuestros proyectos educativos en este enlace . Y con más frecuencia van al canal Technostream , aparecen regularmente nuevos videos de capacitación sobre programación, desarrollo y otras disciplinas.



All Articles