Nextgen-Messung

Erste Qualitätsmessung überhaupt für die neue Architektur — mit einem unbequemen Ergebnis: sie liegt hinter der bestehenden Generation.

Testbericht · 13.08.2026

Die überarbeitete Modellgeneration im Vergleich

Erste Qualitätsmessung überhaupt für die neue Architektur — mit einem unbequemen Ergebnis: sie liegt hinter der bestehenden Generation.

Erzeugt: 2026-08-13 10:36:50 · Testsatz: clic20v, 14 Bilder · Betriebspunkte: 3

Fragestellung

Wie viel Bildqualität liefern die Verfahren, wenn alle exakt gleich viele Bytes verbrauchen dürfen? Das ist die Frage, die in der Praxis zählt — nicht, wer bei frei gewählter Qualitätsstufe zufällig besser aussieht.

Methodik

  1. Jedes Bild wird mit KARC kodiert. Maßgeblich ist die echte Byte-Zahl aus der Datei, kein Schätzwert.
  2. Jede Baseline wird per Bisektion über ihre Qualitätsstufe auf genau diese Byte-Zahl getrimmt.
  3. Erst dann werden PSNR und MS-SSIM gegen das Original gemessen.

Genommen wird jeweils der Kandidat mit dem kleinsten Byte-Abstand zum Ziel — ober- wie unterhalb. Würde man „nie mehr Bytes als KARC" fordern, bekämen die Baselines bei grober Qualitätsstufung teils deutlich weniger Bytes und sähen künstlich schlechter aus.

Welche Byte-Zahl verglichen wird — und warum das hier entscheidend ist

Verglichen wird die reine Codec-Nutzlast, nicht die volle Dateigröße. Der .karc-v2-Container enthält zusätzlich eine eingebettete Vorschau. Bei Bildern dieser Größe ist die überraschend groß — siehe die Tabelle weiter unten. Nimmt man die volle Datei als Ziel, bekommen die Baselines für die eigentlichen Bilddaten bis zu doppelt so viele Bytes wie KARC; gemessen wird dann nicht mehr die Codec-Qualität, sondern der Vorschau-Aufschlag.

Ein erster Durchlauf dieses Tests hatte genau diesen Fehler und ließ KARC dadurch gegen AVIF verlieren. Der Fehler fiel auf, weil die gemessene Bitrate deutlich über der aus dem offiziellen Benchmark lag — bei identischem PSNR.

Testsatz: clic20v — Bilder, auf denen das Modell nicht trainiert wurde.

Baseline-Einstellungen:

  • AVIF — Pillow/libaom speed=4
  • WebP — Pillow/libwebp method=6
  • JPEG 2000 — Pillow/OpenJPEG quality_mode=rates
  • JPEG — Pillow/libjpeg optimize=True

Ergebnis

Mittelwerte über alle 14 Bilder. Δ = KARC minus Baseline, positiv bedeutet KARC besser.

Betriebspunkt λ = 0.0067 (im Mittel 0.3401 bpp, 37214 Byte je Bild)

Verfahren Ø Bytes Ø PSNR Ø MS-SSIM Δ PSNR Δ MS-SSIM KARC besser bei
KARC 37214 32.06 dB 0.9750
AVIF 37021 30.71 dB 0.9783 +1.35 dB -0.0033 14/14 Bildern
WebP 37128 29.35 dB 0.9679 +2.71 dB +0.0071 14/14 Bildern
JPEG 2000 37249 27.14 dB 0.9237 +4.91 dB +0.0513 14/14 Bildern
JPEG 37110 27.39 dB 0.9492 +4.66 dB +0.0259 14/14 Bildern

Betriebspunkt λ = 0.013 (im Mittel 0.4908 bpp, 53677 Byte je Bild)

Verfahren Ø Bytes Ø PSNR Ø MS-SSIM Δ PSNR Δ MS-SSIM KARC besser bei
KARC 53677 33.31 dB 0.9841
AVIF 53995 32.25 dB 0.9867 +1.06 dB -0.0026 14/14 Bildern
WebP 53576 30.82 dB 0.9799 +2.49 dB +0.0042 14/14 Bildern
JPEG 2000 53537 28.25 dB 0.9427 +5.06 dB +0.0413 14/14 Bildern
JPEG 53572 28.95 dB 0.9702 +4.36 dB +0.0139 14/14 Bildern

Betriebspunkt λ = 0.025 (im Mittel 0.6579 bpp, 71896 Byte je Bild)

Verfahren Ø Bytes Ø PSNR Ø MS-SSIM Δ PSNR Δ MS-SSIM KARC besser bei
KARC 71896 33.94 dB 0.9886
AVIF 72029 33.55 dB 0.9912 +0.39 dB -0.0025 10/14 Bildern
WebP 72014 32.25 dB 0.9863 +1.69 dB +0.0024 11/14 Bildern
JPEG 2000 71606 29.31 dB 0.9554 +4.62 dB +0.0332 14/14 Bildern
JPEG 71701 30.21 dB 0.9812 +3.72 dB +0.0074 14/14 Bildern

Nebenbefund: die eingebettete Vorschau ist zu groß

Beim Aufsetzen dieses Tests fiel auf, wie viel des .karc-Containers gar nicht auf die Bilddaten entfällt:

Anteil der Vorschau an der Gesamtdatei
Mittel 45.6 %
Kleinster Wert 20.8 %
Größter Wert 88.2 %

Im Mittel entfällt also gut ein Drittel der Datei auf ein Vorschaubild, im Extremfall über vier Fünftel — dort ist die eigentliche Bildinformation nur noch ein Sechstel der Datei. Der Effekt trifft kleine Dateien am härtesten, weil die Vorschau kaum mit der Bitrate schrumpft.

Für die Codec-Bewertung ist das irrelevant. Für die Produktgröße ist es der mit Abstand größte Hebel, den dieser Testlauf zutage gefördert hat — und er wirkt sofort, unabhängig von jeder Modellverbesserung.

Wie genau wurde die Byte-Zahl getroffen?

| Verfahren | Ø |Abweichung| | größte Abweichung | |---|---:|---:| | AVIF | 1.56 % | 5.33 % | | WebP | 0.58 % | 1.71 % | | JPEG 2000 | 0.49 % | 2.64 % | | JPEG | 0.81 % | 4.29 % |

Die Qualitätsstufen der Baselines sind ganzzahlig; ein exakter Byte-Treffer ist deshalb nicht immer möglich. Die tatsächlich erreichte Byte-Zahl steht bei jedem Messwert in daten/messwerte.json und auf jeder Vergleichstafel.

Geschwindigkeit (KARC, CPU)

Kodieren im Mittel 27.5 s, Dekodieren 20.2 s je Bild. Der Codec lief hier bewusst auf der CPU, damit parallel ein GPU-Training ungestört weiterlaufen konnte.

Einzelmessungen, Betriebspunkt λ = 0.013

Damit jede Mittelwert-Angabe oben nachrechenbar ist — PSNR in dB je Foto und Verfahren:

Foto Byte (Bilddaten) KARC AVIF WebP JPEG 2000 JPEG
clic20v_01 20656 34.97 34.71 33.28 31.65 30.51
clic20v_02 124868 29.47 28.55 27.13 24.59 25.55
clic20v_03 62193 33.18 32.29 30.29 26.13 28.08
clic20v_04 63338 32.59 30.25 29.06 27.80 27.73
clic20v_05 48998 32.88 32.61 30.73 26.97 28.53
clic20v_06 26547 36.03 34.62 33.77 31.50 31.69
clic20v_07 87784 31.18 30.44 29.59 27.23 28.50
clic20v_08 73735 30.35 29.20 28.36 25.40 27.08
clic20v_09 39668 34.05 33.89 32.31 28.16 30.53
clic20v_10 69417 31.48 29.89 28.28 27.26 26.99
clic20v_11 4361 36.66 35.09 33.81 31.22 31.10
clic20v_12 56770 33.10 31.95 30.23 29.08 29.27
clic20v_13 17582 37.56 36.55 34.32 31.11 31.00
clic20v_14 55562 32.82 31.41 30.36 27.32 28.78

Was in diesem Ordner liegt

Pfad Inhalt
vergleichstafeln/ Eine A4-Tafel je Bild und Betriebspunkt (quer, 300 dpi, druckfertig)
bilder/ .karc-Dateien und dekodierte PNGs einer Auswahl
daten/messwerte.json Alle Einzelmessungen mit Methodik-Vermerk
daten/messwerte.csv Dieselben Daten als Tabelle

Dateibenennung der Tafeln:

<datensatz>_<nr>_mse-l<lambda>_ausschnitt_x<X>-y<Y>-<kante>px_A4quer300dpi.png

x/y ist die Position des gezeigten Ausschnitts im Originalbild, kante seine Größe in Bildpunkten. Der Ausschnitt wird automatisch dorthin gelegt, wo das Bild am detailreichsten ist — ein fester Mittenausschnitt trifft sonst oft Himmel oder Unschärfe und zeigt zwischen den Verfahren gar nichts.

Neu erzeugen

python samples/tests/vergleich_lauf.py --out samples/tests/<datum>_codecvergleich \
    --lambdas 0.0067,0.013,0.025
python samples/tests/vergleich_bericht.py --lauf samples/tests/<datum>_codecvergleich