Datengetriebene Algorithmen wie neuronale Netze haben die Welt im Sturm erobert. Ihre Entwicklung ist durch mehrere Faktoren bedingt, darunter günstige und leistungsstarke Hardware sowie eine riesige Menge an Daten. Neuronale Netze stehen derzeit an der Spitze aller 'kognitiven' Aufgaben, wie z. B. Bild- und Sprachverständnis usw. Doch sie sollten nicht auf solche Aufgaben beschränkt bleiben. In diesem Artikel erfahren Sie, wie man Bilder mit Hilfe von neuronalen Netzen und Residual Learning komprimiert. Der in dem Artikel vorgestellte Ansatz arbeitet schneller und besser als herkömmliche Codecs. Diagramme, Gleichungen und natürlich eine Tabelle mit Tests finden Sie im Anhang.
Dieser Artikel basiert auf Arbeit. Es wird davon ausgegangen, dass Sie mit neuronalen Netzen und deren Konzepten vertraut sind. Faltung und Kostenfunktion.
Was ist Bildkompression und welche Arten gibt es?
Bildkompression ist der Prozess, ein Bild so zu transformieren, dass es weniger Platz benötigt. Das einfache Speichern 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, gibt es zwei Arten der Bildkompression: verlustfrei und mit Verlusten. Wie aus den Bezeichnungen hervorgeht, können bei der verlustfreien Kompression die Originaldaten des 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 JPEG ohne Verlust nicht vergessen], während PNG ein verlustfreier Algorithmus ist.

Vergleich von verlustfreier und verlustbehafteter Kompression
Bitte beachten Sie, dass das Bild rechts viele blockartige Artefakte aufweist. Dies ist verlorene Information. Angrenzende Pixel ähnlicher Farben werden als ein Bereich komprimiert, um Platz zu sparen, wodurch 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 ein. Es gibt effizientere Methoden zur Bildkompression, die nicht viel Informationen verlieren, aber sie sind ziemlich langsam, und viele verwenden iterative Ansätze. Das bedeutet, dass sie nicht parallel auf mehreren Kernen der Zentral- oder Grafikkarte ausgeführt werden können. Eine solche Einschränkung macht sie im alltäglichen Gebrauch vollkommen unpraktisch.
Eingabe der Faltungsneuronalen Netzwerk
Wenn etwas berechnet werden muss und die Berechnungen ungefähre Werte sein können, fügen Sie hinzu . Die Autoren verwendeten ein recht typisches Convolutional Neural Network (CNN), um die Bildkompression zu verbessern. Das vorgestellte Verfahren funktioniert nicht nur auf Augenhöhe mit den besten Lösungen (wenn nicht sogar besser), sondern ermöglicht auch paralleles Rechnen, was zu einer drastischen Geschwindigkeitssteigerung führt. Der Grund dafür ist, dass Convolutional Neural Networks (CNNs) sehr gut darin sind, räumliche Informationen aus Bildern zu extrahieren, die dann in kompakter Form dargestellt werden (zum Beispiel werden nur die „wichtigen“ Bits des Bildes gespeichert). Die Autoren wollten diese Fähigkeit von CNNs nutzen, um Bilder besser darzustellen.
Architektur von
Die Autoren schlugen ein duales 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 (zum Beispiel JPEG) verarbeitet. Nach der Verarbeitung durch den Codec wird das Bild an das zweite Netzwerk übergeben, das das Bild des Codecs „korrigiert“, um zu versuchen, das Originalbild wiederherzustellen. Die Autoren nannten dieses Netzwerk das rekonstruktive CNN (RecCNN). Ähnlich wie bei GAN werden beide Netzwerke iterativ trainiert.

ComCNN Kompakte Darstellung wird an den Standard-Codec übergeben

RecCNN. Die Ausgaben von ComCNN skalieren mit der Zunahme und werden an RecCNN übergeben, das versuchen wird, den Rest zu lernen
Die Ausgaben des Codecs skalieren mit der Zunahme und werden dann an RecCNN übergeben. RecCNN wird versuchen, ein Bild zu erzeugen, das so ähnlich wie das Original ist, wie es nur möglich ist.

Durchgängiger Framework für die Bildkompression. Co(.) ist ein Algorithmus zur Bildkompression. Die Autoren haben JPEG, JPEG2000 und BPG angewendet
Was ist der Rest?
Der Rest kann als Schritt der Nachbearbeitung betrachtet werden, um das vom Codec dekodierte Bild zu "verbessern". Eine neuronale Netzwerk mit mehr "Informationen" über die Welt kann kognitive Entscheidungen darüber treffen, was zu korrigieren ist. Diese Idee basiert auf , Details dazu können Sie lesen .
Verlustfunktionen
Zwei Verlustfunktionen werden verwendet, weil wir zwei neuronale Netzwerke haben. Das erste, ComCNN, ist als L1 gekennzeichnet und definiert sich so:

Verlustfunktion für ComCNN
Erklärung
Diese Gleichung mag kompliziert erscheinen, aber in Wirklichkeit ist es der Standard (mittlere quadratische Fehler) MSE. ||² bedeutet die Norm des Vektors, den sie einschließen.

Gleichung 1.1
Cr steht für die Ausgaben von ComCNN. θ steht für die lernbaren Parameter von ComCNN, XK ist das Eingangssignal.

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

Gleichung 2.0
Erklärung
Die Funktion mag kompliziert erscheinen, aber es handelt sich größtenteils um eine Standard-Verlustfunktion eines neuronalen Netzwerks (MSE).

Gleichung 2.1
Co() steht für die Codec-Ausgabe, x mit Dachsymbol steht für die Ausgabe von ComCNN. θ2 sind die lernbaren Parameter von RecCNN, res() stellt einfach die residuale Ausgabe von RecCNN dar. Es ist wichtig zu beachten, dass RecCNN auf der Differenz zwischen Co() und dem Eingangssignal trainiert wird, jedoch nicht auf dem Eingangssignal selbst.
Intuitive Definition
Die Gleichung 2.0 zwingt RecCNN dazu, seine Gewichte so zu ändern, dass die Ausgaben den Eingabebildern so ähnlich wie möglich sehen.
Trainingsschema
Modelle werden iterativ trainiert, ähnlich wie . Die Gewichte des ersten Modells werden fixiert, während die Gewichte des zweiten Modells aktualisiert werden, dann werden die Gewichte des zweiten Modells fixiert, während das erste Modell trainiert wird.
Tests
Die Autoren verglichen ihre Methode mit bestehenden Ansätzen, einschließlich einfacher Codecs. Ihre Methode funktioniert besser als andere und bleibt dabei auf der entsprechenden Hardware schnell. Darüber hinaus versuchten die Autoren, nur eines der beiden Netzwerke zu verwenden, und bemerkten einen Leistungsabfall.

Vergleich des strukturellen Ähnlichkeitsindex (SSIM). Hohe Werte weisen auf eine bessere Ähnlichkeit zum Original hin. Die Ergebnisse der Autoren sind fett hervorgehoben.
Fazit
Wir haben einen neuen Ansatz zur Anwendung von Deep Learning in der Bildkompression untersucht und über die Möglichkeit gesprochen, neuronale Netze auch für andere Aufgaben wie Bildklassifizierung und Sprachverarbeitung zu nutzen. Diese Methode erfüllt nicht nur die modernen Anforderungen, sondern ermöglicht auch eine deutlich schnellere Verarbeitung von Bildern.
Das Studium von neuronalen Netzen ist einfacher geworden, denn speziell für unsere Hub-Community haben wir einen Promo-Code erstellt. HABR, der zusätzliche 10% Rabatt auf den im Banner angegebenen Rabatt gewährt.
Weitere Kurse
Empfohlene Artikel
Quelle: habr.com
