|
_wb_
|
2022-01-05 10:45:11
|
Openjpeg does true lossless by default
|
|
2022-01-05 10:46:49
|
It can only do it in one way though, afaiu. So no room for encoder improvements in terms of density.
|
|
|
Scope
|
2022-01-05 10:52:26
|
Because according to preliminary sizes, OpenJPH is better than JXL `-e 9`, WebP `-z 9` and on par with slow BMF, on very different content, but at FJXL speeds (for kakadu)?
That's pretty strange ๐ค
|
|
2022-01-05 11:07:42
|
Yes, it is lossy or maybe lossy color conversion? ๐ค
|
|
|
_wb_
|
2022-01-05 11:58:26
|
Ah, maybe the htj2k version isn't lossless by default
|
|
|
Jyrki Alakuijala
|
|
Traneptora
as a curiosity experiment I tried taking JpegXL vardct and subtracting the original, and then encoding the difference between the original and the quantized as lossless, so I could perfectly reconstruct the original with a lossy backdrop
|
|
2022-01-07 10:59:55
|
Usually this approach will not work -- the residual has two sources of entropy, the original image and the errors made in VarDCT, and the overall compression will be (likely) 10% worse than just compressing the original image with modular
|
|
|
eddie.zato
|
|
2022-01-07 11:10:00
|
I think we used to do very well with generation loss. I wonder if recent quantization changes have sabotaged the generation loss behaviour. It could be interesting to try generation loss with a year old version of libjxl.
... also it might be a good idea to turn of DCT coefficient 'dithering' for energy preservation to improve on generation loss.
|
|
|
Traneptora
|
|
Jyrki Alakuijala
Usually this approach will not work -- the residual has two sources of entropy, the original image and the errors made in VarDCT, and the overall compression will be (likely) 10% worse than just compressing the original image with modular
|
|
2022-01-07 12:09:14
|
the experiment I performed supports this theory
|
|
|
eddie.zato
|
|
Jyrki Alakuijala
I think we used to do very well with generation loss. I wonder if recent quantization changes have sabotaged the generation loss behaviour. It could be interesting to try generation loss with a year old version of libjxl.
... also it might be a good idea to turn of DCT coefficient 'dithering' for energy preservation to improve on generation loss.
|
|
2022-01-08 06:12:04
|
Voila:
|
|
2022-01-08 06:12:33
|
`-d` is random between 1.00 and 2.00
|
|
2022-01-08 06:13:13
|
This image by Stanley Lau turned out to be resistant to funny artifacts ๐
|
|
2022-01-08 04:52:42
|
Tried it with photo this time:
|
|
|
Jyrki Alakuijala
|
2022-01-09 08:00:08
|
Thank you!
|
|
|
eddie.zato
|
2022-01-09 09:18:18
|
I think the second test is a good example of how changes from past year have affected the generation loss to the worse, and at the same time how much the preservation of details has improved.
|
|
|
_wb_
|
2022-01-11 05:28:46
|
<@!111445179587624960> you may want to do a benchmark of fjxl with and without this pull request: https://github.com/libjxl/libjxl/pull/1086
|
|
|
Scope
|
2022-01-11 05:29:40
|
Yep, as soon as I have time
|
|
|
_wb_
|
2022-01-11 05:36:38
|
There's some margin for improvement: it is using the (clamped)Gradient predictor also in the palette case while probably the Zero, Select or North predictor works better.
|
|
2022-01-11 05:38:26
|
But it should help on images with few colors
|
|
2022-01-11 05:42:26
|
In the QOI testset there are only about 70 images where it makes a difference, but for those images, it cuts the bytesize in half
|
|
|
Scope
|
2022-01-11 06:39:19
|
Hmm, probably yes, other predictors would be useful, since for now, for Pixel Art and Game sets compression hasn't improved that much, and on some purely photos it's even gotten a little worse (but less than 1%)
|
|
2022-01-11 06:54:30
|
|
|
2022-01-11 07:03:44
|
Hmm, palette detection doesn't work on something like this?
|
|
2022-01-11 07:03:46
|
https://i.redd.it/49ox0pmrf6c61.png
|
|
2022-01-11 07:30:27
|
```3,644,906 - FJXL
3,771,200 - FJXL palette detection```
|
|
|
|
veluca
|
2022-01-11 07:39:04
|
... why would that make any difference whatsoever?
|
|
2022-01-11 07:39:09
|
pretty sure it has many colors
|
|
2022-01-11 07:39:30
|
perhaps it skips huffman adaptation? <@!794205442175402004>
|
|
|
_wb_
|
2022-01-11 07:56:10
|
it shouldn't change anything when palette is not used
|
|
|
|
haaaaah
|
|
Scope
|
|
2022-01-11 08:40:40
|
A lot of those pictures are missing now (from the reddit source link). Are they integrated into the benchmark itself? I don't know who runs or maintains the benchmark itself..
|
|
2022-01-11 08:41:11
|
Integrated as in stored with the benchmark..
|
|
2022-01-11 08:44:02
|
Okay, the benchmark isn't in the jpegxl.info website, don't remember where I got the link..
|
|
|
Scope
|
2022-01-11 08:53:05
|
I am the creator of this benchmark, but yes, this is a problem, but I have no choice, since I do not want special test sets of free images, then I use the sets from various public places, although I have all the source images, but for obvious reasons I can not distribute links to a very wide audience or reference them in the spreadsheet itself
|
|
2022-01-11 09:15:07
|
But, if anyone needed, a link to all sets was mentioned here
https://discord.com/channels/794206087879852103/803645746661425173/923949551650500618
|
|
2022-01-12 12:48:03
|
<@!179701849576833024> Hmm, it seems that after some recent changes the result is noticeably worse, if I'm not mistaken sometimes FPNGE was better than FPNG, even on images without transparency, I think on all photo sets
|
|
2022-01-12 02:47:08
|
Also
> fprintf(stderr, "Usage: %s in.png out.**jxl** [num_reps]\n", argv[0]);
<https://github.com/veluca93/fpnge/blob/main/fpnge_main.cc#L27>
|
|
2022-01-12 05:14:33
|
https://twitter.com/richgel999/status/1481100874483216384
|
|
|
|
veluca
|
|
Scope
https://twitter.com/richgel999/status/1481100874483216384
|
|
2022-01-12 07:57:28
|
that sounds about right
|
|
|
Scope
Also
> fprintf(stderr, "Usage: %s in.png out.**jxl** [num_reps]\n", argv[0]);
<https://github.com/veluca93/fpnge/blob/main/fpnge_main.cc#L27>
|
|
2022-01-12 07:57:36
|
haha ops!
|
|
|
_wb_
|
|
Scope
Hmm, probably yes, other predictors would be useful, since for now, for Pixel Art and Game sets compression hasn't improved that much, and on some purely photos it's even gotten a little worse (but less than 1%)
|
|
2022-01-12 11:10:26
|
I made changes to the branch, should have more impact now
|
|
|
Scope
|
|
_wb_
But it should help on images with few colors
|
|
2022-01-12 02:09:38
|
Hmm, so is it possible to use the Gradient predictor for palette images with few colors and Zero or something else when there are more colors?
|
|
|
_wb_
I made changes to the branch, should have more impact now
|
|
2022-01-12 02:58:49
|
|
|
|
_wb_
|
2022-01-12 03:01:10
|
that does look like a nice improvement
|
|
|
Scope
|
2022-01-12 03:03:54
|
Yep, if further improving efficiency for Pixel Art and Game Sets, FJXL will be on par with good PNG encoders
|
|
|
|
Deleted User
|
2022-01-12 03:05:12
|
should be reachable with custom NN upscaling ;)
|
|
|
Scope
|
2022-01-12 03:12:09
|
Perhaps, but I think even with the proper predictors it is possible to noticeably improve compression
|
|
|
_wb_
that does look like a nice improvement
|
|
2022-01-12 03:12:35
|
Btw, how can I check which one might be better for FJXL by using CJXL, choose something like `-s 4 -i 0` and different predictors?
|
|
|
_wb_
|
2022-01-12 03:34:18
|
cjxl doesn't quite do the same thing as fjxl, not with any options, but I _think_ something like `-m -s 8 -C 1 -I 0 -P 5 --palette 0 -X 0 -Y 0 --patches 0` is somewhat close to non-palette fjxl, and `-m -s 8 -C 0 -I 0 -P 5 --palette 512 -X 0 -Y 0 --patches 0` is somewhat close to palette fjxl
|
|
|
Scope
|
2022-01-12 03:37:49
|
Yes, I understand, I rather meant which predictor would be efficient for FJXL as well (for certain images), not a full FJXL emulation
|
|
|
_wb_
|
2022-01-12 03:40:33
|
I did some quick experimentation and for some images, the Select predictor is more effective with palette
|
|
|
Scope
|
2022-01-12 03:43:38
|
Hmm, more efficient than Zero, but it can also be pretty fast?
Although WebP also uses it even on fast modes and palette images have very good compression ๐ค
|
|
|
_wb_
|
2022-01-12 03:44:53
|
Select is basically the same as ClampedGradient regarding speed
|
|
|
Scope
|
2022-01-12 03:49:44
|
Then, it might be a good idea to have it and as I said, it would be useful further for slower modes and let's say `-e 3` could be a compression beast at its speed, if properly switched between several of the most effective predictors
|
|
|
_wb_
|
2022-01-12 04:39:18
|
Just picking best of `cjxl -e 3` and fjxl is probably a pretty good fast encoder
|
|
|
Scope
|
|
_wb_
cjxl doesn't quite do the same thing as fjxl, not with any options, but I _think_ something like `-m -s 8 -C 1 -I 0 -P 5 --palette 0 -X 0 -Y 0 --patches 0` is somewhat close to non-palette fjxl, and `-m -s 8 -C 0 -I 0 -P 5 --palette 512 -X 0 -Y 0 --patches 0` is somewhat close to palette fjxl
|
|
2022-01-12 05:42:38
|
Hmm, so Select predictor and smallest group size `-m -s 8 -C 0 -I 0 -P 4 -g 0 --palette 512 -X 0 -Y 0 --patches 0` showed better results for Pixel Art, don't know how this relates to FJXL but it might also be worth trying the smallest group size, this will also allow to use more threads for smaller images when it is needed for a bigger speed increase
|
|
|
_wb_
|
2022-01-12 05:44:33
|
smaller group size will likely only be worse in the fjxl case for density
|
|
2022-01-12 05:44:55
|
in the -s 8 case, it is doing both local and global palette
|
|
2022-01-12 05:46:18
|
fjxl only does global palette
|
|
|
Scope
|
2022-01-12 05:51:28
|
Hmm, but it might still be worth experimenting and comparing the smallest and largest group size for FJXL, maybe something will give better results
Also, like I said before, when the highest speed is needed, probably more tiles/groups per image would be better, if the efficiency loss isn't particularly noticeable
|
|
|
_wb_
|
2022-01-12 06:16:08
|
Yes, perhaps we could add a speed parameter to fjxl instead of aiming for a single trade-off point
|
|
|
Scope
|
2022-01-12 06:55:45
|
In the future it would be nice, but I think one fastest and one "slowest" mode with good compression similar to the most optimized PNG or better would be enough, also it would be nice if it was strongly asymmetric and had a high decoding speed
Something like a combination of `-e 3` for photos with something as efficient and fast for pixel art and some other artificial images where `-e 3` is bad
|
|
2022-01-12 10:23:53
|
https://twitter.com/richgel999/status/1481382860498116617
|
|
|
_wb_
|
2022-01-17 08:44:38
|
|
|
2022-01-17 08:45:03
|
updated with current versions of fpng and fjxl, and added fpnge
|
|
2022-01-17 08:46:21
|
fjxl is the version with this PR included: https://github.com/libjxl/libjxl/pull/1086
|
|
|
|
veluca
|
2022-01-17 09:08:34
|
nice! I assume fpnge is without a fixed predictor?
|
|
|
_wb_
|
2022-01-17 09:37:18
|
whatever it does by default
|
|
|
|
veluca
|
2022-01-17 09:39:05
|
can you also try -DFPNGE_FIXED_PREDICTOR=2 and 4?
|
|
|
_wb_
|
2022-01-17 09:39:17
|
sure
|
|
2022-01-17 09:48:20
|
|
|
2022-01-17 09:49:06
|
fixed predictor 4 seems to hit the best trade-off, imo
|
|
2022-01-17 09:49:28
|
is that paeth or which one is it?
|
|
|
|
veluca
|
2022-01-17 09:51:05
|
yup paeth
|
|
|
_wb_
|
2022-01-17 09:52:02
|
2 is avgN+W or which one is that?
|
|
|
|
veluca
|
2022-01-17 09:52:11
|
top iirc
|
|
|
_wb_
|
|
Fraetor
|
2022-01-17 02:46:09
|
The fact that fjxl produces smaller output than optipng is pretty amazing.
|
|
|
|
veluca
|
2022-01-17 02:46:45
|
I figure 99% of that is the color transform and the planar encoding
|
|
|
_wb_
|
2022-01-17 02:57:22
|
and clampedgradient being better than any of the png predictors
|
|
|
|
veluca
|
2022-01-17 03:00:55
|
not sure if it makes *that* much of a difference
|
|
|
_wb_
|
2022-01-17 03:18:00
|
Could make an fjxl with paeth instead to see how it performs...
|
|
|
|
veluca
|
2022-01-17 03:30:37
|
could, yes, should, good question... ๐
|
|
|
_wb_
|
2022-01-17 03:34:37
|
it's about 2% less dense with paeth than with clampedgradient
|
|
2022-01-17 03:34:49
|
so indeed not that much of a difference
|
|
2022-01-17 03:36:49
|
screenshots are 14.714 MB with clampedgradient, 14.967 MB with paeth
large photos are 49.885 MB with clampedgradient, 50.709 MB with paeth
small photos are 20.400 MB with clampedgradient, 20.872 MB with paeth
|
|
|
Fox Wizard
|
2022-01-17 04:19:32
|
~~gotta include avif to make every format seems 10 times better XD~~
|
|
|
Scope
|
|
_wb_
|
|
2022-01-17 04:33:59
|
Adding PIK would also be interesting, because in my comparisons it was better and faster than JXL `-e 3` (except Pixel Art)
|
|
|
_wb_
|
2022-01-17 05:06:02
|
sigh, I cannot even get pik compiled anymore
|
|
|
Scope
|
2022-01-17 05:29:12
|
Sad, since this is roughly what a fast path can be for `-e 3` with better compression, especially if further added selection of a more efficient mode for non-photo images
|
|
2022-01-17 05:37:45
|
And in this comparison, since FPNG is now faster, it might be nice to add FPNG -s (better compression, but a little slower) and FPNGE P4 to show how much faster FPNGE can be with still good compression
https://twitter.com/jonsneyers/status/1483000547934449668
|
|
2022-01-17 05:41:33
|
For FPNGE in the future it might be more convenient to have a choice of predictors through CLI options and add multithreading for really crazy fast encoding
|
|
|
_wb_
|
2022-01-17 06:28:28
|
for fjxl it would also in principle be possible to sacrifice some density to get more speed (skipping the palette check, the huffman code sampling, possibly skipping YCoCg or using SubtractGreen instead, possibly using a cheaper predictor, etc)
|
|
2022-01-17 06:29:48
|
or to sacrifice some speed for more density (do more huffman code sampling, perhaps add some ctx modeling)
|
|
2022-01-17 06:31:00
|
also some more specialization could be done, like a separate code path for RGB (as opposed to RGBA), which could make it a bit faster _and_ a bit denser for images without alpha
|
|
|
Scope
Sad, since this is roughly what a fast path can be for `-e 3` with better compression, especially if further added selection of a more efficient mode for non-photo images
|
|
2022-01-17 06:37:58
|
there is quite some room between fjxl and cjxl -e 1/2/3... perhaps i'll at some point make a qocjxl that fills that gap โ e.g. something that does WP like -e 3, but still uses huffman coding and lz77 like fjxl, and not hardcoded for 8-bit like fjxl, but also not as generic as cjxl (which can do up to 32-bit), maybe limited to 12 or 14-bit (i.e. can do everything in int16_t) would be a good spot...
|
|
|
Scope
|
|
_wb_
for fjxl it would also in principle be possible to sacrifice some density to get more speed (skipping the palette check, the huffman code sampling, possibly skipping YCoCg or using SubtractGreen instead, possibly using a cheaper predictor, etc)
|
|
2022-01-17 06:44:12
|
Yes, like adding -f (fast) and -s (slow) modes, because as I said before, having something like a balanced mode (slow for FJXL) would be even more useful for most people when the encoding speed is still fast for real use, but not as fast as the fastest modes, while having significantly better compression, which would at least beat the best optimized PNGs for most images
Although the simplicity of the encoder would be lost even more (but in my opinion this is a quite dubious advantage)
|
|
2022-01-17 06:58:26
|
Even faster mode is also interesting, but for FJXL there is a problem that decoding is not that fast and having an extremely fast encoder without the same decoding speed significantly limits use cases
|
|
|
_wb_
there is quite some room between fjxl and cjxl -e 1/2/3... perhaps i'll at some point make a qocjxl that fills that gap โ e.g. something that does WP like -e 3, but still uses huffman coding and lz77 like fjxl, and not hardcoded for 8-bit like fjxl, but also not as generic as cjxl (which can do up to 32-bit), maybe limited to 12 or 14-bit (i.e. can do everything in int16_t) would be a good spot...
|
|
2022-01-17 07:11:04
|
I think it would be more convenient as `-s` (slow) mode for FJXL as I mentioned above than creating another completely separate encoder
|
|
|
_wb_
|
2022-01-17 07:13:23
|
yes โ just codewise it wouldn't share that much code โ not that that matters much
|
|
|
Scope
|
|
_wb_
there is quite some room between fjxl and cjxl -e 1/2/3... perhaps i'll at some point make a qocjxl that fills that gap โ e.g. something that does WP like -e 3, but still uses huffman coding and lz77 like fjxl, and not hardcoded for 8-bit like fjxl, but also not as generic as cjxl (which can do up to 32-bit), maybe limited to 12 or 14-bit (i.e. can do everything in int16_t) would be a good spot...
|
|
2022-01-20 05:17:20
|
Would 12/14-bit support have minimal impact on speed and memory consumption?
And continuing the theme, I would like to see something like PIK in terms of efficiency, but with higher encoding speed, because there are still complaints that JXL is very slow and not so efficient for these speeds, so I think something like based on `-e 3` + good palette mode is a fairly balanced solution
Also, how much does WP affect compression, compared to the other things used in `-e 3`, does the predictor have the biggest impact?
Something lighter and faster could be useful too, but I think a mode with higher compression is more needed
|
|
|
_wb_
|
2022-01-20 05:35:12
|
WP is better than ClampedGradient for photo, but it does come at a significant speed cost
|
|
2022-01-20 05:35:54
|
what makes pik sometimes better is that it has some heuristic to select the RCT, while -e 3 just always uses YCoCg
|
|
|
fab
|
2022-01-20 05:36:29
|
|
|
2022-01-20 05:36:37
|
Why so poor compression
|
|
|
_wb_
|
2022-01-20 05:36:53
|
YCoCg is a good all-purpose RCT (and pik doesn't have it), but selecting an RCT per group like pik does it is good too
|
|
2022-01-20 05:38:32
|
not sure if 14-bit fjxl can be done, 10 and 12-bit should be doable
|
|
2022-01-20 05:40:15
|
as for impact on speed and memory: the only thing that would really change is that the input would be twice as large (8 bytes per pixel instead of 4), other than that the remaining steps would be pretty similar
|
|
2022-01-20 05:40:33
|
(assuming you skip palette for > 8 bit)
|
|
|
Scope
|
2022-01-20 05:48:17
|
Because for a fast encoder, I think it's better to prioritize the most used and common images, although for photos perhaps more than 8-bit may be necessary
And also yes, the fast path for RGB only without alpha (if it gives a noticeable gain)
|
|
2022-01-20 05:54:28
|
So like having a more restricted but faster and less memory-consuming encoder that is still usable enough and suitable for most common images
|
|
|
Fox Wizard
|
|
fab
Why so poor compression
|
|
2022-01-20 06:33:02
|
Guess that's hard to find out without the actual image :p
|
|
|
fab
|
2022-01-20 06:49:13
|
|
|
2022-01-20 06:53:46
|
I just use cjxlng
|
|
|
Fox Wizard
|
2022-01-20 07:06:50
|
For me it goes down from 792KB to 665KB with -q 100 -e 7
|
|
|
_wb_
|
2022-01-21 03:00:23
|
https://github.com/libjxl/libjxl/pull/1086 trims off another 1% from the QOI test set compared to yesterday's version of that branch
|
|
2022-01-21 03:01:36
|
maybe i've been tweaking a bit too much for the QOI test set, the improvement is smaller for other test sets
|
|
|
Scope
|
|
2022-01-21 03:05:17
|
i'm curious what the effect is on these other corpuses
|
|
|
Scope
|
|
_wb_
i'm curious what the effect is on these other corpuses
|
|
2022-01-21 04:55:21
|
On the default setting?
Also, maybe in the future rename Effort to something else when slower modes come out, because there could be confusion for such large values:
`Effort should be between 0 and 127 (default is 2, more is slower)`
And I would also like to be able to disable multithreaded mode via cli
|
|
|
_wb_
i'm curious what the effect is on these other corpuses
|
|
2022-01-21 05:02:12
|
<https://drive.google.com/drive/u/2/folders/1X_F_vhNwJFhPWSW3EeSa-gGhhikkOoYd>
And also my sets which can also be used for tuning, there are a lot of images, but for fast encoders it does not take long and it is also possible to use only a certain amount of random images from each set
|
|
|
|
veluca
|
|
Scope
On the default setting?
Also, maybe in the future rename Effort to something else when slower modes come out, because there could be confusion for such large values:
`Effort should be between 0 and 127 (default is 2, more is slower)`
And I would also like to be able to disable multithreaded mode via cli
|
|
2022-01-21 05:21:11
|
either remove -fopenmp when compiling, or pass the OMP_NUM_THREADS=1 environment variable
|
|
|
Scope
|
2022-01-21 05:21:53
|
Yeah, I meant without recompiling
|
|
|
_wb_
i'm curious what the effect is on these other corpuses
|
|
2022-01-21 05:48:25
|
FJXL PD is the previous build
|
|
|
_wb_
|
2022-01-21 05:51:55
|
where is the current build?
|
|
|
Scope
|
|
_wb_
|
2022-01-21 05:52:52
|
interesting
|
|
2022-01-21 05:53:19
|
not a very big difference, it seems
|
|
2022-01-21 05:54:33
|
should be somewhat faster though - it's now using only about half the amount of samples for huffman code learning than in the previous build
|
|
2022-01-21 05:54:54
|
can set effort to 4 to get something closer to the previous build
|
|
|
Scope
|
2022-01-21 05:59:10
|
Yes, it's a little worse in some of the photo/game sets and pixel art, I'll compare different efforts later
|
|
2022-01-21 06:33:58
|
It seems that something higher than Effort 4 does not affect that much
|
|
2022-01-21 06:38:13
|
Large photo
|
|
2022-01-21 06:39:51
|
Pixel Art
|
|
|
_wb_
|
2022-01-21 06:41:38
|
it's image-dependent but yes, generally speaking more effort just makes it slower and impact on density goes down above effort 16 or so
|
|
2022-01-21 06:43:04
|
effort 8 should still be slightly better than effort 4 in density, but it's probably beyond the third decimal of bpp
|
|
|
Scope
|
2022-01-21 06:47:40
|
Fractals <:monkaMega:809252622900789269>
|
|
|
_wb_
|
2022-01-21 06:58:03
|
heh interesting, it's not monotonic on that image
|
|
|
Scope
|
2022-01-22 11:30:47
|
Very good efficiency on photo sets, especially LPCB ๐ค
|
|
2022-01-22 11:32:41
|
But for something like comics, manga, and pixel art, FPNG is noticeably better
<@!179701849576833024> I did not add previous FPNGE results, but overall compression is better
|
|
|
Fraetor
|
2022-01-22 11:33:53
|
What changes between JXL e 3 and e 7 to get such a difference in the Pixel Art corpus?
|
|
|
|
veluca
|
|
Scope
Very good efficiency on photo sets, especially LPCB ๐ค
|
|
2022-01-22 11:35:47
|
anything grayscale or palette-izable will work horribly with fpnge - it'll be encoded as RGB888, which is bad
|
|
|
Fraetor
What changes between JXL e 3 and e 7 to get such a difference in the Pixel Art corpus?
|
|
2022-01-22 11:37:07
|
e3 uses a predictor that really only works for photo content, e7 tries to figure out what to use and to do some better ctx modeling
|
|
|
Fraetor
|
2022-01-22 11:37:43
|
Ah, thank you.
|
|
|
Scope
|
|
veluca
anything grayscale or palette-izable will work horribly with fpnge - it'll be encoded as RGB888, which is bad
|
|
2022-01-22 11:39:15
|
Yes, that's why I asked about this kind of content and if it's possible to identify and compress it more efficiently
|
|
|
|
veluca
|
2022-01-22 11:39:27
|
it's possible in theory
|
|
2022-01-22 11:39:32
|
probably not even a lot of work
|
|
2022-01-22 11:39:55
|
but I probably won't do it ๐
|
|
|
Scope
|
2022-01-22 11:43:58
|
Also, does JXL use something special for this kind of content?
Since as recently discussed on encode.su there are MRP and other codecs very efficient for grayscale and such
|
|
|
|
veluca
|
2022-01-22 11:44:44
|
not really, a lot of gains come for free with planar encoding
|
|
2022-01-22 11:45:38
|
we don't have the kind of pixel bitpacking that PNG has, though
|
|
|
Scope
|
2022-01-23 05:36:06
|
FPNGE4 (Predictor 4)
|
|
|
_wb_
|
2022-01-23 07:17:11
|
There could be some extra speed for grayscale fjxl, but not much extra density
|
|
2022-01-23 07:17:23
|
Same with specialized RGB without A path
|
|
|
veluca
we don't have the kind of pixel bitpacking that PNG has, though
|
|
2022-01-23 07:20:04
|
Not explicitly, but I wonder if 3 horizontal squeezes and then an 8-channel Palette does not boil down to kind of the same thing as pixel bitpacking
|
|
|
Scope
|
2022-01-23 06:31:28
|
Hmm, so as a thinking, for FPNGE would also be useful something like a palette mode, more simple than FJXL, but as I understand it is better to use Zero predictor and some compression for indexed colors and where there are few colors?
|
|
|
_wb_
|
2022-01-23 06:39:54
|
In fjxl it uses clampedgradient also for palette, maybe I should experiment a bit more with other predictors
|
|
2022-01-23 06:40:17
|
Palette detection code could indeed also be used for fpnge
|
|
|
|
veluca
|
|
Scope
FPNGE4 (Predictor 4)
|
|
2022-01-23 09:48:59
|
I improved density a bit in some cases (also speed, but whatever :P) in case you want to give it a try again
|
|
|
Scope
|
2022-01-23 09:50:05
|
<:Hypers:808826266060193874> I'll retest in a while
|
|
|
|
veluca
|
2022-01-23 09:50:31
|
thanks!
|
|
|
Scope
|
2022-01-23 09:51:44
|
Also, do common PNG encoders use some sort of heuristics to fast choose predictors, or is it also sort of a brute force?
|
|
|
|
veluca
|
2022-01-23 09:53:26
|
they use some heuristics
|
|
2022-01-23 09:53:32
|
how good they are is debatable ๐
|
|
|
_wb_
|
2022-01-23 10:56:02
|
Libpng doesn't have integrated deflate, so it does predictor selection based on something that not necessarily correlates well with actual compression
|
|
|
Scope
|
2022-01-24 12:39:59
|
Now it is almost like FPNG in density or better, except for the low-color images
|
|
2022-01-24 12:53:54
|
<@!179701849576833024> Maybe also add the exact file size below bpp in this mini-benchmark after encoding with reps?
For easier comparison, because for example FPNG uses only file size
|
|
|
|
veluca
|
2022-01-24 12:55:06
|
I do that with ls xD but yeah I could
|
|
|
Scope
|
2022-01-24 12:58:07
|
๐ค FPNGE `158.122 MP/s` `6 619 757`
Only QOI is better, but slower
|
|
|
|
veluca
|
2022-01-24 01:01:03
|
what's the image?
|
|
|
Scope
|
|
|
veluca
|
2022-01-24 01:02:54
|
ah I think I can see why
|
|
2022-01-24 01:02:59
|
what does fjxl make of it?
|
|
|
Scope
|
2022-01-24 01:03:03
|
8T FJXL `419.444 MP/s` `5 147 264` <:Stonks:806137886726553651>
|
|
|
|
veluca
|
2022-01-24 01:03:41
|
yeah I thought it would compress well
|
|
2022-01-24 01:04:11
|
YCoCg really helps here, I think
|
|
2022-01-24 01:04:32
|
so does QOI's color cache, probably
|
|
|
Scope
|
2022-01-24 01:06:46
|
Also, strange, does FPNG use something different for palette images or is it just more heavy compression?
|
|
|
|
veluca
|
2022-01-24 01:07:28
|
no clue
|
|
2022-01-24 01:07:47
|
might just be that the better RLE gives bigger benefits
|
|
|
Scope
|
2022-01-24 03:12:18
|
PNGCHECK comparison for some image from a pixel art set (FPNGE, FPNG, optimized PNG) ๐ค
|
|
2022-01-24 03:12:54
|
|
|
2022-01-24 03:15:28
|
So does FPNG also use a 32k window or is that a wrong detection?
|
|
2022-01-24 03:26:33
|
FPNGE, LodePNG, optimized PNG
|
|
2022-01-24 03:26:38
|
|
|
2022-01-24 03:28:19
|
Should palette and transparent chunks be separated for better compression or for something else?
Ah, it's for simple transparency
|
|
2022-01-24 03:42:16
|
It seems that LodePNG always uses Zero predictor for palette data ๐ค (however, it has at least Deflate compression)
|
|
2022-01-24 06:59:41
|
Hmm
<https://raw.githubusercontent.com/lvandeve/lodepng/master/lodepng.cpp>
```There is a heuristic called the minimum sum of absolute differences heuristic, suggested by the PNG standard:
* If the image type is Palette, or the bit depth is smaller than 8, then do not filter the image (i.e. use fixed filtering, with the filter None).
* (The other case) If the image type is Grayscale or RGB (with or without Alpha), and the bit depth is not smaller than 8, then use adaptive filtering heuristic as follows: independently for each row, apply all five filters and select the filter that produces the smallest sum of absolute values per row.
This heuristic is used if filter strategy is LFS_MINSUM and filter_palette_zero is true.
If filter_palette_zero is true and filter_strategy is not LFS_MINSUM, the above heuristic is followed, but for "the other case", whatever strategy filter_strategy is set to instead of the minimum sum heuristic is used.```
|
|
|
_wb_
|
2022-01-24 07:44:34
|
it's a reasonable heuristic, and libpng also does that, but it's not necessarily optimal
|
|
2022-01-24 07:47:11
|
Zero filter for palette is mostly needed when you have < 256 palette colors, because it's the only way to ensure you actually have fewer literal symbols (with prediction, you end up with `min(nb_palette_colors * 2 - 1, 256)` different literal symbols)
|
|
2022-01-24 07:48:14
|
If you have ~256 palette colors, and they are ordered well, then prediction does actually still help
|
|
|
Scope
|
2022-01-24 07:53:15
|
So at least a strategy for a small number of colors can be useful and I noticed that for transparency also often uses Zero filter, but I do not quite understand why some encoders create separate chunks for transparency and palette, and some do not
|
|
|
_wb_
|
2022-01-24 08:08:14
|
how do you mean?
|
|
2022-01-24 08:09:10
|
if I understand correctly, PNG always has RGB palettes in the PLTE chunk, and then optionally you can also define A values for each palette color using the tRNS chunk
|
|
2022-01-24 08:10:10
|
palette colors are implicitly opaque and the tRNS chunk can have fewer entries than the PLTE chunk
|
|
|
Scope
|
2022-01-24 08:11:00
|
Like this (but sometimes it's only IDAT, for the same image, but with a different encoder):
|
|
|
|
veluca
|
2022-01-24 08:11:06
|
yeah AFAIU that's how it works
|
|
|
_wb_
|
2022-01-24 08:11:57
|
Ah I forgot about bit packing
|
|
2022-01-24 08:12:29
|
If you have less than 16 colors, png actually stores two or more pixels per byte
|
|
2022-01-24 08:14:03
|
So for really low color counts, the argument that predictors introduce new symbols doesn't hold
|
|
2022-01-24 08:14:18
|
For > 16 and < 256 colors it does hold though
|
|
|
|
veluca
|
|
Scope
So does FPNG also use a 32k window or is that a wrong detection?
|
|
2022-01-24 09:02:00
|
AFAIU it uses just RLE - it just says otherwise in the deflate header, but it doesn't *really* matter
|
|
|
Koromaru Korรผko
|
2022-01-24 05:30:15
|
|
|
2022-01-24 05:30:29
|
so why is decoding with a float32 buffer fastest?
|
|
|
|
veluca
|
2022-01-24 05:30:45
|
that seems odd
|
|
|
Koromaru Korรผko
|
2022-01-24 05:30:47
|
also don't mind the uint32 one, its failing to set the output buffer
|
|
2022-01-24 05:31:27
|
codes all the same, only changes are the format parameter, and the actually buffer types
|
|
|
|
veluca
|
2022-01-24 05:32:24
|
can you perhaps get a profile in some way?
|
|
|
Koromaru Korรผko
|
2022-01-24 05:32:40
|
i honestly don't know, im running this all in wasm
|
|
|
|
veluca
|
2022-01-24 05:36:44
|
it's pretty hard to troubleshoot performance without a profile, and I definitely don't know enough to get one xD
|
|
|
_wb_
|
2022-01-24 06:06:44
|
What image is it?
|
|
2022-01-24 06:08:15
|
If it's a case where direct uint8 output is not done, then it makes sense that uint8 is slower - it would decode to float32 and then convert to uint8, right <@179701849576833024> ?
|
|
|
|
veluca
|
2022-01-24 06:16:44
|
yes, but still
|
|
|
Koromaru Korรผko
|
2022-01-24 06:19:40
|
the image in question
|
|
2022-01-24 06:20:23
|
hm
|
|
2022-01-24 06:20:48
|
testing it with the 117B file from https://jpegxl.info/ I get a similar result.
|
|
|
_wb_
|
2022-01-24 06:23:50
|
Can you try a vardct encoded image? E.g. the result of default cjxl without options
|
|
|
Koromaru Korรผko
|
2022-01-24 06:24:20
|
that would require me to get a function to emulate the cjxl inputs
|
|
2022-01-24 06:24:26
|
i will eventually do that
|
|
2022-01-24 06:24:28
|
but not now
|
|
|
Scope
|
2022-01-24 07:17:20
|
Updated `-e 1`/`-e 2` (no comparison with the old ones, as it is quite cumbersome to do a lot of extra columns), but still
|
|
2022-01-24 07:19:26
|
So, fast speeds also need a palette mode like for FJXL
|
|
2022-01-24 07:26:56
|
I also wonder what would give more gain to FJXL with a moderate increase in encoding time, ANS coding, some context model or predictors
|
|
|
_wb_
|
2022-01-24 07:38:14
|
I think the first thing to try would be a different hybriduintconfig so more bits get entropy coded
|
|
2022-01-24 07:39:05
|
Then maybe some simple fixed ctx model, something like the e2 one
|
|
2022-01-24 07:41:20
|
ANS vs huffman likely doesn't make a huge difference when there's no symbol that has a chance > 50%, so without ctx model it's likely not worth the trouble
|
|
2022-01-24 07:42:35
|
(remember we do have rle for the simple solid or gradient regions, so the zero symbol is not _that_ common even in nonphoto images)
|
|
2022-01-24 07:48:04
|
When there is some ctx model, ANS probably starts to give some more advantage, and while it cannot be done as fast as huffman (simd ANS seems very tricky), it could probably be done faster than what cjxl does. Cjxl -e 1 does four scans over the samples: once to collect tokens, once to count them to make the histogram, once (in reverse order) to produce the ANS stream, and then once to write the stream in the correct order
|
|
|
Scope
|
2022-01-24 07:49:26
|
So, only one of these things doesn't work that much ๐ค , also it looks like `-e 1` needs a serious tuning or changing to something like FJXL, because it's already mostly better
|
|
|
_wb_
|
2022-01-24 07:49:39
|
Probably you could do sampling instead of full counting, and then do one scan in reverse order to write tokens directly to a buffer that grows from right to left
|
|
2022-01-24 07:50:22
|
Yes, e1 can already be worse than fjxl - e1 does not do palette nor rle
|
|
|
|
veluca
|
|
_wb_
When there is some ctx model, ANS probably starts to give some more advantage, and while it cannot be done as fast as huffman (simd ANS seems very tricky), it could probably be done faster than what cjxl does. Cjxl -e 1 does four scans over the samples: once to collect tokens, once to count them to make the histogram, once (in reverse order) to produce the ANS stream, and then once to write the stream in the correct order
|
|
2022-01-24 07:55:51
|
you can't save that much imho
|
|
|
_wb_
|
2022-01-24 08:05:24
|
Probably not much, could try e2 with ans and with huffman to see how much difference it makes. At e1 not that much, at e2 maybe a bit more, but I dunno
|
|
|
Scope
|
2022-01-26 12:05:05
|
Hmm, yes, on average it is not very different, but on some images the gap is very noticeable, in addition, at least on my CPU, the speed difference between FPNGE4 and FPNGE34 sometimes imperceptible
|
|
2022-01-26 12:09:20
|
And if there was also a palette mode, it would reduce the difference even more, since 34 predictors are worse than 24/1234 mostly on such images
So, there can be like these speed grades: FPNGE2 -> FPNGE4/FPNGE34 (maybe even without FPNGE4) -> FPNGE (with all predictors)
|
|
|
_wb_
|
2022-01-26 12:19:21
|
Meanwhile I got an experimental version of fjxl that can do 10 and 12 bit images too (with ppm/pgm/pam input)
|
|
|
Scope
|
2022-01-26 12:25:04
|
Additional predictors would also be interesting, since I don't really have sets with 10/12-bit images, but it's a pretty needed thing and also PPM
|
|
|
_wb_
|
2022-01-26 12:26:30
|
https://imagecompression.info/test_images/
|
|
2022-01-26 12:27:07
|
Here are some 16-bit test images that can be converted to 10 or 12 bit with `convert -depth 10`
|
|
2022-01-26 12:28:42
|
It would be good to have more corpora of high bit depth images, in particular ones that are rec.2100 pq or hlg
|
|
|
Scope
|
2022-01-26 12:29:06
|
Yes, I mean a varied good sets for comparisons, also considering that it can be used for like game screenshots
|
|
|
_wb_
|
2022-01-26 12:29:07
|
(which might have different compression characteristics than just sRGB with higher precision)
|
|
2022-01-26 12:29:41
|
Yes, hdr game screenshots would be an interesting set to test on
|
|
|
Scope
|
2022-01-26 12:31:49
|
WP predictor can also work well on non-pixel-art game screenshots
|
|
|
_wb_
|
2022-01-26 12:38:54
|
Yes, it's a bit inherently slow though
|
|
2022-01-26 12:39:03
|
Compared to other predictors
|
|
|
Scope
|
|
Scope
Hmm, yes, on average it is not very different, but on some images the gap is very noticeable, in addition, at least on my CPU, the speed difference between FPNGE4 and FPNGE34 sometimes imperceptible
|
|
2022-01-26 12:45:03
|
fpng
`206.843 MP/s 8.703 bits/pixel`
fpng4
`236.443 MP/s 8.862 bits/pixel`
fpng24
`228.501 MP/s 8.851 bits/pixel`
fpng34
`231.221 MP/s 8.706 bits/pixel`
|
|
|
|
Deleted User
|
|
_wb_
Meanwhile I got an experimental version of fjxl that can do 10 and 12 bit images too (with ppm/pgm/pam input)
|
|
2022-01-26 12:56:04
|
What is the challenge for fjxl when going above 8 Bits? And why does it expand to 10/12 but not 16/32 Bits?
|
|
|
|
veluca
|
|
Scope
fpng
`206.843 MP/s 8.703 bits/pixel`
fpng4
`236.443 MP/s 8.862 bits/pixel`
fpng24
`228.501 MP/s 8.851 bits/pixel`
fpng34
`231.221 MP/s 8.706 bits/pixel`
|
|
2022-01-26 01:07:51
|
huh, 34 is nicer than I thought ๐
|
|
|
Scope
|
2022-01-26 01:12:49
|
Yes, 34 can be almost a replacement for 4, although it is better to also test on some other hardware, maybe there will be more differences than on my CPU
|
|
|
|
veluca
|
2022-01-26 01:19:49
|
how did you measure speed?
|
|
2022-01-26 01:20:02
|
4 should be faster than tryall
|
|
2022-01-26 01:20:08
|
I mean, more faster ๐
|
|
|
Scope
|
2022-01-26 01:25:18
|
Just compared for something like 100 to 500 reps on the same image and the result was about the same
|
|
2022-01-26 01:27:00
|
There may be more difference in other images, but I was more interested in the comparison between 34 and 4 and it usually isn't much different
|
|
|
_wb_
|
|
What is the challenge for fjxl when going above 8 Bits? And why does it expand to 10/12 but not 16/32 Bits?
|
|
2022-01-26 02:05:41
|
fjxl uses int16 internally, also for uint8 input, since YCoCg requires 1 extra bit and predictor subtraction requires another extra bit, so the values to be encoded are 10 bit. The approach also works for uint10 and uint12 input, since you then get 12 or 14 bit values, which still fit in int16
|
|
2022-01-26 02:07:18
|
uint16 input wouldn't work without moving to an internal representation that is 32-bit, which is of course possible (cjxl does that), but it would be slower
|
|
2022-01-26 02:08:59
|
32-bit input is even trickier, because then you have to do predictor arithmetic in 64-bit (cjxl does that) and it would be even slower
|
|
2022-01-26 02:11:58
|
fjxl gets a lot of its speed from SIMD: in avx2 you can do everything with 256 = 16x16 bits per instruction, so 16 values can be processed at the same time for YCoCg conversion, Gradient prediction, and even huffman coding itself (though I didn't get that working yet for >8-bit, there are some additional constraints to make SIMD huffman coding work)
|
|
2022-01-26 04:50:53
|
https://github.com/libjxl/libjxl/pull/1124
|
|
2022-01-26 04:51:23
|
for a set of 10-bit test images:
Total png size: 560 MB (in almost 4 minutes)
Total jxl size: 337 MB (in about 4 seconds)
|
|
2022-01-26 04:51:37
|
(default imagemagick/libpng vs fjxl)
|
|
2022-01-26 04:56:21
|
for lossless HDR screenshots, I imagine this can be pretty useful
|
|
2022-01-26 04:57:26
|
(also this is without SIMD huffman coding; can probably get those 4 seconds down to 2 or so if we can make it work)
|
|
|
Scope
|
|
_wb_
https://github.com/libjxl/libjxl/pull/1124
|
|
2022-01-26 11:06:41
|
Now, has this also been used for grayscale?
https://discord.com/channels/794206087879852103/794206170445119489/935123835399831553
Or is it too slow for FJXL?
|
|
2022-01-27 01:51:40
|
The weak point is still some palette and pixelart images (also for FPNGE), I wonder if it is possible to make some faster WebP Z0 replica for such images?
And for FPNGE (although I understand that now there is little chance that someone will improve it, but theoretically) something like what LodePNG does using Zero predictor
|
|
|
_wb_
for a set of 10-bit test images:
Total png size: 560 MB (in almost 4 minutes)
Total jxl size: 337 MB (in about 4 seconds)
|
|
2022-01-27 03:15:16
|
It would also be interesting to compare with Jpeg XR as it is used for NVIDIA capture and Windows 10/11 gamebar for HDR screenshots, but it only has a old abandoned encoder/library and a pretty buggy acceptance of input images other than 8 or 32-bit
|
|
|
The_Decryptor
|
2022-01-27 03:24:41
|
The only reliable output format I've found is BMP, everything else is either unreadable or changes the bit depth (to 16bit)
|
|
2022-01-27 03:25:44
|
But then nothing reads the BMP files correctly, I had to write code to convert them to 10bit PNM files
|
|
|
Scope
|
2022-01-27 03:27:26
|
ImageMagick can also encode JXR, but if there is a JXREncApp.exe in the paths or some external libraries
|
|
2022-01-27 04:18:34
|
However, as far as I remember lossless JXR is less efficient than J2K and probably HTJ2K too, although I am not sure about 10/12 bit images, also, this implementation should be faster than OpenJPH (but not sure about compression):
<https://github.com/osamu620/OpenHTJ2K>
(but, when I was testing, I didn't have this encoder compile/work correctly for Windows)
|
|
2022-01-27 04:29:15
|
Also JXL/FJXL can have even more potential gains on non-photographic images than J2K/JXR (which may be quite useful for game and usual screenshots)
|
|
|
_wb_
|
2022-01-27 06:16:47
|
Good question how it compares to jxr. I guess I mostly need a good test set of 10-bit images...
|
|
|
The_Decryptor
|
2022-01-27 06:23:59
|
I've got ~30 from my Xbox in JXR, no idea if I got the conversion right but here's one as a 10 bit PNM, https://flawlesscowboy.xyz/stuff/bray.pnm
|
|
|
Scope
|
2022-01-27 07:34:56
|
Accidentally found some comparisons (including FLIF and Jpeg XL), and also once again confirming that lossless Jpeg XR is not very efficient compared to other formats
|
|
2022-01-27 07:35:02
|
https://arxiv.org/pdf/2108.02557.pdf
|
|
|
_wb_
|
2022-01-27 07:43:25
|
Makes sense - after all, XR was Microsoft's attempt at a "QOI" version of JPEG 2000: lower complexity, less dense. J2K was too slow, JPEG was fast but feature-limited (no hdr/alpha/lossless), so they made Windows Media Photo to fill that gap
|
|
|
Fraetor
|
2022-01-27 11:43:20
|
How does JPEG XS compare to these super fast encoders? Wasn't that designed for speed?
|
|
|
Scope
|
2022-01-27 11:48:45
|
As far as I remember lossless encoding has not yet been fully finalized in the specification and it has some things with patents
|
|
|
Fraetor
|
|
_wb_
|
2022-01-27 12:42:26
|
XS is indeed not royalty-free, and it's intended for hardware implementation, basically something that would be integrated in professional video equipment
|
|
2022-01-27 12:43:01
|
so I could measure the speed of a software implementation of XS, but that's not very relevant
|
|
|
Scope
|
2022-01-27 01:14:35
|
And XS is designed mostly for lossy and video, btw, for theoretical lossy FJXL I'm not sure what could be done much faster
|
|
|
_wb_
|
2022-01-27 02:22:56
|
For lossy 8-bit, you might be able to avoid going to 16-bit, e.g. do things in 8-bit YCbCr, but not sure if that would help much
|
|
|
The_Decryptor
I've got ~30 from my Xbox in JXR, no idea if I got the conversion right but here's one as a 10 bit PNM, https://flawlesscowboy.xyz/stuff/bray.pnm
|
|
2022-01-27 04:03:54
|
thanks for the test image, feel free to send a few more if you have more. Any idea what colorspace they're in?
|
|
|
The_Decryptor
|
2022-01-27 11:51:04
|
Will do, they're apparently BT.2100 PQ (according to https://github.com/13thsymphony/HDRImageViewer/blob/aef000911813daadf367acf093ab514a6e9e76e1/DXRenderer/ImageLoader.cpp#L959)
|
|
2022-01-28 12:18:01
|
https://flawlesscowboy.xyz/stuff/Xbox%20HDR.7z < 26 images, 1.2GB in total (Man this PNM format has bad compression ๐)
|
|
|
_wb_
|
2022-01-28 08:07:27
|
Rec2100 PQ was indeed what I would assume it was, but it's good to check
|
|
2022-01-28 08:07:57
|
Do these images have a license? E.g. can I include them in a public test set?
|
|
|
The_Decryptor
|
2022-01-28 08:42:32
|
Personally I consider them public domain, but I've got no idea how that works with game stuff
|
|
2022-01-28 08:43:14
|
I suppose the existence of twitch shows that it's ok
|
|
|
_wb_
|
2022-01-28 08:57:44
|
Did you make those screenshots yourself?
|
|
|
The_Decryptor
|
2022-01-28 08:58:44
|
Yep, all taken on my Xbox
|
|
|
_wb_
|
2022-01-28 08:58:48
|
Then it's just a matter of adding a CC0 or some other CC license and I think it's ok
|
|
|
The_Decryptor
|
2022-01-28 08:58:55
|
That's my ugly purple haired character in them
|
|
|
Scope
|
2022-01-28 05:22:49
|
Also, qoi-lz4-avg2 is not bad (diff from average instead of previous pixel), it is only slightly slower than the regular qoi and better than the previous lz4 variation, except that PixelArt is like 30% worse
|
|
2022-01-28 05:32:37
|
So it is quite competitive compared to at least FPNG -s, slightly slower, but with much better compression
|
|
|
_wb_
|
2022-01-28 05:37:22
|
Yes, but still inherently sequential to decode... And a new format
|
|
|
Scope
|
2022-01-28 05:39:27
|
Yep and still FJXL is much faster and better (especially if further improving palette and pixel art compression)
|
|
2022-01-29 02:19:46
|
``` -P K, --predictor=K
[modular encoding] predictor(s) to use: 5=gradient, 6=weighted, 14=mix 5 and 6```
Hmm, does `-P 14` not work with something like this `-e 8 -C 0 -I 0 -P 14 --palette 512 -X 0 -Y 0`?
Because from some of the results it looks like the gradient predictor is never selected
And otherwise, yes, it seems that the Select predictor is a slightly better for palette images
|
|
|
_wb_
for fjxl it would also in principle be possible to sacrifice some density to get more speed (skipping the palette check, the huffman code sampling, possibly skipping YCoCg or using SubtractGreen instead, possibly using a cheaper predictor, etc)
|
|
2022-01-30 05:25:49
|
So, SubtractGreen can be not much worse than YCoCg (at least for fast modes), but be noticeably faster?
And also which predictor would be faster and not much worse than Gradient, something like W?
|
|
|
_wb_
|
2022-01-30 07:13:11
|
SubtractGreen and W will probably be significantly worse than YCoCg and Gradient, but it'll at least still compress somewhat. Not sure if it would actually be much faster though: I think you still need to do the arithmetic in 16-bit anyway (jxl doesn't have wraparound SubtractGreen)...
|
|
|
Scope
|
2022-01-30 07:17:43
|
I'm just wondering if it's possible to have an encoding speed close to something like FPNGE4, but with some better compression
|
|
2022-01-30 07:22:04
|
However, it seems that using YCoCg and Gradient is something optimal, and maybe also SubtractGreen and Gradient (as far as I understand SubtractGreen is almost the same as LOCO colorspace, and this combination is used as something fast and efficient) and it all depends on what is slower and gives less efficiency, the color space transform or the predictors
|
|
|
_wb_
|
2022-01-30 07:42:28
|
Well fpnge can do 32 samples at a time (8 rgba pixels) because png works with bytes. Fjxl can only do 16 samples at a time (16 planar samples) because jxl works with integers so the only way to avoid adding an extra bit is to not do any color conversion and not use any predictor
|
|
2022-01-30 07:43:33
|
Also png stores interleaved RGBA directly, while jxl stores things in a planar way
|
|
2022-01-30 07:44:37
|
We're in both cases assuming the input comes as interleaved RGBA, which in a way gives an advantage to png encoders
|
|
|
Scope
|
2022-01-30 07:45:32
|
Also, why does JXL use gradient and weighted by default (except for all predictors) instead of select and weighted?
Because photo content is not so easy to identify and gradient works better for it than select?
|
|
|
_wb_
|
2022-01-30 07:47:22
|
Maybe we should revise defaults, but I think those two are just the overall best predictors
|
|
2022-01-30 07:48:51
|
Select is good for pixel art and crisp nonphoto, but for things like anti-aliased text like in modern screen shots, I think Gradient is already better again
|
|
2022-01-30 07:49:54
|
But probably a better heuristic for cjxl would be to sample some small regions with different predictors and make a choice based on that
|
|
|
Scope
|
|
_wb_
https://github.com/libjxl/libjxl/pull/1124
|
|
2022-01-30 08:52:32
|
Also, could it possibly be up to 14-bit?
Like to fully support some photos
|
|
|
_wb_
|
2022-01-30 09:01:33
|
Without SIMD huffman coding (like it is now for > 8-bit anyway), yes, up to 14-bit could be done
|
|
2022-01-30 09:07:48
|
With SIMD huffman coding the way it is currently implemented for 8-bit, there's a constraint that prefix code + raw bits has to fit in 16 bits, which is probably already a problem for 12-bit input, because with ycocg and prediction, the largest residuals are 14-bit which means you need a 3-bit code for that (and 13 raw bits, first 1 is implicit)
|
|
2022-01-30 09:15:56
|
But maybe different simd huffman coding can be done without that constraint, not much slower
|
|
|
|
veluca
|
2022-01-30 10:31:35
|
yeah it is possible, just someone needs to write it
|
|
|
Scope
|
|
Scope
Also, why does JXL use gradient and weighted by default (except for all predictors) instead of select and weighted?
Because photo content is not so easy to identify and gradient works better for it than select?
|
|
2022-01-30 05:15:00
|
Hmm, yes, after full tests, Gradient is better on average on everything except PixelArt (on "emulated" FJXL)
Perhaps also Select is better integrated with other things and more efficient in WebP
|
|
2022-01-30 05:23:19
|
By the way, does FJXL work like `--keep_invisible=0`?
And as I said before, I think it's better to make `--keep_invisible=0` for CJXL, but keep `--keep_invisible=1` for Libjxl by default
|
|
|
_wb_
|
2022-01-30 06:42:00
|
Fjxl zeroes invisible pixels
|
|
|
monad
|
2022-01-31 08:38:09
|
```JPEG recompression 2022-01-31
web content (mostly)
(optimized)
JXL = cjxl -e 9 -E 3 -I 1
BRN = cbrunsli
PJG = packJPG -ver
LEP = lepton-slow-best-ratio
Wins are smallest results.
savings %
median mean wins
JXL 12.92 15.73 311
BRN 15.58 16.72 408
BRN/JXL 15.76 17.30 719
PJG 16.83 17.43 1223
LEP 16.95 17.63 1743
PJG/JXL 17.00 18.04 1534
LEP/JXL 17.08 18.23 2054
LEP/BRN 17.14 17.89 2151
PJG/BRN 17.17 17.72 1631
PJG/LEP 17.17 17.77 2965
any 17.42 18.38 3684```
|
|
|
Scope
|
2022-01-31 08:43:57
|
`-I 1` also slightly improves compression and works for Jpeg re-compression as well
|
|
|
monad
|
|
Scope
|
2022-01-31 08:52:15
|
In general JXL wins on large and high-quality Jpeg sources, also more often where YUV444 is used, even though, if not to consider that it is also quite a different class of compressors/formats with different purposes
|
|
|
monad
|
2022-01-31 09:05:45
|
Hm, I haven't the same conclusion about large, high-quality yet. JXL was worst on the photos and scans I tried before this (although that was without -I).
|
|
|
Scope
|
2022-01-31 09:17:10
|
On my quality photos and other random quality photo sets, the JXL mostly beat the Brunsli (with other compressors there may be very different results and they have different purposes, but the Brunsli is almost the same, just without various JXL features)
Also, `--strip` if not needed to keep all metadata, also as far as I remember brunsli does not save them (or at least in certain versions) and because of this also has some advantage on images where they exist, so like:
`-e 9 -I 1 -E 3 --strip`
|
|
|
monad
|
2022-01-31 09:36:19
|
Brunsli git master preserves metadata as far as I've seen (but I didn't actually roundtrip everything here).
|
|
2022-01-31 09:37:21
|
I'm personally interested in results including metadata.
|
|
|
Scope
|
2022-01-31 09:42:59
|
Some, examples, hmm, quite a long URL for all files, but still (because it's higher than Discord's limits):
<https://transfer.sh/%28/to4UiJ/41288175385_0398187107_o.jpg.jxl,/AuTt01/41288175385_0398187107_o.jpg.br,/wzkAUL/41286909695_750263f4e3_o.jpg.jxl,/dtpbT0/41286909695_750263f4e3_o.jpg.br,/dcmWba/41288175385_0398187107_o.jpg,/7ir6Bt/41286909695_750263f4e3_o.jpg%29.zip>
|
|
|
_wb_
|
2022-01-31 09:43:53
|
I think cjxl is still keeping exif/xmp uncompressed instead of brotli'ing it
|
|
|
monad
|
2022-01-31 09:46:15
|
Yes, it is.
|
|
|
_wb_
|
2022-01-31 09:52:52
|
It could brotli it though. Only makes a difference if there is a large xmp blob
|
|
2022-01-31 09:55:57
|
jxl is better at recompressing 444 than 420. Chroma subsampling was something jxl originally didn't have at all, and we reluctantly added it just to be able to support representing/recompressing 420 jpegs at all
|
|
2022-01-31 09:58:36
|
We didn't try to make Chroma from Luma work in the non-444 case though, so that's one thing that 444 jpeg recompression can benefit from but 420 cannot
|
|
2022-01-31 09:59:58
|
Does -E 3 actually make a difference when recompressing jpeg? Not sure if that parameter gets passed to the dc encoding
|
|
|
monad
|
2022-01-31 10:01:17
|
It does, as far as I recall from prior testing.
|
|
|
Scope
|
2022-01-31 10:02:25
|
Yes, both `-E 3` and `-I 1` slightly help compression
|
|
|
_wb_
|
2022-01-31 10:02:46
|
if it does, then that would also only be mostly for 444 I suspect
|
|
|
monad
|
|
Scope
Some, examples, hmm, quite a long URL for all files, but still (because it's higher than Discord's limits):
<https://transfer.sh/%28/to4UiJ/41288175385_0398187107_o.jpg.jxl,/AuTt01/41288175385_0398187107_o.jpg.br,/wzkAUL/41286909695_750263f4e3_o.jpg.jxl,/dtpbT0/41286909695_750263f4e3_o.jpg.br,/dcmWba/41288175385_0398187107_o.jpg,/7ir6Bt/41286909695_750263f4e3_o.jpg%29.zip>
|
|
2022-01-31 10:02:57
|
In this example, Brunsli preserved the metadata and JXL did not. JXL still wins on one image, but not both when doing bit-lossless.
|
|
|
Scope
|
2022-01-31 10:05:17
|
Yes, but JXL still wins even if excluding metadata (I checked on at least at one of these images)
|
|
2022-01-31 10:15:57
|
Ah, that's the same thing, I just didn't read the whole message
And these are just random examples that I found just now, usually on similar images the result is quite same, also I found one of the online store catalogs with medium quality images and there JXL was also better on almost all images, but in general on lower quality images Brunsli wins, but I think this is quite a good trade for additional JXL features (and since JXL is not supposed as a storage format and it is basically kind of simplified but real JXL images), plus there is still room for improvements
|
|
2022-01-31 10:17:42
|
Also, I wonder if it is possible to create a Jpeg decoder based on JXL, is it possible to create at least a simple JXL-Jpeg encoder?
|
|
2022-01-31 10:22:27
|
Because I do not think that the any near future the need for JPEG encoding will be gone, at least to maintain compatibility
|
|
|
monad
|
|
monad
```JPEG recompression 2022-01-31
web content (mostly)
(optimized)
JXL = cjxl -e 9 -E 3 -I 1
BRN = cbrunsli
PJG = packJPG -ver
LEP = lepton-slow-best-ratio
Wins are smallest results.
savings %
median mean wins
JXL 12.92 15.73 311
BRN 15.58 16.72 408
BRN/JXL 15.76 17.30 719
PJG 16.83 17.43 1223
LEP 16.95 17.63 1743
PJG/JXL 17.00 18.04 1534
LEP/JXL 17.08 18.23 2054
LEP/BRN 17.14 17.89 2151
PJG/BRN 17.17 17.72 1631
PJG/LEP 17.17 17.77 2965
any 17.42 18.38 3684```
|
|
2022-01-31 10:37:58
|
redone JXL results
|
|
|
Scope
|
|
Scope
Hmm, yes, after full tests, Gradient is better on average on everything except PixelArt (on "emulated" FJXL)
Perhaps also Select is better integrated with other things and more efficient in WebP
|
|
2022-01-31 10:47:51
|
Comparison of WP and Gradient predictors on "emulated" non-palette FJXL (not sure how much this really represents the real difference)
|
|
2022-01-31 10:57:21
|
And it looks like only predictors can't give much improvement without other things, but I think that at least these two would be pretty useful, although it would require some fast heuristics for FJXL
|
|
|
_wb_
|
2022-01-31 11:27:05
|
what are those WP/Gradient columns?
|
|
|
Scope
|
2022-01-31 11:30:13
|
`-m -s 8 -C 0 -I 0 -P 6/5 --palette 512 -X 0 -Y 0 --patches 0`
|
|
|
_wb_
|
2022-01-31 11:52:59
|
ah, I see
|
|
2022-01-31 11:53:10
|
fjxl does -C 1
|
|
2022-01-31 11:53:58
|
other than that, that is probably a reasonable emulation of what fjxl would do, more or less
|
|
|
Scope
|
2022-01-31 12:01:06
|
Ah, yes, that's a typo, but the real comparison was with the proper options to emulate a non-palette FJXL:
`-m -e 8 -C 1 -I 0 -P 6/5 --palette 0 -X 0 -Y 0 --patches 0`
So it's correct
|
|
2022-01-31 06:04:13
|
<@!794205442175402004><https://www.reddit.com/r/compression/comments/scvzmf/question_im_here_as_an_ignorant_looking_for/huz0f0x/>
Also, about these comparisons, what results does EMMA show? (when there is free time for it)
There are links and options in this post:
<https://www.reddit.com/r/jpegxl/comments/mepoun/modern_lossless_jpegxl_still_defeated_by_old/gtm8geq/>
Maybe my PPMs aren't converted right or something (because I noticed that sometimes results can differ depending on which converter was used for PPMs)
And because it's not the first time I've heard that the Gralic is still better, even though I've shown other compressors (but, for me EMMA usually beats almost everything except pixelart and some other artificial images)
Also, as I already said, the LEA is very good for its speed, encoding speed is about 1.5 times slower than JXL `-e 3`, but compression is on par with `-e 9` or better (and it's only like 23kb uncompressed binary with some unused code to compress regular data)
https://globalcompetition.compression.ru/assets/files/compressors/LEA.7z
|
|
2022-02-01 10:08:16
|
Also, as far as I understand, EMMA is CM compressor and BMF at least in slow modes is PPM, probably that's why they show better results than others and maybe someday, if people continue experiments and research, they can be made more asymmetric and fast
> **Shelwien**
> CM idea is explicitly based on combining (mixing) predictions from multiple statistical models.
> While PPM method appeared much earlier (wikipedia lists 1984) and can be interpreted as evolution of LZ methods (extreme ROLZ with unary length coding).
> But PPM can be also easily turned into CM with linear mixing and unary weight estimation.
> So CM/PPM difference is mostly historical.
> For example, Ppmonstr is technically a result of PPM evolution, but practically its a CM over unary codes of symbol ranks, with SSE as a mixing function, and multiple submodels (aside from order* contexts, there're additional sparse contexts etc).
>
> > PPM:
> > Uses an ex. '8 letter context' as the model-er of what letter comes next.
> Well, the practical difference between CM and PPM _compressors_ is that PPM first encodes the choice of submodel (context), then encodes the symbol using the probability distribution of that context only.
> This is also known as context switching (PPM) vs context mixing (CM).
|
|
2022-02-01 10:17:41
|
Perhaps they were not widely used in image compression due to not enough speed (and lack of research in this direction) and the much slower hardware at the time (except for BMF and some other experimental codecs and more modern ones like EMMA, sadly they are not open source)
|
|
2022-02-01 02:07:20
|
Also, `-e 4` uses Gradient and Weighted predictors?
And is it notably slower than fast modes because it uses more heavier context modeling and entropy coding?
|
|
|
_wb_
|
2022-02-01 03:04:57
|
It does MA tree learning instead of using a fixed tree
|
|
|
Scope
|
2022-02-01 03:30:13
|
So perhaps having another mode with a fixed tree and these two predictors would be nice.
Also, some tool or feature in the benchmark with detailed info about using predictors, transform, context model, group size, etc.
|
|
2022-02-01 03:55:08
|
Also, I wonder if making heuristics to pick predictors based on an sample of small image regions, but prioritizing the more versatile and efficient predictors and for them the region size for a sample would be larger, and for less versatile ones use a smaller sample, so theoretically it would be faster or more accurate and efficiency would hurt less in the mistakes
|
|
2022-02-02 02:28:43
|
Hmm, it seems that Oodle Lossless Image has 5+ times faster than WebP decoding even in single-threaded mode (and much more in multi-threaded mode), with better compression (sometimes even better than FLIF), I wonder how this is achieved, although their compressors like Leviathan and Kraken are also very fast and denser than LZMA (but with slower encoding)
Hopefully they'll be open source soon (as Epic claimed) and I can do my own comparisons
```Leviathan : 3.23:1 , 0.9 enc MB/s , 642.4 dec MB/s
LZMA : 3.18:1 , 3.0 enc MB/s , 53.8 dec MB/s
Kraken : 3.09:1 , 1.3 enc MB/s , 948.5 dec MB/s
zlib : 2.33:1 , 7.7 enc MB/s , 309.0 dec MB/s```
Some more information from the blog about palettized images (it looks like the site is down, but there is a Web archive):
<https://web.archive.org/web/20210107214851/https://www.jonolick.com/home/oodle-lossless-image-v147>
|
|
2022-02-02 02:28:52
|
> Implementing this was pretty interesting in that the order of those colors in the palette matter quite a bit - and the reason is that if you get it right, then it works with the prediction filters. As in, if the palettized color indexes are linearly predictable then there is a good chance you will get significantly better compression than just a random ordering. In practice this means trying a bunch of different heuristics (since computing optimal brute force like is prohibitively expensive).
> So you sort by luma, or by different channels, or by distance from the last color for example (picking the most common color as the first one). I also implemented mZeng palette ordering technique which isn't commonly in PNG compressors. Believe it or not, while this theoretically should produce really good results in most cases, sometimes the simpler heuristics win by a lot so you can't just always use a single method to decide when going for minimum file sizes
|
|
2022-02-02 02:29:23
|
|
|
2022-02-02 02:40:20
|
However, as already discussed, having something like WebP emulation in JXL would also be pretty good, even WebP Z0 proves very efficient, with the encoding speed on the level of fast JXL modes it is much denser and "stable" (especially on non-photo)
|
|
|
|
veluca
|
|
Scope
Hmm, it seems that Oodle Lossless Image has 5+ times faster than WebP decoding even in single-threaded mode (and much more in multi-threaded mode), with better compression (sometimes even better than FLIF), I wonder how this is achieved, although their compressors like Leviathan and Kraken are also very fast and denser than LZMA (but with slower encoding)
Hopefully they'll be open source soon (as Epic claimed) and I can do my own comparisons
```Leviathan : 3.23:1 , 0.9 enc MB/s , 642.4 dec MB/s
LZMA : 3.18:1 , 3.0 enc MB/s , 53.8 dec MB/s
Kraken : 3.09:1 , 1.3 enc MB/s , 948.5 dec MB/s
zlib : 2.33:1 , 7.7 enc MB/s , 309.0 dec MB/s```
Some more information from the blog about palettized images (it looks like the site is down, but there is a Web archive):
<https://web.archive.org/web/20210107214851/https://www.jonolick.com/home/oodle-lossless-image-v147>
|
|
2022-02-02 10:11:23
|
I'm not super surprised, those guys know what they're doing ๐
|
|
2022-02-02 10:11:34
|
especially for speed
|
|
|
Scope
|
|
Scope
So, SubtractGreen can be not much worse than YCoCg (at least for fast modes), but be noticeably faster?
And also which predictor would be faster and not much worse than Gradient, something like W?
|
|
2022-02-03 02:32:52
|
Yep, after some more tests, it seems that from the fastest and cheapest predictors - Left (W) is the most optimal, so theoretically for FJXL the Effort choice could be something like this (from faster to slower):
```0 - None + Zero + No palette detection + No huffman code sampling (but still possible through the option)
1 - SubtractGreen (if it makes sense) or YCoCg + Left (W) + No palette detection
2 - YCoCg + Gradient
3 - YCoCg + Gradient + Ctx modeling and ANS/Huffman
4 - YCoCg + Gradient and WP + Select (or/and Zero) for palette (and maybe lz77) + Ctx modeling and ANS/Huffman
5 - Some sort of bruteforce/heuristics of available FJXL predictors and color transforms + ANS, and the like
...```
And also keep a separate option for huffman code sampling (but not as Effort)
|
|
2022-02-06 08:34:41
|
`13=toptop predictive average`
This predictor is slower than Gradient?
It also sometimes produces best results (even than Weighted), although it's not as universal
|
|
2022-02-06 09:44:39
|
Otherwise, it seems that yes, the most universal predictors are Left (W) (among the fastest), Gradient (the most versatile), Weighted (for photo-like content, including game screenshots and complex art) and also Select and Zero for palette images, pixel-art and if there are a lot of solid color areas
Other predictors may be better on certain content, but much worse on other and on average results
|
|
|
_wb_
|
2022-02-06 09:54:31
|
The thing is that you can have a predictor per MA tree context, which can make not-so-useful predictors more useful
|
|
|
Scope
|
2022-02-06 10:00:03
|
Yes, this is just for a fast encoder, in case there is no way to choose among many different predictors and which would be the most versatile (when the result is not dramatically worse if the predictor is not the best for that content and as a good average overall result on any content)
|
|
2022-02-06 10:04:59
|
Also, it is interesting that Oodle Lossless Image uses many Gradient-based predictors, not just one
|
|
|
_wb_
|
2022-02-06 10:05:33
|
Which ones does it have?
|
|
|
Scope
|
2022-02-06 10:08:42
|
I don't know, because the source code is not yet open, but judging by:
> The filters are the standard PNG filters plus a few new ones, namely 3 different types of gradient predictors (sorely missing in stock PNG) and a parametric linear predictor (fixed-point filter coeffs are determined at encode time and stored)
And also on some old experiments on the blog:
https://cbloomrants.blogspot.com/2010/06/06-20-10-filters-for-png-alike.html
|
|
|
_wb_
|
2022-02-14 05:00:28
|
Some subjective results comparing cjxl -e 7, cwebp, mozjpeg and libavif aom -s 7
|
|
|
fab
|
2022-02-14 05:12:20
|
Do you used a test cjxl
|
|
|
_wb_
|
2022-02-14 05:34:27
|
This is just 0.6.1
|
|
|
monad
|
|
_wb_
Some subjective results comparing cjxl -e 7, cwebp, mozjpeg and libavif aom -s 7
|
|
2022-02-14 08:10:14
|
Is there a public source with context?
|
|
|
_wb_
|
2022-02-14 08:11:56
|
Results are just in, we still need to figure out the best way to analyze them
|
|
2022-02-14 08:13:23
|
But it's based on over 200 different original images and about a million pairwise comparisons
|
|
2022-02-14 08:17:32
|
The raw data I cannot share, it costs quite a lot of money to produce such data considering it involves humans giving opinions.
|
|
|
monad
|
2022-02-14 08:18:54
|
Cool, looking forward to any kind of publication on this.
|
|
|
_wb_
|
2022-02-14 08:24:05
|
We're going to collect some more data to better calibrate results across different originals, and then probably I'll write a blogpost about it.
|
|
2022-02-14 08:25:32
|
It's going to be a quite big subjective eval of modern codecs. We're also testing the proprietary Aurora avif encoder, as well as Kakadu for j2k and libheif/x265 for HEIC.
|
|
2022-02-15 12:19:06
|
More results: https://twitter.com/jonsneyers/status/1493531124596940800?t=CakzF8IZp9726b00Rw0GrQ&s=19
|
|
2022-02-15 02:28:46
|
Original image: https://cloudinary-subjectify-shared.s3.us-east-1.amazonaws.com/iqa_dataset_no_saliency_accepted/preprocess/twilight/861443.png
|
|
2022-02-15 02:29:35
|
5.7 KB JPEG: (ok that's ridiculous I know)
https://res.cloudinary.com/jon/image/fetch/f_jpg,q_5/https://cloudinary-subjectify-shared.s3.us-east-1.amazonaws.com/iqa_dataset_no_saliency_accepted/preprocess/twilight/861443.png
|
|
2022-02-15 02:29:51
|
5.4 KB JPEG 2000:
https://res.cloudinary.com/jon/image/fetch/f_png,q_100/https://res.cloudinary.com/jon/image/fetch/f_jp2,q_70/https://cloudinary-subjectify-shared.s3.us-east-1.amazonaws.com/iqa_dataset_no_saliency_accepted/preprocess/twilight/861443.png
|
|
|
|
veluca
|
2022-02-15 02:30:32
|
not bad
|
|
2022-02-15 02:30:53
|
although of course gradients are a bit of an extreme case for both codecs ๐
|
|
|
_wb_
|
2022-02-15 02:31:14
|
5.3 KB AVIF:
https://res.cloudinary.com/jon/image/fetch/f_png,q_100/https://res.cloudinary.com/jon/image/fetch/f_avif,q_50/https://cloudinary-subjectify-shared.s3.us-east-1.amazonaws.com/iqa_dataset_no_saliency_accepted/preprocess/twilight/861443.png
|
|
2022-02-15 02:31:52
|
5.3 KB JXL:
https://res.cloudinary.com/jon/image/fetch/f_png,q_100/https://res.cloudinary.com/jon/image/fetch/f_jxl,q_65/https://cloudinary-subjectify-shared.s3.us-east-1.amazonaws.com/iqa_dataset_no_saliency_accepted/preprocess/twilight/861443.png
|
|
2022-02-15 02:35:06
|
(sorry had wrong link for the j2k at first)
|
|
2022-02-15 02:37:11
|
gap between avif and jxl is pretty large for that image
|
|
2022-02-15 02:40:28
|
anyway, I'm currently fetching the whole test set so I can compute butteraugli, ssimulacra etc and see how well they correlate with the subjective results
|
|
2022-02-15 02:44:14
|
225 original images in the set (the above is one of them), but about 18000 compressed variants, and I'm just fetching them one by one ๐
|
|
2022-02-15 02:56:59
|
these are all the originals (well, jpeg-compressed here for discord)
|
|
2022-02-15 02:58:36
|
in case you're wondering what the test images were
|
|
|
Fraetor
|
2022-02-15 03:15:45
|
So mostly photographic with a few diagrams then
|
|
|
_wb_
|
2022-02-15 03:37:04
|
yes โ but we did try to cover various kinds of subjects: humans, buildings, food, nature, etc
|
|
|
diskorduser
|
2022-02-15 04:41:39
|
What about synthetic, abstract, line & anime art?
|
|
|
_wb_
|
2022-02-15 04:49:26
|
There are a few images like that in the set, but overall photo is way more important
|
|
|
monad
|
2022-02-15 08:11:53
|
<@!794205442175402004> What was the rational for the encoder settings (mostly default)?
|
|
|
_wb_
|
2022-02-15 08:12:28
|
default is typically a good trade-off between speed and quality/compression
|
|
2022-02-15 08:13:29
|
also we're interested in practical speeds: slower than that is not really feasible in production
|
|
2022-02-15 08:14:42
|
e.g. aom s0 performs quite well but we can't afford that kind of cpu cost, and also first-image latency would be a serious problem
|
|
|
fab
|
2022-02-16 10:58:27
|
sample image text
|
|
2022-02-16 10:58:33
|
|
|
2022-02-16 10:59:24
|
|
|
2022-02-16 10:59:26
|
sample image jpg
|
|
2022-02-16 10:59:33
|
https://www.hdblog.it/games/articoli/n551459/cyberpunk-2077-1-5-patch-next-gen/
|
|
2022-02-16 10:59:44
|
https://hd2.tudocdn.net/1021037?w=660&h=325
|
|
2022-02-16 11:00:50
|
|
|
2022-02-16 11:01:27
|
wow without cut
|
|
2022-02-16 11:02:14
|
|
|
2022-02-16 11:02:15
|
anothe sample wifi seven
|
|
2022-02-16 11:03:06
|
|
|
2022-02-16 11:03:14
|
this last is my favouite
|
|
2022-02-16 11:03:25
|
hee's the link https://www.hdblog.it/portatili/articoli/n551457/macbook-pro-m2-13-pollici-marzo-rumor/
|
|
2022-02-16 11:04:13
|
|
|
2022-02-16 11:04:15
|
text specific
|
|
2022-02-16 11:04:43
|
|
|
2022-02-16 11:04:51
|
Compressed image
|
|
2022-02-16 11:07:49
|
|
|
2022-02-16 11:08:40
|
|
|
2022-02-16 11:08:45
|
shapness elated image
|
|
2022-02-16 11:08:54
|
i dont want to lose anything
|
|
2022-02-16 11:10:12
|
|
|
2022-02-16 11:10:14
|
ed colo
|
|
2022-02-16 11:11:52
|
|
|
2022-02-16 11:11:56
|
eeen colo
|
|
2022-02-16 11:12:06
|
finished
|
|
2022-02-16 11:12:44
|
in my opinion thees should be a dedicated channel fo test images but he's i'm a guest
|
|
2022-02-16 03:39:07
|
|
|
2022-02-16 03:39:23
|
General phone screenshots
|
|
2022-02-16 03:39:54
|
At least for me. People usually don't do such complex capture.
|
|
2022-02-16 04:25:59
|
|
|
2022-02-16 04:26:14
|
A particular image for cjxl block selection
|
|
2022-02-16 04:26:36
|
|
|
2022-02-16 04:26:48
|
Random near lossless selector
|
|
2022-02-17 08:37:09
|
......
|
|
2022-02-17 08:37:12
|
atifacted images
|
|
2022-02-17 08:37:19
|
|
|
2022-02-17 08:37:49
|
|
|
2022-02-17 08:38:53
|
vey good images
|
|
2022-02-17 08:39:01
|
|
|
2022-02-17 08:40:34
|
illegible
|
|
2022-02-17 08:40:41
|
|
|
2022-02-17 08:40:57
|
good
|
|
2022-02-17 08:41:02
|
|
|
2022-02-17 08:41:34
|
too noisy
|
|
2022-02-17 08:41:43
|
|
|
2022-02-17 08:42:52
|
supe
|
|
2022-02-17 08:43:00
|
|
|
2022-02-17 08:44:19
|
destroyed by gaborish
|
|
2022-02-17 08:44:28
|
|
|
2022-02-17 08:44:54
|
fuck is shit
|
|
2022-02-17 08:45:06
|
|
|
2022-02-17 08:45:46
|
|
|
2022-02-17 08:45:55
|
niko pandetta too black like nicky jam
|
|
2022-02-17 08:45:59
|
wong colo
|
|
2022-02-17 08:46:28
|
this i like
|
|
2022-02-17 08:46:34
|
|
|
2022-02-17 08:47:37
|
this impessive with the gain
|
|
2022-02-17 08:47:44
|
|
|
2022-02-17 08:49:06
|
|
|
2022-02-17 08:49:10
|
<@!794205442175402004>
|
|
2022-02-17 08:49:14
|
ten is ugly too shap
|
|
2022-02-17 08:49:27
|
|
|
2022-02-17 08:49:30
|
-s 7 -d 0.3
|
|
2022-02-17 08:50:12
|
|
|
2022-02-17 08:50:15
|
hees' impessive compession
|
|
2022-02-17 08:51:37
|
|
|
2022-02-17 08:51:39
|
fifteen has moee oveshapening
|
|
2022-02-17 08:53:57
|
|
|
2022-02-17 08:54:18
|
To me this setting would solve most of the problems here
|
|
2022-02-17 09:06:25
|
for %i in (C:\Users\Utente\Desktop\setwo\youtube\*.png) do cjxl -s 7 -d 0.519 -I 0.202 --epf=2 --intensity_target=260 -p %i %i.jxl
|
|
2022-02-17 09:14:10
|
for %i in (C:\Users\Utente\Desktop\setwo\youtube\*.png) do cjxl -s 7 -q 92.18 -I 0.288 --intensity_target=271 -p --patches=0 %i %i.jxl
|
|
2022-02-17 09:15:44
|
i will wait new build
|
|
2022-02-17 09:18:28
|
for %i in (C:\Users\Utente\Desktop\setwo\youtube\*.png) do cjxl -s 7 -d 0.456 -I 0.751 --intensity_target=271 -p --patches=0 --epf=2 %i %i.jxl
|
|
2022-02-17 09:18:34
|
yes quality is impoving
|
|
2022-02-17 09:20:08
|
for %i in (C:\Users\Utente\Desktop\setwo\fou\*.png) do cjxl -s 7 -d 0.456 --intensity_target=271 -p --patches=0 --epf=2 %i %i.jxl
|
|
2022-02-17 09:20:12
|
for %i in (C:\Users\Utente\Desktop\setwo\fou\*.png) do cjxl -s 7 -d 0.456 --intensity_target=271 -p --patches=0 --epf=2 %i %i.jxl
|
|
|
|
Deleted User
|
2022-02-17 09:44:16
|
Who is Utente?
|
|
|
Fox Wizard
|
|
fab
fuck is shit
|
|
2022-02-17 10:07:59
|
Yes, fuck is shit
|
|
|
fab
|
|
Who is Utente?
|
|
2022-02-17 10:26:27
|
Me (User,)
|
|
|
diskorduser
|
2022-02-17 01:58:58
|
Fabian having a field day
|
|
|
_wb_
|
2022-02-18 04:32:22
|
how well objective metrics work to predict the subjective quality of libaom vs [some other codec]
|
|
2022-02-18 04:32:46
|
same but for mozjpeg vs [other codecs]
|
|
2022-02-18 04:33:00
|
here jxl vs [other codecs]
|
|
|
|
paperboyo
|
|
_wb_
how well objective metrics work to predict the subjective quality of libaom vs [some other codec]
|
|
2022-02-18 04:37:54
|
These look like they come from the same place as https://discord.com/channels/794206087879852103/803645746661425173/943119227081072650. Is this a publicly available publication? Gonna be? (just curious, looks very interesting!)
|
|
|
_wb_
|
2022-02-18 04:41:26
|
the data itself (raw results) are likely not going to be publicly available, the aggregated results like what I'm sharing here will probably eventually become a blogpost on the cloudinary blog or something
|
|
2022-02-18 04:41:56
|
I just know myself, it can take a while to write such a blogpost, so I'm already sharing some stuff as I'm analyzing the data
|
|
2022-02-18 05:20:05
|
segmenting the data by quality range instead of by codec gives this:
|
|
|
monad
|
2022-02-18 09:40:27
|
Objective metrics appear to perform really well in first charts, but poorly the last. Do other codec vs codec comparisons show worse performance, or is there some other reason for the observation?
|
|
|
_wb_
|
2022-02-18 10:09:51
|
I think it's just easier if half the ranking is just one codec at various q settings (which is what it is in the first charts) than if it's all codecs at various q settings in a more narrow quality range (so the subjective scores are noisier too)
|
|
|
monad
|
2022-02-19 09:10:20
|
Ah, makes sense. I didn't really have good intuition for this kind of analysis. But speaking of noise, this makes me wonder how much in agreement human judgement was between individuals. Also, why the choice of BA 1.5-norm (Jyrki recommended BA 6-norm for human comparison in the past)?
|
|
|
_wb_
|
2022-02-19 09:41:09
|
Agreement between individuals is kind of an indication of how big the gap is between two codecs. We did only 10 opinions per pair, and then basically consider it all games in a virtual tournament, one per original image, where each (encoder,q setting) is a player and you can compute ELO scores. If all humans agree, that's 10 games won against the other codec/setting, if there's lots of disagreement then it indicates that the two 'players' are at a similar level...
|
|
2022-02-19 09:42:46
|
When using `butteraugli_main --pnorm 1.5`, it really computes some kind if weighted sum of pnorm 1.5, pnorm 3 and pnorm 6. I also tried the (default) 3-norm and the max-norm, but they performed worse than the 1.5-norm setting.
|
|
2022-02-19 09:43:37
|
Higher norm is useful to make sure there's no artifact anywhere, lower norm is better to predict how humans judge the overall image quality
|
|
|
monad
|
2022-02-20 04:51:41
|
So, the Elo ratings inform the rankings for the Spearman correlation? then the distribution comes from tournaments for each original image?
|
|
|
_wb_
|
|
fab
|
2022-02-21 06:54:56
|
|
|
2022-02-21 06:55:15
|
|
|
2022-02-21 06:58:40
|
|
|