Sheng Cao, Chao-yuan Wu, Philipp Kruhenbühl.

@article { cao2020lossless ,
title = { Lossless Image Compression through Super-Resolution } ,
author = { Cao, Sheng and Wu, Chao-Yuan and and Kr{"a}henb{"u}hl, Philipp } ,
year = { 2020 } ,
journal = { arXiv preprint arXiv:2004.02872 } ,
}Wenn Sie unsere Codebasis verwenden, sollten Sie auch L3C auch zitieren
Dies ist die offizielle Umsetzung von SREC in Pytorch. SREC sorgt für eine verlustfreie Komprimierung als Superauflösungsproblem und wendet neuronale Netzwerke auf Komprimieren von Bildern an. SREC kann hochmoderne Komprimierungsraten bei großen Datensätzen mit praktischen Laufzeiten erreichen. Training, Komprimierung und Dekompression werden vollständig unterstützt und offen.
Wir empfehlen die folgenden Schritte für den Einstieg.
Hier finden Sie Anweisungen zur Installation.
Wir haben trainierte Modelle für Imagineet64 und Open Images (PNG) veröffentlicht. Alle Kompressionsergebnisse werden in Bits pro Subpixel (BPSP) gemessen.
| Datensatz | BPSP | Modellgewichte |
|---|---|---|
| ImageNet64 | 4.29 | Modelle/ImageNET64.PTH |
| Offene Bilder | 2.70 | Modelle/OpenImages.PTH |
Um Code auszuführen, müssen Sie im Verzeichnis auf höchstem Niveau sein.
python3 -um src.train
--train-path "path to directory of training images"
--train-file "list of filenames of training images, one filename per line"
--eval-path "path to directory of eval images"
--eval-file "list of filenames of eval images, one filename per line"
--plot "directory to store model output"
--batch "batch size"
Die Trainingsbilder müssen in Form von train-path/filename aus dem Dateinamen in der Zug-File organisiert werden. Gleiches gilt für Evalbilder.
Wir haben unsere Trainings- und Evaly -Dateien aufgenommen, die für ImageNet64 und Open Images (PNG) in datasets -Verzeichnis verwendet werden.
Für ImagEnet64 verwenden wir einen leicht unterschiedlichen Satz von Hyperparametern als offene Bilder von Hyperparametern, die standardmäßig sind. Um imageNet64 basierend auf Einstellungen aus unserem Papier zu trainieren, laufen Sie
python3 -um src.train
--train-path "path to directory of training images"
--train-file "list of filenames of training images, one filename per line"
--eval-path "path to directory of eval images"
--eval-file "list of filenames of eval images, one filename per line"
--plot "directory to store model output"
--batch "batch size"
--epochs 10
--lr-epochs 1
--crop 64
Führen Sie python3 -um src.train --help für eine Liste mit abstimmbarem Hyperparametern aus.
Bei einem Modell-Checkpoint bewertet dies theoretische Bits/Subpixel (BPSP) basierend auf Log-Likelihood. Der log-liKelihood bpSP ist der tatsächliche Kompressions-BPSP untergebracht.
python3 -um src.eval
--path "path to directory of images"
--file "list of filenames of images, one filename per line"
--load "path to model weights"
Wenn Torchac installiert ist, können Sie Komprimierung/Dekompression ausführen, um jedes Bild in .SREC -Dateien umzuwandeln. Das folgende Bildverzeichnis komprimiert sich.
python3 -um src.encode
--path "path to directory of images"
--file "list of filenames of images, one filename per line"
--save-path "directory to save new .srec files"
--load "path to model weights"
Wenn Sie eine genaue Laufzeit wünschen, empfehlen wir, Python mit -O -Flagge auszuführen, um die Behinderung zu deaktivieren. Wir fügen auch ein optionales Flag --decode -Flag hinzu, damit Sie überprüfen können, ob die Dekomprimierung der .sREC -Datei das Originalbild enthält und Laufzeit für die Dekodierung bereitstellt.
Um .SREC -Dateien in PNG umzuwandeln, können Sie ausführen
python3 -um src.decode
--path "path to directory of .srec images"
--file "list of filenames of .srec images, one filename per line"
--save-path "directory to save png files"
--load "path to model weights"
Hier können Sie ImageNET64 -Trainings- und Validierungssätze herunterladen.
Wir verwenden dieselben Trainings- und Validierungsbilder von offenen Bildern wie L3C.
Für Validierungsbilder können Sie sie hier herunterladen .
Für Trainingsbilder klonen bitte das L3C -Repo und führen Sie das Skript von hier aus
In diesem Problem finden Sie Unterschiede zwischen offenen Bildern JPEG und Open Images PNG.
Vielen Dank an L3C für Implementierungen von EDSR, logistischen Gemischen und arithmetischer Codierung. Besonderer Dank geht an Fabian Mentzer, dass wir uns über Probleme mit dem Vorverarbeitungsskript für Open Images JPEG informieren und schnell behoben haben.