Exemple n°1 — Ancienne gare : voir la comparaison en HD 24 bits, photo originale CC-BY-SA @siv-athens.
Comme on le voit à la télé ! Et si vous pouviez augmenter la résolution de vos photos grâce à la technologie des laboratoires CSI ? Grâce au deep learning et #NeuralEnhance
, il est désormais possible d'entraîner un réseau de neurones pour zoomer sur vos images à 2x voire 4x. Vous obtiendrez des résultats encore meilleurs en augmentant le nombre de neurones ou en vous entraînant avec un ensemble de données similaire à votre image basse résolution.
Le piège ? Le réseau neuronal hallucine des détails sur la base de son entraînement à partir d’exemples d’images. Il ne s'agit pas de reconstruire votre photo exactement comme elle l'aurait été si elle était en HD. Cela n'est possible qu'à Hollywood, mais utiliser l'apprentissage profond comme « IA créative » fonctionne et c'est tout aussi cool ! Voici comment vous pouvez commencer...
Le script principal s'appelle enhance.py
, que vous pouvez exécuter avec Python 3.4+ une fois configuré comme ci-dessous. L'argument --device
qui vous permet de spécifier le GPU ou le CPU à utiliser. Pour les exemples ci-dessus, voici les résultats de performances :
La valeur par défaut est d'utiliser --device=cpu
, si vous avez déjà configuré une carte NVIDIA avec CUDA, essayez --device=gpu0
. Sur le processeur, vous pouvez également définir la variable d'environnement sur OMP_NUM_THREADS=4
, ce qui est particulièrement utile lors de l'exécution du script plusieurs fois en parallèle.
Une liste d'exemples de lignes de commande que vous pouvez utiliser avec les modèles pré-entraînés fournis dans les versions 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
Voici une liste des modèles, des types d'images et des niveaux de zoom actuellement pris en charge dans un seul tableau.
CARACTÉRISTIQUES | --model=default | --model=repair | --model=denoise | --model=deblur |
---|---|---|---|---|
--type=photo | 2x | 1x | … | … |
Des modèles pré-entraînés sont fournis dans les versions de GitHub. Entraîner vous-même est un processus délicat qui peut vous obliger à choisir des paramètres en fonction de votre ensemble de données d'image.
# 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
Exemple n°2 — Lobby bancaire : voir la comparaison en HD 24 bits, photo originale CC-BY-SA @benarent.
Le moyen le plus simple de démarrer est d’installer Docker. Ensuite, vous devriez pouvoir télécharger et exécuter l'image prédéfinie à l'aide de l'outil de ligne de commande docker
. Découvrez-en plus sur l’image alexjc/neural-enhance
sur sa page Docker Hub.
Voici la manière la plus simple d'appeler le script à l'aide docker
, en supposant que vous soyez familier avec l'utilisation de l'argument -v
pour monter des dossiers, vous pouvez l'utiliser directement pour spécifier les fichiers à améliorer :
# 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
Image unique — En pratique, nous vous suggérons de configurer un alias appelé enhance
pour exposer automatiquement le dossier contenant votre image spécifiée, afin que le script puisse le lire et stocker les résultats là où vous pouvez y accéder. Voici comment procéder dans votre console de terminal sous OSX ou 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
Images multiples — Pour améliorer plusieurs images d'affilée (plus rapidement) à partir d'un dossier ou d'une spécification générique, assurez-vous de citer l'argument de la commande alias :
# Process multiple images, make sure to quote the argument!
enhance --zoom=2 " images/*.jpg "
Si vous souhaitez exécuter sur votre GPU NVIDIA, vous pouvez à la place modifier l'alias pour utiliser l'image alexjc/neural-enhance:gpu
fournie avec CUDA et CUDNN préinstallés. Ensuite, exécutez-le dans nvidia-docker et il devrait utiliser votre matériel physique !
Ce projet nécessite Python 3.4+ et vous aurez également besoin numpy
et scipy
(bibliothèques de calcul numérique) ainsi que python3-dev
installé sur l'ensemble du système. Si vous souhaitez des instructions plus détaillées, suivez celles-ci :
Après avoir récupéré le référentiel, vous pouvez exécuter les commandes suivantes depuis votre terminal pour configurer un environnement 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
Après cela, vous devriez avoir pillow
, theano
et lasagne
installés dans votre environnement virtuel. Vous devrez également télécharger ce réseau neuronal pré-entraîné (VGG19, 80 Mo) et le placer dans le même dossier que le script à exécuter. Pour tout désinstaller, vous pouvez simplement supprimer le dossier #/pyvenv/
.
Exemple n°3 — Super-résolution spécialisée pour les visages, formée uniquement sur des exemples HD de visages de célébrités. La qualité est nettement supérieure lors de la réduction du domaine des « photos » en général.
Ce code utilise une combinaison de techniques issues des articles suivants, ainsi que quelques améliorations mineures encore à documenter (surveillez ce référentiel pour les mises à jour) :
Un merci tout spécial pour leur aide et leur soutien de diverses manières :
Il existe un compilateur d'extension Python appelé Cython, et il est manquant ou mal installé. Essayez de l'obtenir directement à partir du gestionnaire de packages système plutôt que de PIP.
CORRECTIF : sudo apt-get install cython3
Cela se produit lorsque vous utilisez sans GPU et que les bibliothèques CPU n'ont pas été trouvées (par exemple libblas
). Les expressions du réseau neuronal ne peuvent pas être évaluées par Theano et cela génère une exception.
CORRECTIF : sudo apt-get install libblas-dev libopenblas-dev
Vous devez installer Lasagne et Theano directement à partir des versions spécifiées dans requirements.txt
, plutôt qu'à partir des versions PIP. Ces alternatives sont plus anciennes et n'ont pas les fonctionnalités requises.
CORRECTIF : python3 -m pip install -r requirements.txt
Il semble que votre terminal soit mal configuré et incompatible avec la façon dont Python traite les paramètres régionaux. Vous devrez peut-être modifier cela dans votre .bashrc
ou un autre script de démarrage. Alternativement, cette commande le corrigera une fois pour cette instance de shell.
CORRECTIF : export LC_ALL=en_US.UTF-8
Exemple n°4 — Street View : voir la comparaison en HD 24 bits, photo originale CC-BY-SA @cyalex.