Cool-chic (pronounced /kul ʃik/ as in French 🥖🧀🍷) is a low-complexity neural image codec based on overfitting.
-
🏆 Coding performance: Cool-chic compresses images as well as H.266/VVC
-
🪶 Lightweight decoder: Cool-chic decoder performs only 1000 multiplications per decoded pixel
-
🚀 Fast CPU-only decoder: Decode a 1280x720 image in 100 ms on CPU with our decoder written in C
-
🖼️ I/O format: Encode PNG, PPM and YUV 420 & 444 files with a bitdepth of 8 to 16 bits
- Speed-up GPU Encoding up to 3 times! Check-out the detailed encoding speed-up measurements
- Change encoder configuration files with better medium and slow encoding presets
Check-out the release history to see previous versions of Cool-chic.
More details are available on the Cool-chic page
# We need to get these packages to compile the C API and bind it to python.
sudo add-apt-repository -y ppa:deadsnakes/ppa && sudo apt update
sudo apt install -y build-essential python3.10-dev pip
git clone https://github.com/Orange-OpenSource/Cool-Chic.git && cd Cool-Chic
# Install create and activate virtual env
python3.10 -m pip install virtualenv
python3.10 -m virtualenv venv && source venv/bin/activate
# Install Cool-chic
pip install -e .
# Sanity check
python -m test.sanity_check
You're good to go!
The Cool-chic page provides comprehensive rate-distortion results and compressed bitstreams](https://orange-opensource.github.io/Cool-Chic/results/image/reproduce_results.html) allowing
to reproduce the results inside the results/
directory.
BD-rate of Cool-chic 3.4 vs. [%] | Avg. decoder complexity | |||||||
---|---|---|---|---|---|---|---|---|
Cheng | ELIC | Cool-chic 3.3 | C3 | HEVC (HM 16) | VVC (VTM 19) | MAC / pixel | CPU Time [ms] | |
kodak | -4.2 % | +7.5 % | -0.9 % | -4.3 % | -17.2 % | +3.4 % | 1303 | 74 |
clic20-pro-valid | -13.2 % | -0.2 % | -0.3 % | -1.3 % | -25.1 % | -2.3 % |
1357 | 354 |
jvet (BCDEF) | / | / | -0.2 % | / | -18.3 % | +18.6 % | 1249 | 143 |
jvet (class B) | / | / | +0.9% | / | -9.9 % | +20.7 % | 1300 | 282 |
jvet (class C) | / | / | -1.3% | / | -16.1 % | +9.2 % | 1289 | 69 |
jvet (class D) | / | / | -1.4% | / | -12.4 % | +9.6 % | 948 | 18 |
jvet (class E) | / | / | -3.8% | / | -6.2 % | +27.8 % | 1347 | 125 |
jvet (class F) | / | / | +0.2% | / | -31.8 % | +20.6 % | 1249 | 182 |
Decoding time are obtained on a single CPU core of an an AMD EPYC 7282 16-Core Processor
PSNR is computed in the RGB domain for kodak and CLIC20, in the YUV420 domain for jvet
The graphs below present the time required to encode several images resolutions
on different hardwares. These figures are obtained using the
cfg/enc/medium_30k.cfg
encoding configuration.
Special thanks go to Hyunjik Kim, Matthias Bauer, Lucas Theis, Jonathan Richard Schwarz and Emilien Dupont for their great work enhancing Cool-chic: C3: High-performance and low-complexity neural compression from a single image or video, Kim et al.