Perceptual Image Codec: What Matters in Practical Learned Image Compression
https://apple.github.io/ml-pico/Since this is by Apple, I’m certainly curious if this is aimed at becoming the new default format for Apple devices. What kind of effort does it take to do that, beyond getting the paper published?
On the PR summary page, the “speed” column should be labeled “time”. Time is lower-is-better, whereas speed means higher-is-better.
The BD rate column could also use a less cryptic label. (Though maybe the audience is paper reviewers and not me.) The paper itself doesn’t even write out what the BD acronym in “BD rate” stands for, but it seems like it would be fair and accurate and better to call the column maybe something like relative compressed size, and mention the exact metric in the caption — where there’s already an explanation of BD rate.
I’m somewhat confused by, and slightly skeptical TBH, of the device timings. Are they correct & fair? Why is the NN-only portion almost as fast on an iPhone 17 compared to a V100 when the V100 has 4x the FP throughput? Is it comparing apples to apples (ha!), and is the GPU implementation reasonable? The data suggests the GPU implementation is not saturating the GPU.
Also why are there several different GPU models? And why is V100 even used? V100 is four generations old and not even supported anymore.
Bjontegaard Delta-Rate (BD Rate) metric, proposed in 2001 by Gisle Bjontegaard, is a method for calculating the average difference between two rate-distortion (RD) curves.
It is extremely common in codec comparison, along with terms like PSNR, SSIM and VMAF ( which is newer and developed by Netflix so it tends to get explained a bit more )
>’m certainly curious if this is aimed at becoming the new default format for Apple devices.
I certainly hope not. Not unless it is deterministic and much much higher quality.
Might have some sequential section or a block size that struggles to fill a V100 or a large chunk of CPU-only work or any number of things like that.
150ms to decode 12mp is also incredibly slow. That's like PNG territory of slow. A more flagship 50mp image would be... oof.
I guess this is what happens when you chase after extremely low data rates but I’m not happy with the results.
You can see it in the hair as well. It seems very clear that it is engaging in a kind of texture synthesis.
So it seems to be looking at an area, and capturing the textural quality. And then reproducing that, so the overall effect is the same, but individual fibers or fuzzy bits are randomly generated from scratch.
And so yes, if you zoom in enough, the knitting looks completely wrong because the regular geometric pattern of irregular yarn it is made of has been replaced by a completely irregular pattern of irregular yarn.
In other words, it is essentially hallucination of details on a micro scale but not on a macro scale.
And I think that raises a really interesting philosophical question of what we consider to be valid image reconstruction from lossy compression.
Because on the one hand, this is no different from blurriness or even the kind of blocky JPEG compression we are familiar with. It's just pixels that are wrong. Those blocks don't appear in the original image. The blurriness isn't there in the original image.
But on the other hand, we see blurriness as being somehow more "honest", and we are easily able to recognize that blockiness is an artifact.
Whereas with textural hallucination, it is no longer clear what is being filled in versus what is original, because it's doing such a good job of emulating so many aspects of the original texture.
And it's really hard to say if one approach is better or worse than the other. It's probably more accurate to say that one is more appropriate than the other in different contexts. Like if it is just a normal news photograph, I am perfectly happy with a sharper image because it's not changing anything substantial – it's not changing the face of a world leader or the number of people in the photo. But on the other hand, if I am doing online shopping for shirts and I want to be able to zoom in on the texture, then it's incredibly important that the texture be accurate and not loosely hallucinated.
These denoising models, the autoencoders more directly so, work by (lossily) mapping the raw input to a very low dimensional representation. The other part generates the desired image back from the low-d representation.
The problem is that nothing, in the vanilla versions, prevent the the low-d version to be a semantics representation such as, Moon, dark hair etc and the generative part to take cues from the semantic representation to a generated sub-image.
The Samsung phone Moon image was likely a result of deliberate choice / company policy, but these things can happen without explicit intent.
According to Chrome Stats from Google 2019 [1], ~80% to 85% of images served are above bpp 1.0 ( Bit per Pixel ). Around ~95% are above bpp 0.5. I doubt this have changed if not gotten worse as images gets larger over the years.
There are images such as logo or specific patterns that works a lot better and compressed at low bpp ( below 0.5 ). But those are rare on web, and in the case here, most of the images are photography.
Which means at sub 0.3 bpp it is a ridiculously low bitrate even for Web photo.
HEIC on iPhone 17 is based on HEVC, H.265 hardware encoder on iPhone 17.
VVC / VTM is H.266 Codec, the successor of HEVC / H.265 most people may have heard of one of its encoder called x265.
ETM is H.267 Codec, currently the best in class video compression codec that is still in development.
I assume everyone knows about AV1 and AV2 already since we are on HN.
CPU Encoder, generally speaking produce better image quality while hardware encoder tends to be fast but lower quality. Both HEIC and AV1 are based on hardware encoder on the iPhone 17. ( At least that is my read of it )
In case anyone wondering. JPEG XL is not designed or yet to be optimised for low bpp. It excels at 0.8 bpp onwards depending of type of image. So the result of XL would likely be very bad. Similarly to normal JPEG and H.264 encoder.
I am wondering if this image codec is deterministic.
I would imagine if we use this on the web the actual image size would be a lot smaller. Meaning a lot of the artifacts we see shouldn't matter. And clicking on it would bring up a different image file.
There is finally a possibility in the future some half decent image could be included within 14K frame of the webpage.
Encoding and Decoding speed is actually useable on today's hardware. Decoding in sub 100ms on iPhone 17.
And on another notes, VVC is doing extremely well in terms of compression rate and encoding / decoding complexity.
AV2 launching by the end of this month.
[1] Figure 1
https://www.spiedigitallibrary.org/conference-proceedings-of...