Beispiel Nr. 1 – Alter Bahnhof: Vergleich in 24-Bit-HD anzeigen, Originalfoto CC-BY-SA @siv-athens.
Wie im Fernsehen gesehen! Was wäre, wenn Sie die Auflösung Ihrer Fotos mithilfe der Technologie der CSI-Labors erhöhen könnten? Dank Deep Learning und #NeuralEnhance
ist es jetzt möglich, einem neuronalen Netzwerk beizubringen, Ihre Bilder um das Zweifache oder sogar das Vierfache zu vergrößern. Noch bessere Ergebnisse erzielen Sie, wenn Sie die Anzahl der Neuronen erhöhen oder mit einem Datensatz trainieren, der Ihrem Bild mit niedriger Auflösung ähnelt.
Der Haken? Das neuronale Netzwerk halluziniert Details basierend auf seinem Training anhand von Beispielbildern. Ihr Foto wird nicht genau so rekonstruiert, wie es in HD gewesen wäre. Das ist nur in Hollywood möglich – aber Deep Learning als „Kreative KI“ zu nutzen funktioniert und ist genauso cool! So können Sie loslegen...
Das Hauptskript heißt enhance.py
und kann mit Python 3.4+ ausgeführt werden, sobald es wie unten beschrieben eingerichtet ist. Das Argument --device
, mit dem Sie angeben können, welche GPU oder CPU verwendet werden soll. Für die obigen Beispiele sind hier die Leistungsergebnisse:
Standardmäßig wird --device=cpu
verwendet. Wenn Sie bereits eine NVIDIA-Karte mit CUDA eingerichtet haben, versuchen Sie es --device=gpu0
. Auf der CPU können Sie die Umgebungsvariable auch auf OMP_NUM_THREADS=4
setzen, was am nützlichsten ist, wenn das Skript mehrmals parallel ausgeführt wird.
Eine Liste von Beispielbefehlszeilen, die Sie mit den vorab trainierten Modellen verwenden können, die in den GitHub-Versionen bereitgestellt werden:
# 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
Hier ist eine Liste der derzeit unterstützten Modelle, Bildtypen und Zoomstufen in einer Tabelle.
MERKMALE | --model=default | --model=repair | --model=denoise | --model=deblur |
---|---|---|---|---|
--type=photo | 2x | 1x | … | … |
Vorab trainierte Modelle werden in den GitHub-Versionen bereitgestellt. Das eigene Training ist ein heikler Prozess, bei dem Sie möglicherweise Parameter basierend auf Ihrem Bilddatensatz auswählen müssen.
# 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
Beispiel Nr. 2 – Banklobby: Vergleich in 24-Bit-HD anzeigen, Originalfoto CC-BY-SA @benarent.
Der einfachste Weg, loszulegen, ist die Installation von Docker. Anschließend sollten Sie in der Lage sein, das vorgefertigte Image mit dem docker
-Befehlszeilentool herunterzuladen und auszuführen. Erfahren Sie mehr über das alexjc/neural-enhance
Image auf der Docker-Hub-Seite.
Dies ist die einfachste Möglichkeit, das Skript mit docker
aufzurufen. Vorausgesetzt, Sie sind mit der Verwendung des Arguments -v
zum Mounten von Ordnern vertraut, können Sie dies direkt verwenden, um die zu verbessernden Dateien anzugeben:
# 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
Einzelnes Bild – In der Praxis empfehlen wir Ihnen, einen Alias namens enhance
einzurichten, um den Ordner mit Ihrem angegebenen Bild automatisch verfügbar zu machen, damit das Skript es lesen und die Ergebnisse dort speichern kann, wo Sie darauf zugreifen können. So können Sie es in Ihrer Terminalkonsole unter OSX oder Linux tun:
# 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
Mehrere Bilder – Um mehrere Bilder hintereinander (schneller) aus einem Ordner oder einer Platzhalterspezifikation zu verbessern, stellen Sie sicher, dass Sie das Argument für den Alias-Befehl in Anführungszeichen setzen:
# Process multiple images, make sure to quote the argument!
enhance --zoom=2 " images/*.jpg "
Wenn Sie es auf Ihrer NVIDIA-GPU ausführen möchten, können Sie stattdessen den Alias ändern, um das Image alexjc/neural-enhance:gpu
zu verwenden, das mit vorinstalliertem CUDA und CUDNN geliefert wird. Führen Sie es dann in nvidia-docker aus und es sollte Ihre physische Hardware verwenden!
Für dieses Projekt ist Python 3.4+ erforderlich. Außerdem müssen numpy
und scipy
(Bibliotheken für numerische Berechnungen) sowie python3-dev
systemweit installiert sein. Wenn Sie detailliertere Anweisungen wünschen, befolgen Sie diese:
Nachdem Sie das Repository abgerufen haben, können Sie die folgenden Befehle von Ihrem Terminal aus ausführen, um eine lokale Umgebung einzurichten:
# 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
Danach sollten pillow
, theano
und lasagne
in Ihrer virtuellen Umgebung installiert sein. Sie müssen außerdem dieses vorab trainierte neuronale Netzwerk (VGG19, 80 MB) herunterladen und im selben Ordner wie das auszuführende Skript ablegen. Um alles zu deinstallieren, können Sie einfach den Ordner #/pyvenv/
löschen.
Beispiel Nr. 3 – Spezielle Superauflösung für Gesichter, trainiert nur an HD-Beispielen von Prominentengesichtern. Bei der Eingrenzung der Domain von „Fotos“ im Allgemeinen ist die Qualität deutlich höher.
Dieser Code verwendet eine Kombination von Techniken aus den folgenden Artikeln sowie einige kleinere Verbesserungen, die noch dokumentiert werden müssen (sehen Sie sich dieses Repository für Aktualisierungen an):
Besonderer Dank für ihre Hilfe und Unterstützung auf vielfältige Weise:
Es gibt einen Python-Erweiterungscompiler namens Cython, der fehlt oder nicht ordnungsgemäß installiert ist. Versuchen Sie, es direkt vom Systempaketmanager und nicht von PIP abzurufen.
FIX: sudo apt-get install cython3
Dies passiert, wenn Sie ohne GPU arbeiten und die CPU-Bibliotheken nicht gefunden wurden (z. B. libblas
). Die Ausdrücke des neuronalen Netzwerks können von Theano nicht ausgewertet werden und es wird eine Ausnahme ausgelöst.
FIX: sudo apt-get install libblas-dev libopenblas-dev
Sie müssen Lasagne und Theano direkt von den in requirements.txt
angegebenen Versionen und nicht von den PIP-Versionen installieren. Diese Alternativen sind älter und verfügen nicht über die erforderlichen Funktionen.
FIX: python3 -m pip install -r requirements.txt
Anscheinend ist Ihr Terminal falsch konfiguriert und nicht mit der Art und Weise kompatibel, wie Python mit Gebietsschemas umgeht. Möglicherweise müssen Sie dies in Ihrer .bashrc
oder einem anderen Startskript ändern. Alternativ kann dieser Befehl das Problem einmalig für diese Shell-Instanz beheben.
FIX: export LC_ALL=en_US.UTF-8
Beispiel Nr. 4 – Street View: Ansichtsvergleich in 24-Bit-HD, Originalfoto CC-BY-SA @cyalex.