Este repositorio contiene una implementación de PyTorch del algoritmo Deep Dream (: enlace: blog de Mordvintstev et al.).
¡Tiene soporte completo para el uso de la línea de comandos y un Jupyter Notebook !
Y te dará el poder de crear estas extrañas imágenes de aspecto psicodélico:
No está mal, ¿eh?
¡Te recomiendo encarecidamente que comiences con el cuaderno Jupyter que he creado!
Nota: es bastante grande, ~10 MB, por lo que puede que sean necesarios un par de intentos para cargarlo en el navegador aquí en GitHub.
En pocas palabras, el algoritmo maximiza las activaciones de las capas de red elegidas realizando un ascenso de gradiente .
Entonces, a partir de una imagen de entrada como la de la izquierda después de "soñar", obtenemos la imagen de la derecha:
¿Quién hubiera dicho que las redes neuronales tenían escondida esta creatividad en su interior? ?
La mayoría de los repositorios originales de Deep Dream se escribieron en Caffe y los escritos en PyTorch suelen ser muy difíciles de leer y comprender. Este repositorio es un intento de crear el repositorio de DeepDream más limpio que conozco + ¡está escrito en PyTorch! ❤️
¡Aquí hay algunos ejemplos que puedes crear usando este código!
Al utilizar capas menos profundas de redes neuronales, obtendrá patrones de nivel inferior (bordes, círculos, colores, etc.) como resultado:
Aquí las primeras 2 imágenes provienen de ResNet50 y la última proviene de GoogLeNet (ambas previamente entrenadas en ImageNet).
Al utilizar capas de red más profundas, obtendrás patrones de nivel superior (ojos, hocicos, cabezas de animales):
El primero y el tercero se crearon usando VGG 16 (ImageNet) y el del medio usando ResNet50 previamente entrenado en Places 365.
Si mantenemos todos los demás parámetros iguales pero intercambiamos los pesos previamente entrenados, obtenemos estos:
Izquierda: ResNet50-ImageNet (podemos ver más características de animales) Derecha: ResNet50-Places365 (material construido por humanos, etc.).
Los sueños se realizan en múltiples resoluciones de imágenes apiladas "verticalmente" (a esto lo llamamos pirámide de imágenes ).
De izquierda a derecha el único parámetro que cambió fue el tamaño de la pirámide (de izquierda a derecha: 3, 7, 9 niveles).
Jugar con la proporción piramidal tiene un efecto similar/relacionado: la idea básica es que el área relativa de la imagen que las neuronas más profundas pueden modificar y "ver" (el llamado campo receptivo de la red) está aumentando y nosotros nos hacemos cada vez más grandes. características como ojos que se salen (de izquierda a derecha: 1.1, 1.5, 1.8):
Nota: ¡puedes ver los parámetros exactos utilizados para crear estas imágenes codificadas en el nombre del archivo!
¡Asegúrate de revisar el cuaderno de Jupyter! Lo he explicado detalladamente.
¡Aquí hay algunos ejemplos adicionales que puede crear usando este código!
La idea aquí es que cualquier cosa que sueñe la red simplemente lo devuelva a su entrada y aplique una transformación geométrica.
Si aplicamos sólo el zoom central obtenemos esto:
Aplicar un zoom central y al mismo tiempo aplicar una rotación de 3 grados por cuadro produce esto:
Finalmente, si hacemos una traducción simple (5 px por cuadro de arriba a la izquierda hacia abajo a la derecha):
Esperemos que esto no te haya roto el cerebro: se siente como la web 1.0 de principios de la década de 2000. Ten paciencia conmigo.
En lugar de devolver la salida a la entrada, simplemente aplicamos el algoritmo por cuadro y aplicamos alguna combinación lineal:
La fusión lineal simplemente combina el cuadro actual con el último para reducir el parpadeo (aquí usé 0,85)
Nota: todas las imágenes/GIF de Deepdream fueron producidas por mí; los créditos de los artistas de imágenes originales se muestran a continuación.
git clone https://github.com/gordicaleksa/pytorch-deepdream
cd path_to_repo
conda env create
desde el directorio del proyecto (esto creará un nuevo entorno conda).activate pytorch-deepdream
(para ejecutar scripts desde su consola o configurar el intérprete en su IDE)¡Eso es todo! Debería funcionar ejecutando el archivo Environment.yml de forma inmediata que se ocupa de las dependencias.
Nota: Si desea utilizar las funciones de video que tengo, necesitará ffmpeg en la ruta de su sistema.
El paquete PyTorch pip vendrá incluido con alguna versión de CUDA/cuDNN, pero se recomienda encarecidamente que instale un CUDA para todo el sistema de antemano, principalmente debido a los controladores de GPU. También recomiendo usar el instalador Miniconda como una forma de instalar Conda en su sistema. Siga los puntos 1 y 2 de esta configuración y utilice las versiones más actualizadas de Miniconda y CUDA/cuDNN para su sistema.
Simplemente ejecute jupyter notebook
desde su consola Anaconda y se abrirá una sesión en su navegador predeterminado.
¡Abre The Annotated DeepDream.ipynb
y estarás listo para jugar!
Nota: si DLL load failed while importing win32api: The specified module could not be found
¡Simplemente haga pip uninstall pywin32
y luego pip install pywin32
o conda install pywin32
deberían solucionarlo!
Solo necesita vincular el entorno Python que creó en la sección de configuración.
Navegue hasta/active su env si está usando Anaconda (y espero que lo haga) y puede usar los comandos que he vinculado a continuación.
Consejo: Coloque sus imágenes/videos dentro del directorio data/input/
y luego podrá hacer referencia a sus archivos (imágenes/videos) por su nombre en lugar de usar rutas absolutas/relativas.
Para crear algunas imágenes estáticas de Deep Dream, ejecute el siguiente comando:
python deepdream.py --input <img_name> --img_width 600
Esto utilizará la configuración predeterminada, pero inmediatamente obtendrá un resultado significativo guardado en:
data/out-images/VGG16_EXPERIMENTAL_IMAGENET/
Nota: el directorio de salida cambiará según el modelo y los pesos previamente entrenados que utilice.
Para obtener el vídeo de 30 fotogramas de Ouroboros listo para usar, haga lo siguiente:
python deepdream.py --input <img_name> --create_ouroboros --ouroboros_length 30
Volcará los fotogramas intermedios en data/out-videos/VGG16_EXPERIMENTAL_IMAGENET/
y guardará el vídeo final en data/out-videos
.
Para crear un video de Deep Dream, ejecute este comando:
python deepdream.py --input <mp4 video name>
Volcará los fotogramas intermedios en data/out-videos/tmp_out
y guardará el vídeo final en data/out-videos
.
Bueno, ¡disfruta jugando con este proyecto! Aquí hay algunos resultados adicionales y hermosos:
Una GPU con más de 2 GB será más que suficiente.
Podrás crear imágenes de DeepDream, Ouroboros y videos de DeepDream.
Si no tienes una GPU, el código se ejecutará automáticamente en la CPU pero algo más lento (especialmente para vídeos).
Si tiene dificultades para comprender DeepDream, hice una descripción general del algoritmo en este video:
¡Y también el Jupyter Notebook que creé es el mejor lugar para comenzar!
Estos repositorios me parecieron útiles (mientras desarrollaba este):
Encontré las imágenes que estaba usando aquí:
Otras imágenes ya son clásicos en los mundos NST y DeepDream.
Los modelos previamente entrenados de Places 365 provienen de este increíble repositorio.
Si encuentra este código útil para su investigación, cite lo siguiente:
@misc{Gordić2020DeepDream,
author = {Gordić, Aleksa},
title = {pytorch-deepdream},
year = {2020},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/gordicaleksa/pytorch-deepdream}},
}
Si le encantaría tener más contenido relacionado con la IA en su vida, considere: