./images
Dockerfile
um Ihre Binärdateien einzuschließenf()
hinzuTUPLE_CODECS
hinzu
docker build -t image_compression_comparison .
docker run -it -v $(pwd):/image_compression_comparison image_compression_comparison
python3 script_compress_parallel.py
Es werden Kodierungen durchgeführt, die auf bestimmte Metrikwerte abzielen, und die Ergebnisse werden in entsprechenden Datenbankdateien gespeichert, zum Beispiel:
main(metric='ssim', target_arr=[0.92, 0.95, 0.97, 0.99], target_tol=0.005, db_file_name='encoding_results_ssim.db')
main(metric='vmaf', target_arr=[75, 80, 85, 90, 95], target_tol=0.5, db_file_name='encoding_results_vmaf.db')
compression_results_[PID]_[TIMESTAMP].txt
compression_results_worker_[PID]_[TIMESTAMP].txt
In SQLite3-Datenbankdateien, zum Beispiel encoding_results_vmaf.db
und encoding_results_ssim.db
.
Prozentuale BD-Raten können mithilfe eines Skripts namens compute_BD_rates.py
berechnet werden. Das Skript benötigt ein Argument:
python3 compute_BD_rates.py [db file name]
und druckt Werte für BD Rate VMAF
, BD Rate SSIM
, BDRate MS_SSIM
, BDRate VIF
, BDRate PSNR_Y
und BDRate PSNR_AVG
für jedes Quellbild sowie den Mittelwert über den Quelldatensatz. BD-Raten werden sowohl für 420
als auch für 444
Unterabtastung gedruckt. PSNR_AVG
wird von MSE_AVG
abgeleitet, einem gewichteten MSE über alle Farbkomponenten, gewichtet nach der Anzahl der Proben in den jeweiligen Farbkomponenten.
Ebenfalls enthalten ist ein Skript namens analyze_encoding_results.py
das
Das Skript benötigt zwei Argumente:
python3 analyze_encoding_results.py [metric_name like vmaf OR ssim] [db file name]
Es ist zu beachten, dass die BD-Rate eine aggregierte Zahl über den gesamten Bereich der Zielqualitäten liefert. Wenn man sich nur die BD-Rate anschaut, können bestimmte Erkenntnisse verloren gehen. Wie ist beispielsweise die Komprimierungseffizienz im Vergleich zum Betriebspunkt VMAF = 95?
Ein anderes Beispiel wäre, dass die BD-Rate Null ist. Es ist durchaus möglich, dass sich die Raten-Qualitätskurven kreuzen und ein Codec beispielsweise bei VMAF=95 deutlich besser als der andere und im unteren Bitratenbereich schlechter ist.
Wenn Bildressourcen für die Verwendung in der Benutzeroberfläche codiert werden, möchte man im Idealfall eine klar definierte Betriebsqualität haben, z. B. VMAF=95. Und Ergebnisse aus der Region mit geringerer Qualität könnten wohl unerheblich sein. Die in (b) beschriebenen Erkenntnisse erweitern somit die „Gesamt“-Einsicht, die die BD-Rate bietet.
Die Anzahl der gleichzeitigen Worker-Prozesse kann in angegeben werden
pool = multiprocessing.Pool(processes=4, initializer=initialize_worker)
Angesichts des Systems, auf dem Sie ausgeführt werden, kann eine angemessene Parallelität durch die Anzahl der Prozessorkerne oder die Menge an verfügbarem RAM im Vergleich zum Speicher begrenzt sein, der vom anspruchsvollsten Encoderprozess im Ensemble der getesteten Codecs verbraucht wird. Wenn beispielsweise eine Encoder_A-Instanz normalerweise 5 GB RAM verbraucht und Sie über insgesamt 32 GB RAM verfügen, kann eine angemessene Parallelität auf 6 (32/5) begrenzt sein, selbst wenn Sie über 24 (oder mehr als 6) Prozessorkerne verfügen.
Im Idealfall verbraucht eine Encoder-Implementierung YUV-Eingaben und generiert einen Codestream. Im Idealfall verbraucht eine Decoder-Implementierung den Codestream und dekodiert ihn in eine YUV-Ausgabe. Anschließend berechnen wir Metriken im YUV-Raum. Es gibt jedoch Implementierungen wie die JPEG-XT-Software, die PPM-Eingaben verarbeiten und PPM-Ausgaben erzeugen. In solchen Fällen kann vor der Qualitätsberechnung im YUV-Raum eine Konvertierung des Quell-PPM in YUV und auch eine Konvertierung des dekodierten PPM in YUV erfolgen. Die zusätzlichen Konvertierungsschritte im Vergleich zur regulären Pipeline können zu leichten Verzerrungen führen, aber in unseren Experimenten bewirken diese Schritte keine spürbare Beeinträchtigung des VMAF-Scores.