2017年3月にGoogleから発表された新しいJPEGエンコーダ「Guetzli」と、同エンコーダが用いる画品質評価アルゴリズム「Butteraugli」アルゴリズムについて思うところとか。
多くのニュースサイトで『Google、JPEGを35%小さくできるエンコーダー「Guetzli」をオープンソースで公開』のようにセンセーショナルに紹介され、またGoogle社の手によるネームバリューもあったのか、世間の強い興味を引いたように思います。OSS方式にてソースコード公開されており、実際にエンコーダを動してみた方による良い/悪い評価結果が出てきています。
この記事では、同エンコーダ作者 Jyrki Alakuijala氏 の手による公開情報(かつ2017年3月時点で私がアクセスできたもの)から、個人的な解釈・感想をつらつらとまとめます。
たぶん適宜更新するかも。なるべく正確な解釈となるよう努力はしていますが、内容にウソや誤りがあれば指摘ください。あと、個人的な解釈もたまに挟まっています。全部鵜呑みにはしないでね。
Guetzliって結局どうなのさ
技術的には「JPEGを35%小さくできる」はミスリーディングを誘う表現であり、一般ユーザへの誇大広告になっているきらいがあると感じます。とはいえ、記事タイトルとしてはそんなもんかなと。
現時点の公開情報をもとに、極力ニュートラルに解釈する限りでは:
- ユーザにとって 見た目に気づきにくい部分 の データを削って ファイルサイズを小さくするJPEGエンコーダです。データ値は歪みますが、ヒトの目には劣化と写らない“はず”という考え方です。1
- 「Guetzli」エンコーダは"Proof of Concept(POC)"段階であり、実用目的ではありません。作者自身も処理速度が 超遅い ことを認めています。2
より画像処理やJPEGについて理解されている方向けの説明だと:
- 古典的な客観評価指標(MSE/PSNR/SSIM etc.)は無視し、同作者の手による 新しい客観評価アルゴリズム「Butteraugli」 に対してのみ最適化されたJPEGエンコーダです。3
- 最適化は “JPEG量子化テーブル” と個々の “DCT係数値” に対して 反復的に 行われます。膨大な演算時間を要するのはこのためです。4
- “他エンコーダより(平均で)35%小さくなった”のは、「Butteraugli」スコアが同一 となった出力JPEGファイルを比べたときのファイルサイズ比較です。作者自身も認める通り、旧来の評価指標による比較では「Guetzli」はあっさりと他エンコーダに負けます。5
- OSS方式のため「Butteraugli」アルゴリズムの実装コードは公開されていますが、現時点では客観的データに乏しく科学的プロセスによる検証はこれからだと感じます。
Butteraugliって何なの
現時点では”情報が少なすぎて何とも言えない”というのが正直な感想です。
arXiv[1]によると、ヒトの目がもつ次の特性を考慮しているとのこと。色彩工学と画像符号化に馴染みがないと意味不明だと思うので、勝手な超意訳をくっつけておきます:
- 3種類ある錐体細胞はその分光感度が重複しているため、ガンマ補正をRGB色空間で行うのは適切ではない。YUV色空間はRGB空間からの線形変換に過ぎないため、より適切な処理を行うべき。
- 意訳:従来の色表現手法(YUV)よりもヒトの目の生物学的・物理的特性に近い色表現手法を使おう。
- 青色の知覚は赤色/緑色に比べて空間解像度が低く、網膜の高解像エリアにはほとんど存在しない。青色の高周波成分は正確さを劣化させてエンコードできるはず。
- 意訳:ヒトの目は青色の変化に対して鈍い。そこから積極的にデータを劣化させよう。
- 画像中の微細構造の見え方はその周囲の視覚的アクティビティ(≒複雑さ)に依存する。視覚的に乱雑な領域は正確さを劣化させてエンコードできるはず。
- 意訳:ごちゃごちゃしている部分は、元の画像と異なるようにごちゃごちゃしていてもどうせ気づかない。そこから積極的にデータを劣化させよう。
それぞれ言わんとすることは分かるのですが、あまり踏み込んだ説明がなされていません。「Butteraugli」アルゴリズムのソースコードをのぞくと結構な数のマジックナンバー(定数値)が散りばめられており、それらの値をどうやって決めたのか/なぜその値が妥当なのかという説明を見つけられませんでした。
画像圧縮による劣化/歪みを定量化するのは、現時点では 非常に難しい問題 です。古典的なMSE/PSNRや比較的新しいSSIMでも、理想的な評価関数からは程遠いというのが現実だと思います。もちろん、それぞれの評価関数により計算されるスコアと、人間が画像を見て付けるスコア「MOS(Mean Opinion Score)」にはちゃんと相関関係はあります。一方で、ヒトは綺麗と判断するが計算スコアは悪い/その逆となるデータも多数存在します(意図的にそういう画像を生成可能です)。ISO標準にも様々な画像劣化を定量化するアルゴリズムが定義されていますが、私が知る限り決定打のようなものは存在しません(してたら教えて!!)。
言い方は悪いですが「俺が考えた最強のアルゴリズム実装してみた」感が拭えず、もう少し情報がほしいなと思う次第です。
情報源
- [1] arXiv: "Guetzli: Perceptually Guided JPEG Encoder," March 14, 2017
- [2] arXiv: "Users prefer Guetzli JPEG over same-sized libjpeg," March 14, 2017
- [3] encode.ru: SSIM / MSSIM vs MSE, December 2015-
- [4] encode.ru: Guetzli - a new more psychovisual JPEG encoder, October 2016-
- [5] HackerNews: Guetzli: A New Open-Source JPEG Encoder, March 2017-
-
[1] Abstract "Guetzli is a new JPEG encoder that aims to produce visually indistinguishable images at a lower bit-rate than other common JPEG encoders." ↩
-
[1] Abstract "Guetzli’s computation is currently extremely slow, which limits its applicability to compressing static content and serving as a proof-of-concept that we can achieve significant reductions in size by combining advanced psychovisual models with lossy compression techniques." ↩
-
[1] Abstract "Guetzli uses Butteraugli, our perceptual distance metric, as the source of feedback in its optimization process." ↩
-
[1] Abstract "It optimizes both the JPEG global quantization tables and the DCT coefficient values in each JPEG block using a closed-loop optimizer." ↩
-
[1] Abstract "We reach a 29-45% reduction in data size for a given perceptual distance, according to Butteraugli, in comparison to other compressors we tried." ↩