Ejemplo n.º 1 : Estación antigua: ver comparación en HD de 24 bits, foto original CC-BY-SA @siv-athens.
¡Como se ve en la televisión! ¿Qué pasaría si pudieras aumentar la resolución de tus fotografías utilizando tecnología de los laboratorios CSI? Gracias al aprendizaje profundo y #NeuralEnhance
, ahora es posible entrenar una red neuronal para acercar sus imágenes a 2x o incluso 4x. Obtendrá resultados aún mejores si aumenta la cantidad de neuronas o entrena con un conjunto de datos similar a su imagen de baja resolución.
¿El truco? La red neuronal alucina detalles basándose en su entrenamiento a partir de imágenes de ejemplo. No se trata de reconstruir tu foto exactamente como habría sido si fuera HD. Eso solo es posible en Hollywood, pero usar el aprendizaje profundo como "IA creativa" funciona y es igual de genial. Así es como puedes empezar...
El script principal se llama enhance.py
, que puede ejecutar con Python 3.4+ una vez que esté configurado como se muestra a continuación. El argumento --device
que le permite especificar qué GPU o CPU usar. Para los ejemplos anteriores, estos son los resultados de rendimiento:
El valor predeterminado es usar --device=cpu
, si ya tiene la tarjeta NVIDIA configurada con CUDA, intente --device=gpu0
. En la CPU, también puede configurar la variable de entorno en OMP_NUM_THREADS=4
, lo cual es más útil cuando se ejecuta el script varias veces en paralelo.
Una lista de líneas de comando de ejemplo que puede usar con los modelos previamente entrenados proporcionados en las versiones de GitHub:
# Run the super-resolution script to repair JPEG artefacts, zoom factor 1:1.
python3 enhance.py --type=photo --model=repair --zoom=1 broken.jpg
# Process multiple good quality images with a single run, zoom factor 2:1.
python3 enhance.py --type=photo --zoom=2 file1.jpg file2.jpg
# Display output images that were given `_ne?x.png` suffix.
open * _ne ? x.png
Aquí hay una lista de modelos, tipos de imágenes y niveles de zoom actualmente admitidos en una tabla.
CARACTERÍSTICAS | --model=default | --model=repair | --model=denoise | --model=deblur |
---|---|---|---|---|
--type=photo | 2x | 1x | … | … |
Los modelos previamente entrenados se proporcionan en las versiones de GitHub. Entrenar el suyo propio es un proceso delicado que puede requerir que elija parámetros basados en su conjunto de datos de imágenes.
# Remove the model file as don't want to reload the data to fine-tune it.
rm -f ne ? x * .pkl.bz2
# Pre-train the model using perceptual loss from paper [1] below.
python3.4 enhance.py --train " data/*.jpg " --model custom --scales=2 --epochs=50
--perceptual-layer=conv2_2 --smoothness-weight=1e7 --adversary-weight=0.0
--generator-blocks=4 --generator-filters=64
# Train the model using an adversarial setup based on [4] below.
python3.4 enhance.py --train " data/*.jpg " --model custom --scales=2 --epochs=250
--perceptual-layer=conv5_2 --smoothness-weight=2e4 --adversary-weight=1e3
--generator-start=5 --discriminator-start=0 --adversarial-start=5
--discriminator-size=64
# The newly trained model is output into this file...
ls ne ? x-custom- * .pkl.bz2
Ejemplo n.º 2 : vestíbulo del banco: ver comparación en HD de 24 bits, foto original CC-BY-SA @benarent.
La forma más sencilla de empezar a utilizarlo es instalar Docker. Luego, debería poder descargar y ejecutar la imagen prediseñadas utilizando la herramienta de línea de comandos docker
. Obtenga más información sobre la imagen alexjc/neural-enhance
en su página Docker Hub.
Esta es la forma más sencilla de llamar al script usando docker
. Suponiendo que esté familiarizado con el uso del argumento -v
para montar carpetas, puede usar esto directamente para especificar los archivos que desea mejorar:
# Download the Docker image and show the help text to make sure it works.
docker run --rm -v ` pwd ` :/ne/input -it alexjc/neural-enhance --help
Imagen única : en la práctica, le sugerimos que configure un alias llamado enhance
para exponer automáticamente la carpeta que contiene la imagen especificada, de modo que el script pueda leerla y almacenar los resultados donde pueda acceder a ellos. Así es como puedes hacerlo en tu consola terminal en OSX o Linux:
# Setup the alias. Put this in your .bashrc or .zshrc file so it's available at startup.
alias enhance= ' function ne() { docker run --rm -v "$(pwd)/`dirname ${@:$#}`":/ne/input -it alexjc/neural-enhance ${@:1:$#-1} "input/`basename ${@:$#}`"; }; ne '
# Now run any of the examples above using this alias, without the `.py` extension.
enhance --zoom=1 --model=repair images/broken.jpg
Varias imágenes : para mejorar varias imágenes seguidas (más rápido) desde una carpeta o especificación comodín, asegúrese de citar el argumento del comando alias:
# Process multiple images, make sure to quote the argument!
enhance --zoom=2 " images/*.jpg "
Si desea ejecutar en su GPU NVIDIA, puede cambiar el alias para usar la imagen alexjc/neural-enhance:gpu
que viene con CUDA y CUDNN preinstalados. Luego ejecútelo dentro de nvidia-docker y debería usar su hardware físico.
Este proyecto requiere Python 3.4+ y también necesitará numpy
y scipy
(bibliotecas de computación numérica), así como python3-dev
instalado en todo el sistema. Si desea instrucciones más detalladas, siga estas:
Después de buscar el repositorio, puede ejecutar los siguientes comandos desde su terminal para configurar un entorno local:
# Create a local environment for Python 3.x to install dependencies here.
python3 -m venv pyvenv --system-site-packages
# If you're using bash, make this the active version of Python.
source pyvenv/bin/activate
# Setup the required dependencies simply using the PIP module.
python3 -m pip install --ignore-installed -r requirements.txt
Después de esto, deberías tener instalado pillow
, theano
y lasagne
en tu entorno virtual. También deberá descargar esta red neuronal previamente entrenada (VGG19, 80 Mb) y colocarla en la misma carpeta que el script para ejecutar. Para desinstalar todo, simplemente puede eliminar la carpeta #/pyvenv/
.
Ejemplo n.º 3 : Súper resolución especializada para rostros, entrenada únicamente con ejemplos en HD de rostros de celebridades. La calidad es significativamente mayor cuando se limita el dominio a "fotos" en general.
Este código utiliza una combinación de técnicas de los siguientes artículos, así como algunas mejoras menores aún por documentar (consulte este repositorio para obtener actualizaciones):
Un agradecimiento especial por su ayuda y apoyo de varias maneras:
Hay un compilador de extensión de Python llamado Cython y falta o está instalado incorrectamente. Intente obtenerlo directamente desde el administrador de paquetes del sistema en lugar de PIP.
REVISIÓN: sudo apt-get install cython3
Esto sucede cuando estás ejecutando sin una GPU y no se encontraron las bibliotecas de la CPU (por ejemplo, libblas
). Theano no puede evaluar las expresiones de la red neuronal y está generando una excepción.
REVISIÓN: sudo apt-get install libblas-dev libopenblas-dev
Debe instalar Lasagne y Theano directamente desde las versiones especificadas en requirements.txt
, en lugar de desde las versiones PIP. Estas alternativas son más antiguas y no tienen las funciones requeridas.
REVISIÓN: python3 -m pip install -r requirements.txt
Parece que su terminal está mal configurado y no es compatible con la forma en que Python trata las configuraciones regionales. Es posible que deba cambiar esto en su .bashrc
u otro script de inicio. Alternativamente, este comando lo arreglará una vez para esta instancia de shell.
REVISIÓN: export LC_ALL=en_US.UTF-8
Ejemplo n.º 4 : Street View: comparación de vistas en HD de 24 bits, foto original CC-BY-SA @cyalex.