Klangvolle Bilder: Audio-Reactive Latent Walks mit Stable Diffusion

Von StyleGAN2 und dessen Bildqualität fasziniert und inspiriert wollten wir auch mit Bildgenerierung arbeiten. Eine Demo von StyleGAN2 findet man unter: thispersondoesnotexist.com.

Weitere Projektinfos

Viel Spaß mit dem Video 🍿

Dieses Projekt ist entstanden in Zusammenarbeit mit:

Erarbeitet im Rahmen der Vorlesung “Algorithmic Business” im Studiengang AI/ML an der Hochschule Luzern

Man hat eine Möglichkeit gefunden, schöne Videos zu erstellen, die von einem Bild zum anderen übergehen. Da die Bilder im latenten Raum interpoliert werden, nennt man dies einen “Latent Walk”. Eine Demonstration davon ist in diesem Video zu sehen, in dem ein Strand erzeugt wird.

Das ist schon sehr cool, aber es gibt noch mehr.Die Leute wollten, dass diese Videos auf Musik reagieren, was als “Audioreactive Latent Walk” bezeichnet wird.Eine Demonstration davon ist im Video “Audio-reactive Latent Interpolations with StyleGAN2-ada” des YouTubers Nerdy Rodent zu sehen (Demo beginnt bei 5:50).

Auf dem YouTube-Kanal von Tim Hawkey gibt es noch einige weitere beeindruckende Videos, die hauptsächlich mit Stable Diffusion erstellt wurden.

Tools

Es gibt mehrere Bibliotheken und trainierte Modelle, die für die Erstellung eines solchen Videos verwendet werden müssen. Dazu gehören die Standard-ML-Bibliotheken wie numpy, tensorflow/pytorch, opencv und natürlich ein vortrainiertes StyleGAN2-Modell. Potenziell könnte das StyleGAN2-Modell gegen ein Stable-Diffusion-Modell ausgetauscht werden, da bereits einige Versuche unternommen wurden, Videos mit Stable Diffusion zu erstellen.

Die Rechenleistung kann entweder über Google Colab oder Lambda Labs für eine schnellere Generierung abgerufen werden (wir empfehlen dies für die Generierung von Videos mit stabiler Diffusion).

Process

Wir haben zunächst die folgenden Technologien ausprobiert:

StyleGAN 3

Gleich zu Beginn wollten wir das Projekt mit voller Energie angehen und die neuesten Technologien ausprobieren.Deshalb war unser erster Ansatz, auch StyleGAN 3 auszuprobieren.Leider mussten wir schnell feststellen, dass dies zum einen zu viel Rechenleistung erfordert, zum anderen aber auch nur sehr wenige Beispiele und Dokumentationen vorhanden sind.

Stable Diffusion

Während eine Person mit StyleGAN 3 beschäftigt war, versuchte die andere Person, Stable Diffusion zum Laufen zu bringen. Das funktionierte gut und wir konnten es für die Verwendung von audioreactive konvertieren. Leider dauerte es zu lange, bis wir die Parameter so eingestellt hatten, dass wir gute Bilder bekamen, und das zog sich durch das ganze Video, wenn es nicht mit einer kostenpflichtigen GPU-Cloud verwendet wurde.

StyleGAN 2

Nachdem wir mit unserer Lehrerin gesprochen hatten, suchten wir nach einer Alternative in StyleGAN 2 und stießen auf dieses GitHub repo.

Maua StyleGAN

Aus dem oben erwähnten Repo haben wir den StyleGAN-Ansatz von maua genommen, ihn korrigiert und damit herumgespielt.Obwohl es sich um StyleGAN handelte, benötigte es immer noch eine Menge Rechenleistung, was ziemlich viel kostete, um “nur” einige Experimente auf Google Colab durchzuführen. maua_stylegan_song_1.mp4 maua_stylegan_song_2.mp4 

BigGAN

Da wir mit den meisten anderen Modellen Probleme hatten, entschieden wir uns für ein kleines Modell, mit dem wir alles testen konnten, und wir waren sogar in der Lage, BigGAN lokal auf unseren Laptops auszuführen.Wir haben uns also für dieses Modell entschieden und ein großartiges GitHub-Repository gefunden, das wir für den Anfang genutzt haben. biggan.mp4

Final Product

Unser Endprodukt ist eine Mischung aus BigGAN und Stable Diffusion. Zuerst nehmen wir den Musik-Input und erstellen ein Video mit BigGAN. Wir nehmen die Frames des Videos aus BigGAN als Inputs für ein Stable Diffusion Img2Img Model und erstellen ein neues Video mit BigGAN. stable_diffusion_it_2.mp4 

Folgende Einstellungen wurden verwendet:
truncation = 0.7
extra_detail = 0.9
max_frequency_level = 11000
low_frequency_skip = 16
frequency_band_growth_rate = 1.01
smoothing_factor = 0.1
iterations = 2
seed=42,
prompt=”Photorealistic, epic, focused, sharp, cinematic lighting, 4k, 8k, octane rendering, legendary, fantasy, trippy, LSD”,
num_steps=10,
unconditional_guidance_scale=7.5,
temperature=0.0,
batch_size=1,
input_image=img,
input_image_strength=0.5
 stable_diffusion_it_1.mp4 

Folgende Einstellungen wurden verwendet:
truncation = 0.7
extra_detail = 0.9
max_frequency_level = 11000
low_frequency_skip = 16
frequency_band_growth_rate = 1.01
smoothing_factor = 0.1
iterations = 1
seed=42,
prompt=”Photorealistic, epic, focused, sharp, cinematic lighting, 4k, 8k, octane rendering, beautiful”,
num_steps=15,
unconditional_guidance_scale=7.5,
temperature=0.0,
batch_size=1,
input_image=img,
input_image_strength=0.6

Code Struktur

  1. Audio in kleine Stücke schneiden
  2. Verwenden Sie audio fft, um Spektogramme für das in Schritt 1 erzeugte Stück zu erhalten.
  3. Zusammenfassen der Frequenz aus dem Spektogramm
  4. Gewogene Summe von Zufallsvektoren pro Spektogrammstärke erhalten (jeder Vektor hat noise_dim als Dimensionalität)
  5. Verwendung des Rauschens zur Erstellung eines Bildes / einer Aufforderungsklasse für die Interpolation
  6. Verwendung von Diffusion zur Erstellung des endgültigen Bildes
  7. Addieren Sie die Bilder und fügen Sie die Musik hinzu, um ein Video zu erhalten

Benutzung

Sie finden die Datei mit dem Namen diffused-biggan.ipynb im Stammverzeichnis dieses Repositorys.Wir empfehlen, diese Datei auf Google Colab oder Lambda Labs hochzuladen, um die Bilderzeugung zu beschleunigen. setup.mp4

Outputs / Examples

Reti, who the f*ck is Reti?

Reti - The man himself
Als Webentwickler und begeisterter AI-Student bin ich immer auf der Suche nach neuen Projekten. Ob Websites gestalten, Apps entwickeln oder Algorithmen optimieren, ich bin stets bereit, mich neuen Herausforderungen zu stellen.