Dieses Repo enthält eine PyTorch-Implementierung des Deep Dream-Algorithmus (:Link: Blog von Mordvintstev et al.).
Es bietet volle Unterstützung für die Befehlszeilennutzung und ein Jupyter-Notebook !
Und es wird Ihnen die Macht geben, diese seltsamen, psychedelisch anmutenden Bilder zu erstellen:
Nicht schlecht, oder?
Ich empfehle Ihnen dringend, mit dem Jupyter-Notizbuch zu beginnen, das ich erstellt habe!
Hinweis: Es ist ziemlich groß, ca. 10 MB, daher kann es einige Versuche dauern, es hier auf GitHub im Browser zu laden.
Kurz gesagt maximiert der Algorithmus die Aktivierungen ausgewählter Netzwerkschichten durch einen Gradientenanstieg .
Aus einem Eingabebild wie dem links erhalten wir nach dem „Träumen“ das Bild rechts:
Wer hätte gedacht, dass neuronale Netze diese Kreativität in sich bergen? ?
Die meisten der ursprünglichen Deep Dream-Repos wurden in Caffe geschrieben und die in PyTorch geschriebenen sind normalerweise sehr schwer zu lesen und zu verstehen. Dieses Repo ist ein Versuch, das sauberste DeepDream-Repo zu erstellen, das mir bekannt ist + es ist in PyTorch geschrieben! ❤️
Hier sind einige Beispiele, die Sie mit diesem Code erstellen können!
Durch die Verwendung flacherer Schichten neuronaler Netze erhalten Sie Muster niedrigerer Ebenen (Kanten, Kreise, Farben usw.) als Ausgabe:
Hier stammten die ersten beiden Bilder von ResNet50 und das letzte von GoogLeNet (beide vorab auf ImageNet trainiert).
Durch die Verwendung tieferer Netzwerkschichten erhalten Sie Muster höherer Ebenen (Augen, Schnauzen, Tierköpfe):
Der 1. und 3. wurden mit VGG 16 (ImageNet) erstellt und der mittlere mit ResNet50, vorab trainiert auf Places 365.
Wenn wir alle anderen Parameter gleich lassen, aber die vorab trainierten Gewichte austauschen, erhalten wir Folgendes:
Links: ResNet50-ImageNet (wir können mehr Tiermerkmale sehen) Rechts: ResNet50-Places365 (von Menschen gebaute Dinge usw.).
Das Träumen wird mit mehreren „vertikal“ gestapelten Bildauflösungen durchgeführt (wir nennen dies eine Bildpyramide ).
Der einzige Parameter, der sich von links nach rechts änderte, war die Pyramidengröße (von links nach rechts: 3, 7, 9 Ebenen).
Das Spielen mit dem Pyramidenverhältnis hat einen ähnlichen/verwandten Effekt – die Grundidee ist, dass der relative Bereich des Bildes, den die tieferen Neuronen verändern und „sehen“ können (das sogenannte Empfangsfeld des Netzes), zunimmt und wir immer größer werden Merkmale wie herausspringende Augen (von links nach rechts: 1.1, 1.5, 1.8):
Hinweis: Sie können die genauen Parameter, die zum Erstellen dieser Bilder verwendet wurden, im Dateinamen sehen!
Schauen Sie sich unbedingt das Jupyter-Notizbuch an! Ich habe es ausführlich erklärt.
Hier sind einige weitere Beispiele, die Sie mit diesem Code erstellen können!
Die Idee hier ist, dass alles, was das Netzwerk träumt, es einfach auf seine Eingabe zurückführt und eine geometrische Transformation anwendet.
Wenn wir nur den zentralen Zoom anwenden, erhalten wir Folgendes:
Wenn Sie den zentralen Zoom anwenden und gleichzeitig eine Drehung um 3 Grad pro Bild anwenden, erhalten Sie Folgendes:
Wenn wir schließlich eine einfache Übersetzung durchführen (5 px pro Frame in der Richtung von links oben nach rechts unten):
Hoffentlich hat Ihnen das nicht den Kopf zerbrochen – es fühlt sich an wie Web 1.0 Anfang der 2000er Jahre. Hab Geduld mit mir.
Anstatt die Ausgabe wieder in die Eingabe einzuspeisen, wenden wir den Algorithmus einfach pro Frame an und wenden eine lineare Mischung an:
Beim linearen Mischen wird lediglich das aktuelle Bild mit dem letzten kombiniert, um das Flimmern zu reduzieren (hier habe ich 0,85 verwendet).
Hinweis: Alle Deepdream-Bilder/GIFs wurden von mir erstellt. Die Quellenangaben für die ursprünglichen Bildkünstler sind unten angegeben.
git clone https://github.com/gordicaleksa/pytorch-deepdream
cd path_to_repo
conda env create
aus dem Projektverzeichnis aus (dadurch wird eine brandneue Conda-Umgebung erstellt).activate pytorch-deepdream
aus (um Skripte von Ihrer Konsole auszuführen oder den Interpreter in Ihrer IDE einzurichten).Das ist es! Es sollte sofort funktionieren, wenn die Datei „environment.yml“ ausgeführt wird, die sich mit Abhängigkeiten befasst.
Hinweis: Wenn Sie die Videofunktionen nutzen möchten, die ich habe, benötigen Sie ffmpeg in Ihrem Systempfad.
Das PyTorch-Pip-Paket wird mit einer Version von CUDA/cuDNN gebündelt geliefert, es wird jedoch dringend empfohlen, vorher ein systemweites CUDA zu installieren, vor allem wegen der GPU-Treiber. Ich empfehle außerdem die Verwendung des Miniconda-Installationsprogramms, um Conda auf Ihr System zu installieren. Befolgen Sie die Punkte 1 und 2 dieser Einrichtung und verwenden Sie die aktuellsten Versionen von Miniconda und CUDA/cuDNN für Ihr System.
Führen Sie einfach jupyter notebook
über Ihre Anaconda-Konsole aus und es wird eine Sitzung in Ihrem Standardbrowser geöffnet.
Öffnen Sie The Annotated DeepDream.ipynb
und schon kann es losgehen!
Hinweis: Wenn DLL load failed while importing win32api: The specified module could not be found
Führen Sie einfach pip uninstall pywin32
aus und dann sollte entweder pip install pywin32
oder conda install pywin32
das Problem beheben!
Sie müssen lediglich die Python-Umgebung verknüpfen, die Sie im Setup-Abschnitt erstellt haben.
Navigieren Sie zu Ihrer Umgebung bzw. aktivieren Sie sie, wenn Sie Anaconda verwenden (und ich hoffe, dass Sie dies tun) und Sie können die Befehle verwenden, die ich unten verlinkt habe.
Tipp: Platzieren Sie Ihre Bilder/Videos im Verzeichnis data/input/
und Sie können dann einfach mit ihrem Namen auf Ihre Dateien (Bilder/Videos) verweisen, anstatt absolute/relative Pfade zu verwenden.
Um einige statische Deep Dream-Bilder zu erstellen, führen Sie den folgenden Befehl aus:
python deepdream.py --input <img_name> --img_width 600
Dabei werden die Standardeinstellungen verwendet, Sie erhalten jedoch sofort ein aussagekräftiges Ergebnis, das gespeichert wird unter:
data/out-images/VGG16_EXPERIMENTAL_IMAGENET/
Hinweis: Das Ausgabeverzeichnis ändert sich je nach verwendetem Modell und vorab trainierten Gewichten.
Um das Out-of-the-Box-Video von Ouroboros mit 30 Bildern zu erhalten, gehen Sie wie folgt vor:
python deepdream.py --input <img_name> --create_ouroboros --ouroboros_length 30
Die Zwischenbilder werden in data/out-videos/VGG16_EXPERIMENTAL_IMAGENET/
gespeichert und das endgültige Video in data/out-videos
gespeichert.
Um ein Deep Dream-Video zu erstellen, führen Sie diesen Befehl aus:
python deepdream.py --input <mp4 video name>
Die Zwischenbilder werden in data/out-videos/tmp_out
ausgegeben und das endgültige Video in data/out-videos
gespeichert.
Nun, viel Spaß beim Spielen mit diesem Projekt! Hier sind einige weitere, schöne Ergebnisse:
Eine GPU mit mehr als 2 GB wird mehr als ausreichend sein.
Sie können DeepDream-Bilder, Ouroboros und DeepDream-Videos erstellen.
Wenn Sie keine GPU haben, läuft der Code automatisch auf der CPU, allerdings etwas langsamer (insbesondere bei Videos).
Wenn Sie Schwierigkeiten haben, DeepDream zu verstehen, habe ich in diesem Video einen Überblick über den Algorithmus gegeben:
Und auch das von mir erstellte Jupyter-Notizbuch ist der beste Ausgangspunkt!
Ich fand diese Repos nützlich (während der Entwicklung dieses hier):
Die Bilder, die ich verwendet habe, habe ich hier gefunden:
Andere Bilder sind mittlerweile bereits Klassiker in der NST- und DeepDream-Welt.
Places 365 vorab trainierte Modelle stammen aus diesem tollen Repo.
Wenn Sie diesen Code für Ihre Recherche nützlich finden, geben Sie bitte Folgendes an:
@misc{Gordić2020DeepDream,
author = {Gordić, Aleksa},
title = {pytorch-deepdream},
year = {2020},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/gordicaleksa/pytorch-deepdream}},
}
Wenn Sie gerne mehr KI-bezogene Inhalte in Ihrem Leben hätten, denken Sie darüber nach: