引き続きJPEGエンコーダGuetzliについての話です。
前回までは長辺1920pxにリサイズした画像を、普通のUltrabookでエンコードしていました。これまでの検証で、メモリ大量消費&シングルスレッド動作であることも相まって、超絶に悲惨なパフォーマンスであることが判っていますが、非力なシングルボードコンピュータの場合はどうなのか検証してみます。
測定条件
- シングルボードコンピュータとしてOrange Pi Oneを使います。Orange Pi OneへのGuetzliの導入については、以下の投稿に記載しています。
guetzliをOrangePi One (Armbian環境)に導入する - 記憶は人なり - 入力画像データについてはこれまでと同様に、Cloud, Plum, ST, TTの4パターンを利用していますが、メモリが枯渇するため解像度を長辺1280pxまで落としています。
- 圧縮率は出力JPEGファイルサイズを元PNGファイルサイズで除した値(CompressionRatio = OutputFileSize / OriginalFileSize)と定義します。
- いい加減なスクリプトで測定しているため、処理時間は最大1秒の誤差が含まれる可能性が有ります。
Orange Pi One スペック
- CPU
- Allwinner H3 (Quad-core Cortex-A7)
- Memory
- 512MB
- OS
- ARMBIAN 5.25 stable Ubuntu 16.04.2 LTS 3.4.113-sun8i
詳細は以下の投稿に記載していますが、一言で表すと中華版Raspberry Piといった感じのシングルボードコンピュータです。
Orange Pi Oneが届いた - 記憶は人なり
Data Pattern: Cloud
Input File Spec
- Resolution
- 1280x853
- Bit Depth
- 8bit
- Color Space
- sRGB
- File Format
- PNG (internally ZIP compression)
Result
Quality | OutputSize [Bytes] | CompressionRatio | ProcessingTime [sec] |
---|---|---|---|
guetzli_84 | 74162 | 6.56% | 662 |
guetzli_85 | 81401 | 7.20% | 770 |
guetzli_86 | 84612 | 7.48% | 764 |
guetzli_87 | 86836 | 7.68% | 740 |
guetzli_88 | 94167 | 8.32% | 936 |
guetzli_89 | 99178 | 8.77% | 874 |
guetzli_90 | 105476 | 9.32% | 864 |
guetzli_91 | 123150 | 10.89% | 965 |
guetzli_92 | 143115 | 12.65% | 1012 |
guetzli_93 | 164145 | 14.51% | 1300 |
guetzli_94 | 193832 | 17.13% | 1290 |
guetzli_95 | 227724 | 20.13% | 1593 |
guetzli_96 | 294433 | 26.03% | 2125 |
guetzli_97 | 409454 | 36.19% | 3106 |
guetzli_98 | 569443 | 50.33% | 8299 |
guetzli_99 | #N/A | #N/A | 2937 |
guetzli_100 | 887081 | 78.41% | 1002 |
libjpeg_10 | 36775 | 3.25% | 0 |
libjpeg_20 | 44125 | 3.90% | 0 |
libjpeg_30 | 51466 | 4.55% | 1 |
libjpeg_40 | 58074 | 5.13% | 0 |
libjpeg_50 | 64661 | 5.72% | 0 |
libjpeg_60 | 71320 | 6.30% | 0 |
libjpeg_70 | 82753 | 7.31% | 1 |
libjpeg_80 | 102663 | 9.07% | 0 |
libjpeg_84 | 117094 | 10.35% | 0 |
libjpeg_85 | 120289 | 10.63% | 1 |
libjpeg_86 | 126413 | 11.17% | 1 |
libjpeg_87 | 129916 | 11.48% | 0 |
libjpeg_88 | 137630 | 12.17% | 0 |
libjpeg_89 | 142059 | 12.56% | 1 |
libjpeg_90 | 191897 | 16.96% | 1 |
libjpeg_91 | 204643 | 18.09% | 1 |
libjpeg_92 | 212923 | 18.82% | 0 |
libjpeg_93 | 234967 | 20.77% | 0 |
libjpeg_94 | 262153 | 23.17% | 1 |
libjpeg_95 | 293281 | 25.92% | 1 |
libjpeg_96 | 341433 | 30.18% | 0 |
libjpeg_97 | 394283 | 34.85% | 1 |
libjpeg_98 | 458633 | 40.54% | 1 |
libjpeg_99 | 629620 | 55.65% | 0 |
libjpeg_100 | 879146 | 77.71% | 1 |
※guetzliのQ=99時(恐らく)メモリ枯渇によりOSにkillされたため所要時間はkillされるまでの時間を意味する。出力ファイルは得られていない。
Data Pattern: Plum
Input File Spec
- Resolution
- 1280x961
- Bit Depth
- 8bit
- Color Space
- sRGB
- File Format
- PNG (internally ZIP compression)
Result
Quality | OutputSize [Bytes] | CompressionRatio | ProcessingTime [sec] |
---|---|---|---|
guetzli_84 | 97614 | 6.72% | 866 |
guetzli_85 | 99226 | 6.83% | 899 |
guetzli_86 | 105367 | 7.25% | 808 |
guetzli_87 | 108190 | 7.45% | 955 |
guetzli_88 | 113589 | 7.82% | 947 |
guetzli_89 | 119097 | 8.20% | 933 |
guetzli_90 | 131471 | 9.05% | 913 |
guetzli_91 | 141347 | 9.73% | 1021 |
guetzli_92 | 151238 | 10.41% | 1078 |
guetzli_93 | 168160 | 11.58% | 1177 |
guetzli_94 | 218603 | 15.05% | 1312 |
guetzli_95 | 253366 | 17.44% | 1413 |
guetzli_96 | 314340 | 21.64% | 1840 |
guetzli_97 | 403307 | 27.77% | 2316 |
guetzli_98 | 531716 | 36.61% | 3378 |
guetzli_99 | #N/A | #N/A | 9767 |
guetzli_100 | 998122 | 68.72% | 1371 |
libjpeg_10 | 46810 | 3.22% | 1 |
libjpeg_20 | 58868 | 4.05% | 1 |
libjpeg_30 | 69295 | 4.77% | 0 |
libjpeg_40 | 77345 | 5.33% | 1 |
libjpeg_50 | 85080 | 5.86% | 1 |
libjpeg_60 | 93335 | 6.43% | 0 |
libjpeg_70 | 106570 | 7.34% | 0 |
libjpeg_80 | 129395 | 8.91% | 1 |
libjpeg_84 | 145770 | 10.04% | 1 |
libjpeg_85 | 149649 | 10.30% | 0 |
libjpeg_86 | 156702 | 10.79% | 0 |
libjpeg_87 | 161086 | 11.09% | 1 |
libjpeg_88 | 170370 | 11.73% | 1 |
libjpeg_89 | 175960 | 12.12% | 0 |
libjpeg_90 | 236379 | 16.27% | 0 |
libjpeg_91 | 250694 | 17.26% | 1 |
libjpeg_92 | 260963 | 17.97% | 1 |
libjpeg_93 | 286149 | 19.70% | 1 |
libjpeg_94 | 317138 | 21.84% | 0 |
libjpeg_95 | 352415 | 24.26% | 1 |
libjpeg_96 | 410387 | 28.26% | 1 |
libjpeg_97 | 477767 | 32.89% | 0 |
libjpeg_98 | 564811 | 38.89% | 0 |
libjpeg_99 | 744996 | 51.29% | 1 |
libjpeg_100 | 993681 | 68.42% | 0 |
※guetzliのQ=99時(恐らく)メモリ枯渇によりOSにkillされたため所要時間はkillされるまでの時間を意味する。出力ファイルは得られていない。
Data Pattern: ST
Input File Spec
- Resolution
- 960x1280
- Bit Depth
- 8bit
- Color Space
- sRGB
- File Format
- PNG (internally ZIP compression)
Result
Quality | OutputSize [Bytes] | CompressionRatio | ProcessingTime [sec] |
---|---|---|---|
guetzli_84 | 149535 | 10.79% | 1007 |
guetzli_85 | 154671 | 11.16% | 951 |
guetzli_86 | 172547 | 12.45% | 1066 |
guetzli_87 | 179627 | 12.97% | 1179 |
guetzli_88 | 190907 | 13.78% | 1126 |
guetzli_89 | 201281 | 14.53% | 1138 |
guetzli_90 | 222521 | 16.06% | 1269 |
guetzli_91 | 241030 | 17.40% | 1220 |
guetzli_92 | 273054 | 19.71% | 1533 |
guetzli_93 | 305376 | 22.04% | 1796 |
guetzli_94 | 349828 | 25.25% | 2613 |
guetzli_95 | 1000920 | 72.25% | 3396 |
guetzli_96 | 1000920 | 72.25% | 5630 |
guetzli_97 | 563463 | 40.67% | 7116 |
guetzli_98 | 640192 | 46.21% | 6547 |
guetzli_99 | #N/A | #N/A | 1922 |
guetzli_100 | 1000920 | 72.25% | 3378 |
libjpeg_10 | 49933 | 3.60% | 0 |
libjpeg_20 | 65809 | 4.75% | 0 |
libjpeg_30 | 78656 | 5.68% | 1 |
libjpeg_40 | 89208 | 6.44% | 0 |
libjpeg_50 | 99266 | 7.16% | 0 |
libjpeg_60 | 109669 | 7.92% | 1 |
libjpeg_70 | 125058 | 9.03% | 1 |
libjpeg_80 | 149758 | 10.81% | 0 |
libjpeg_84 | 166401 | 12.01% | 0 |
libjpeg_85 | 170677 | 12.32% | 1 |
libjpeg_86 | 177723 | 12.83% | 1 |
libjpeg_87 | 182479 | 13.17% | 0 |
libjpeg_88 | 191039 | 13.79% | 0 |
libjpeg_89 | 197472 | 14.25% | 1 |
libjpeg_90 | 253220 | 18.28% | 1 |
libjpeg_91 | 266341 | 19.22% | 0 |
libjpeg_92 | 279623 | 20.18% | 0 |
libjpeg_93 | 304535 | 21.98% | 1 |
libjpeg_94 | 334901 | 24.17% | 1 |
libjpeg_95 | 373172 | 26.94% | 0 |
libjpeg_96 | 428833 | 30.95% | 0 |
libjpeg_97 | 494866 | 35.72% | 1 |
libjpeg_98 | 573413 | 41.39% | 1 |
libjpeg_99 | 765021 | 55.22% | 0 |
libjpeg_100 | 994901 | 71.81% | 1 |
※guetzliのQ=99時(恐らく)メモリ枯渇によりOSにkillされたため所要時間はkillされるまでの時間を意味する。出力ファイルは得られていない。
Data Pattern: TT
Input File Spec
- Resolution
- 1280x853
- Bit Depth
- 8bit
- Color Space
- sRGB
- File Format
- PNG (internally ZIP compression)
Result
Quality | OutputSize [Bytes] | CompressionRatio | ProcessingTime [sec] |
---|---|---|---|
guetzli_84 | 140276 | 10.27% | 862 |
guetzli_85 | 142514 | 10.43% | 891 |
guetzli_86 | 147738 | 10.81% | 948 |
guetzli_87 | 151917 | 11.12% | 923 |
guetzli_88 | 160205 | 11.72% | 981 |
guetzli_89 | 168046 | 12.30% | 1031 |
guetzli_90 | 177333 | 12.98% | 957 |
guetzli_91 | 188429 | 13.79% | 951 |
guetzli_92 | 213015 | 15.59% | 1026 |
guetzli_93 | 237694 | 17.40% | 1191 |
guetzli_94 | 273493 | 20.02% | 1409 |
guetzli_95 | 313902 | 22.97% | 1603 |
guetzli_96 | 389090 | 28.47% | 2093 |
guetzli_97 | 492023 | 36.01% | 2488 |
guetzli_98 | #N/A | #N/A | 2882 |
guetzli_99 | #N/A | #N/A | 1232 |
guetzli_100 | 1055583 | 77.25% | 2803 |
libjpeg_10 | 50777 | 3.72% | 1 |
libjpeg_20 | 65733 | 4.81% | 0 |
libjpeg_30 | 77741 | 5.69% | 0 |
libjpeg_40 | 87845 | 6.43% | 1 |
libjpeg_50 | 97300 | 7.12% | 1 |
libjpeg_60 | 107364 | 7.86% | 0 |
libjpeg_70 | 122566 | 8.97% | 0 |
libjpeg_80 | 148103 | 10.84% | 1 |
libjpeg_84 | 166795 | 12.21% | 0 |
libjpeg_85 | 171440 | 12.55% | 0 |
libjpeg_86 | 179257 | 13.12% | 0 |
libjpeg_87 | 184679 | 13.52% | 1 |
libjpeg_88 | 195090 | 14.28% | 0 |
libjpeg_89 | 201887 | 14.77% | 0 |
libjpeg_90 | 274507 | 20.09% | 0 |
libjpeg_91 | 291756 | 21.35% | 1 |
libjpeg_92 | 306423 | 22.43% | 1 |
libjpeg_93 | 335662 | 24.56% | 0 |
libjpeg_94 | 368727 | 26.98% | 0 |
libjpeg_95 | 410511 | 30.04% | 1 |
libjpeg_96 | 471052 | 34.47% | 1 |
libjpeg_97 | 542070 | 39.67% | 0 |
libjpeg_98 | 634336 | 46.42% | 1 |
libjpeg_99 | 833589 | 61.00% | 1 |
libjpeg_100 | 1080673 | 79.09% | 1 |
※guetzliのQ=98,99時(恐らく)メモリ枯渇によりOSにkillされたため所要時間はkillされるまでの時間を意味する。出力ファイルは得られていない。
まとめ
非力なシングルボードコンピュータでもlibjpegは優れた動作パフォーマンスを示すことが確認できた。
一方で、これまでに行ったWindows環境でのUltrabookでの検証同様に、guetzliは劣悪な動作パフォーマンスを示しており、実用性に対する疑問がより一層深まった。
なお、4coreプロセッサのArmbian環境においてもユーザモードで喰われるCPU使用率は25%に留まることから、Windows版バイナリと同様にguetzliのマルチスレッド対応は行われていないことが解る。
これまでの検証では、「同一ファイルサイズならlibjpegより高画質」というのがかなり誇張表現に感じられ、「libjpegより100倍から1000倍以上遅く、同一Qualityパラメータ指定時には必ずしもファイルサイズが小さくならず、メモリを湯水の如く消費し、CPUを1thred食い潰す激烈に遅いJPEGエンコーダ」というのが正直な感想です。
処理時間はバカみたいにかかるけど、必ず高画質な結果が得られるという類の処理でもないですし、guetzliの使いどころが相変わらず謎なままです。
以上。