Datengetriebene Algorithmen wie neuronale Netze haben die Welt im Sturm erobert. Ihre Entwicklung wird durch mehrere Faktoren unterstützt, darunter kostengünstige und leistungsstarke Hardware sowie riesige Datenmengen. Neuronale Netze stehen derzeit an der Spitze aller "kognitiven" Aufgaben, wie z. B. der Bild- und Sprachverarbeitung. Doch sie sollten nicht auf diese Aufgaben beschränkt sein. In diesem Material wird ein Verfahren zur Bildkompression mithilfe neuronaler Netze und Residuallernen vorgestellt. Der in dem Artikel beschriebene Ansatz arbeitet schneller und besser als herkömmliche Codecs. Diagramme, Gleichungen und natürlich eine Tabelle mit Tests sind unter dem Cut.
Dieser Artikel basiert auf Arbeit. Es wird vorausgesetzt, dass Sie bereits mit neuronalen Netzen und ihren Konzepten vertraut sind. Faltung und Verlustfunktion.
Was ist Bildkompression und welche Arten gibt es?
Bildkompression ist der Prozess der Umwandlung eines Bildes, sodass es weniger Speicherplatz benötigt. Eine einfache Speicherung von Bildern würde viel Platz beanspruchen, weshalb es Codecs wie JPEG und PNG gibt, die darauf abzielen, die Größe des ursprünglichen Bildes zu reduzieren.
Wie bekannt ist, gibt es zwei Arten von Bildkompression: verlustrate und mit Verlusten. Wie die Namen andeuten, können bei der verlustfreien Kompression die Daten des ursprünglichen Bildes wiederhergestellt werden, während bei der verlustbehafteten Kompression einige Daten während der Kompression verloren gehen. Zum Beispiel sind JPG verlustbehaftete Algorithmen [Anm. d. Übers. – insbesondere sollten wir auch den verlustfreien JPEG nicht vergessen], während PNG ein verlustfreier Algorithmus ist.

Vergleich zwischen verlustfreier und verlustbehafteter Kompression
Bitte beachten Sie, dass das Bild auf der rechten Seite viele Blockartefakte aufweist. Dies ist verlorene Information. Benachbarte Pixel ähnlicher Farben werden zu einem einzigen Bereich zusammengefasst, um Platz zu sparen, wobei jedoch Informationen über die tatsächlichen Pixel verloren gehen. Natürlich sind die Algorithmen, die in JPEG-, PNG-Codecs usw. verwendet werden, viel komplexer, aber dies ist ein gutes intuitives Beispiel für verlustbehaftete Kompression. Verlustfreie Kompression ist gut, aber verlustfrei komprimierte Dateien nehmen viel Speicherplatz auf der Festplatte ein. Es gibt effizientere Methoden zur Kompression von Bildern, die nicht viel Information verlieren, aber sie sind recht langsam, und viele verwenden iterative Ansätze. Dies bedeutet, dass sie nicht parallel auf mehreren Kernen der CPU oder GPU ausgeführt werden können. Diese Einschränkung macht sie im Alltagsgebrauch völlig unpraktisch.
Eingabe der Convolutional Neural Network
Wenn etwas berechnet werden muss und die Berechnungen ungefähr sein können, fügen Sie hinzu . Die Autoren verwendeten ein ziemlich standardmäßiges Convolutional Neural Network zur Verbesserung der Bildkompression. Die vorgestellte Methode funktioniert nicht nur auf dem gleichen Niveau wie die besten Lösungen (wenn nicht sogar besser), sondern kann auch parallele Berechnungen nutzen, was zu einer drastischen Geschwindigkeitssteigerung führt. Der Grund dafür ist, dass Convolutional Neural Networks (CNN) sehr gut darin sind, räumliche Informationen aus Bildern zu extrahieren, die dann in kompakterer Form dargestellt werden (z. B. werden nur die "wichtigen" Bits des Bildes gespeichert). Die Autoren wollten diese Fähigkeit von CNN nutzen, um Bilder besser darzustellen.
Architektur
Die Autoren schlugen ein doppeltes Netzwerk vor. Das erste Netzwerk nimmt ein Bild als Eingabe und erzeugt eine kompakte Darstellung (ComCNN). Die Ausgaben dieses Netzwerks werden dann von einem Standard-Codec (z. B. JPEG) verarbeitet. Nach der Bearbeitung durch den Codec wird das Bild an das zweite Netzwerk weitergegeben, welches das Bild vom Codec "korrekt stellt", um zu versuchen, das ursprüngliche Bild zurückzugeben. Die Autoren nannten dieses Netzwerk rekonstruktives CNN (RecCNN). Ähnlich wie GAN werden beide Netzwerke iterativ trainiert.

ComCNN Die kompakte Darstellung wird an den Standard-Codec weitergeleitet

RecCNN. Die Ausgaben von ComCNN werden skaliert und an RecCNN weitergegeben, welches versuchen wird, den Rest zu lernen.
Die Ausgabe des Codecs skaliert mit der Erhöhung und wird dann an RecCNN übergeben. RecCNN wird versuchen, ein Bild zu erzeugen, das so nah wie möglich am Original ist.

Durchgängiges Framework zur Bildkompression. Co(.) ist ein Bildkompressionsalgorithmus. Die Autoren verwendeten JPEG, JPEG2000 und BPG.
Was ist der Rest?
Der Rest kann als Nachbearbeitungsschritt betrachtet werden, um das vom Codec decodierte Bild zu "verbessern". Mit einer größeren Menge an "Informationen" über die Welt kann das neuronale Netzwerk kognitive Entscheidungen darüber treffen, was zu korrigieren ist. Diese Idee basiert auf , lesen Sie die Einzelheiten dazu .
Verlustfunktionen
Zwei Verlustfunktionen werden verwendet, weil wir zwei neuronale Netzwerke haben. Das erste, ComCNN, ist als L1 markiert und wird wie folgt definiert:

Verlustfunktion für ComCNN
, warum ndots=5 in Kubernetes;
Diese Gleichung mag kompliziert erscheinen, aber tatsächlich handelt es sich um einen Standard (mittlere quadratische Abweichung). MSE. ||² bedeutet die Norm des Vektors, den sie zusammenfassen.

Gleichung 1.1
Cr steht für die Ausgaben von ComCNN. θ steht für die Lernbarkeit der Parameter von ComCNN, XK ist das Eingangsbild.

Gleichung 1.2
Re() bedeutet RecCNN. Diese Gleichung überträgt einfach den Wert der Gleichung 1.1 in RecCNN. θ steht für die lernbaren Parameter von RecCNN (das Zeichen oben bedeutet, dass die Parameter fixiert sind).
Intuitive Definition
Gleichung 1.0 wird ComCNN dazu bringen, seine Gewichte so zu ändern, dass das endgültige Bild nach der Rekonstruktion mit RecCNN so ähnlich wie möglich dem Eingangsbild aussieht. Die zweite Verlustfunktion von RecCNN wird wie folgt definiert:

Gleichung 2.0
, warum ndots=5 in Kubernetes;
Wieder scheint die Funktion kompliziert zu sein, aber es handelt sich größtenteils um eine Standardverlustfunktion eines neuronalen Netzwerks (MSE).

Gleichung 2.1
Co() bedeutet die Ausgabe des Codecs, x mit einem Hut oben bedeutet die Ausgabe von ComCNN. θ2 sind die lernbaren Parameter von RecCNN. res() stellt einfach die verbleibende Ausgabe von RecCNN dar. Es ist erwähnenswert, dass RecCNN auf der Differenz zwischen Co() und dem Eingangsbild trainiert wird, nicht auf dem Eingangsbild selbst.
Intuitive Definition
Gleichung 2.0 wird RecCNN dazu bringen, seine Gewichte so zu ändern, dass die Ausgaben so ähnlich wie möglich dem Eingangsbild erscheinen.
Lernschema
Modelle werden iterativ trainiert, ähnlich wie Die Gewichte des ersten Modells werden fixiert, während die Gewichte des zweiten Modells aktualisiert werden. Danach werden die Gewichte des zweiten Modells fixiert, während das erste Modell trainiert wird.
Tests
Die Autoren haben ihre Methode mit bestehenden Methoden, einschließlich einfacher Codecs, verglichen. Ihre Methode schneidet besser ab als andere und behält dabei eine hohe Geschwindigkeit auf entsprechender Hardware bei. Darüber hinaus versuchten die Autoren, nur ein von zwei Netzwerken zu verwenden, und stellten einen Leistungsverlust fest.

Vergleich des strukturellen Ähnlichkeitsindex (SSIM). Hohe Werte deuten auf eine bessere Ähnlichkeit mit dem Original hin. Das Ergebnis der Autoren ist fett hervorgehoben.
Fazit
Wir haben einen neuen Ansatz für die Anwendung von Deep Learning zur Bildkompression untersucht und über die Möglichkeit gesprochen, neuronale Netze für Aufgaben über die 'allgemeinen' Anwendungen hinaus, wie Bildklassifikation und Sprachverarbeitung, zu nutzen. Diese Methode entspricht nicht nur den modernen Anforderungen, sondern ermöglicht auch eine deutlich schnellere Bildbearbeitung.
Es ist einfacher geworden, neuronale Netze zu studieren, denn speziell für die Hubber haben wir einen Rabattcode erstellt. HABR, der einen zusätzlichen Rabatt von 10% auf den Rabatt auf dem Banner bietet.
Weitere Kurse
Empfohlene Artikel
Quelle: habr.com
