Fachkundige und individuelle Beratung ist für uns selbstverständlich - rufen Sie uns an!
Sie erreichen unsere Hotline werktags von 10:00 bis 18:00 Uhr unter der 07171 8712 0 (Samstags: 10:00 bis 12:00 Uhr). Außerhalb Deutschlands wählen Sie +49 7171 87120. Im Dialog finden wir die optimale Klanglösung für Sie und klären etwaige Fragen oder Schwierigkeiten. Das nuForum ist seit dem 19. Juli 2023 im read-only-Modus: Das Ende einer Ära: Das nuForum schließt

Mein KI Audio Restorer/Upscaler Experiment

Diskussionen über Medienserver, Speichermedien, Streaming, Datenformate
Antworten
Benutzeravatar
anphex
Star
Star
Beiträge: 696
Registriert: Mi 28. Mär 2018, 21:02
Wohnort: Berlin
Has thanked: 205 times
Been thanked: 143 times

Mein KI Audio Restorer/Upscaler Experiment

Beitrag von anphex »

Guten Abend allerseits!

Eines Abends kam mir die Idee: "Hey, wenn heutzutage Machine Learning so zugänglich wie noch nie ist und ich auch passende Rechenpower dazu habe, warum nicht einfach mal selbst was ausprobieren?"
Direkt im Anschluss kam der Plan: "Es hat noch keiner einen Audio Restorer gebastelt? Dann mach ich den selbst!"

Konkret war es mein Ziel, aus einem Free-Streaming-Abo-üblichen 16bit 128kbp/s .mp3 ein vollwertiges 24 bit 176Khz HiRes .flac zu generieren - oder besser gesagt wiederherstellen/hochskalieren. Und das natürlich nicht, indem ich einfach das Format umwandle, sondern es sollen tatsächlich bestmöglich verlorene Daten wiederhergestellt werden. Warum nicht 196 Khz? Dazu weiter unten mehr.

Dazu habe ich die Heilige Dreieinigkeit des Machine Learnings eingesetzt: Python, Tensorflow und Keras.

-------------------------------------------------------------------------

Für alle, die noch nie von Machine Learning gehört haben, das geht ganz grob so:
  • 1. Man definiert ein Netzwerk aus Eingang, versteckten Schichten und Ausgang. Ähnlich wie beim Gehirn, wo auch Synapsen miteinander in mehreren Schichten verknüpft sind, sind in den versteckten Schichten - den Hidden Layer - mehrere Schichten an Neuronen komplett miteinander verbunden.

    2. Man zeigt diesem Netzwerk nun die Eingangsdaten - ein Bild, ein Stück Audio, einen Text, etc. - und die Zieldaten - also das, was das Netzwerk aus den Eingangsdaten machen soll.

    3. In unzähligen Berechnungen passt das Netzwerk nun während des "Trainings" die Stärke der Verbindungen - die Gewichte - zwischen den Neuronen an. Das können oft mehrere Millionen sein. Dabei wird bei jedem Durchgang der Abstand zwischen dem Ausgang des Netzwerks und den Zieldaten verglichen und anhand dieser "Fehlerquote" das Netzwerk neu eingestellt.

    4. Das ganze geht so lange, bis keine Verbesserung mehr möglich ist und das Netzwerk trainiert ist, um die Eingangsdaten wie gewünscht zu verarbeiten.
Ein Dozent hat das mal toll ganz einfach erklärt:
Stell dir vor, du bist DJ, und weißt nicht, ob dem Publikum die Musik zu laut ist oder zu leise ist. Deine Rückmeldung sind die Anzahl der Leute. Wenn die Leute weggehen, drehe die Lautstärke lauter oder leiser. Wenn du leiser drehst und die Leute wiederkommen, drehst du etwas weiter und schaust, ob nicht vielleicht noch mehr Leute auf die Tanzfläche kommen könnten. Wenn stattdessen die Leute gehen, drehst du wieder lauter, und guckst, ob sie wiederkommen. Das ganze macht man so lange, bis man den Sweet Spot gefunden hat.
Das und nichts anderes ist Machine Learning, blos halt mit tausenden Parametern pro Sekunde.


-------------------------------------------------------------------------

So, nun zu meinem Projekt. Nach mehreren Experimenten mit verschiedenen Netzwerk-Architekturen, habe ich mit einem CNN - einem Convolutional Neural Network - die besten Ergebnisse erzielt. Diese Art von Netzwerk schaut sich nicht nur die blanken Daten an, sondern versucht Muster in diesen Daten zu finden.

Die Ergebnisse sind eigentlich ziemlich gut. Es kann natürlich unmöglich jedes Detail wiederhergestellt werden.
2022-04-05---17_22_25.jpg
Die orangene Linie sind meine Originaldaten. Ich hab hier weißes Rauschen generiert - ungefiltert, und theoretisch maximale Frequenz von ca. 88200 Hz - und als Zieldaten verwendet. Dieselben Daten habe ich dann mittels LAME MP3 Encoder auf 128 kbp/s 16 bit herunterkodiert und als Eingangsdaten verwendet.

Wie gesagt, es ist nicht perfekt und ich bezweifle auch, dass man da ohne massive deep dives und mathematische Tricks noch viel rausholen kann. Ich habe auch mit einem GAN herumgespielt, aber noch keine guten Ergebnisse erreicht. Ich melde mich, wenn ich in dieser Richtung fortschritte mache. GAN ist diese gruselige Trainingsmethode, die Deep Fakes erst ermöglicht hat...

Ein Problem ist auch, dass Audio fortlaufende Daten sind. Das CNN, was ich angewendet habe, ist eigentlich auf separate Datenblöcke wie Bilder ausgelegt. Dadurch entsteht das Problem, dass jedes Stück Audiodaten, was verarbeitet wird, nicht mehr "weiß", wo es wieder beim nächsten Stück ansetzen muss. Das führt unweigerlich zu knacken und ploppen, da die Datenlinie immer einen Knick hat. Ich versuche das demnächst zu lösen, indem ich diesen Knick mathematisch Glattbügele, aber es ist relativ fummelig zu implementieren.

Die Lösung für diese Problem wäre es, ein Netzwerk nicht nur mit Audioschnipseln zu füttern, sondern mit der kompletten Datei. Nur würden damit 99,9% aller Computer dieser Welt noch massiv überfordert sein, weil ein lomplexes Netzwerk dann gerne mehrere 1000 GB GPU-Speicher haben wollen würde. :mrgreen:

Ich tobe mich weiter in der Richtung aus. Wo ein Wille ist, ist ein Weg!
Bei Interesse kann ich gerne meinen Code hochladen und auch einige Testdateien präsentieren. Nur ist das natürlich mit dem Urheberrecht bei Musikdateien immer so eine Sache.

Edit: Ich habe nun meine Experimentierumgebung aus dem Jupyter Notebook hochgeladen. Feedback willkommen. Ich habe das meiste kommentiert und sollte verständlich zu lesen sein.
Edit 2: Da Nubert leider sehr restriktiv mit Dateien ist (nicht einmal ein .zip geht?!), hier der Link zu meiner privaten Cloud. Unbedingt die .HTML Datei downloaden, da die Online-Vorschau auf meiner Cloud es nicht richtig darstellt.
https://anphex.one/index.php/s/dq6reCdC8wZqZ9p
WZ: E-APO -> SMSL SU-9N/Denon X3700H -> Topping LA90D -> NuVero 170 | Topping PA5 -> NuVero 60
SZ: Kali IN-5 am PC - NuBox AS250 am TV
NuVero 70 Demo || Galerie
Benutzeravatar
jodother
Profi
Profi
Beiträge: 354
Registriert: Mi 7. Okt 2015, 14:10
Wohnort: Bonn
Has thanked: 36 times
Been thanked: 22 times

Re: Mein KI Audio Restorer/Upscaler Experiment

Beitrag von jodother »

Finde ich ein spannendes Experiment! Mit Bildern funktioniert der Ansatz wohl schon einigermaßen, warum bei entsprechender Rechenpower nicht auch mit Audio-Dateien? (Auch Beethovens Unvollendete wurde schon mit KI "zuende komponiert".) Verstehe ich es richtig, dass du deine "Maschine" mit vielen Paaren aus mp3- und originalen Tracks trainieren würdest?

Ich bin absoluter Laie, aber ich frage mich, ob Machine Learning von gewissen Grundannahmen ausgehen kann. Denn es ist ja eigentlich bekannt, wie die Datenreduktion per mp3 funktioniert.
Raum 1: 3.0 mit Canton Smart A 25 + Soundbox 3 + Connect 5.1
+ Bluesound Node 1. Gen. + TV
Raum 2: Imperial Dabman i150
Raum 3: Advance Paris MyConnect 50 + Pro-Ject Speaker Box 10 DS2 + nuSub XW-800 slim + TV
Synology DS 213j, Qobuz
Benutzeravatar
anphex
Star
Star
Beiträge: 696
Registriert: Mi 28. Mär 2018, 21:02
Wohnort: Berlin
Has thanked: 205 times
Been thanked: 143 times

Re: Mein KI Audio Restorer/Upscaler Experiment

Beitrag von anphex »

Das Prinzip, was du meinst, ist ein Recurrent Neural Network mit LSTM-Zellen. Das System dahinter habe ich tatsächlich eben auch erst richtig verstanden und bin gerade dabei, es zu implementieren. Ich melde mich dazu bald. Aber kleiner Teaser: Die Ergebnisse sind erschreckend perfekt. :mrgreen:

Anliegendes Bild der wiederhergestellten Audiodaten (grün) ist kein Fehler! Es überlagert sich so gut mit dem Original, dass es das Original fast komplett verdeckt.
2022-04-16---21_40_45.jpg
WZ: E-APO -> SMSL SU-9N/Denon X3700H -> Topping LA90D -> NuVero 170 | Topping PA5 -> NuVero 60
SZ: Kali IN-5 am PC - NuBox AS250 am TV
NuVero 70 Demo || Galerie
Antworten