As I'm teaching a seminar on neural networks architectures, I'm going through some of my homework programs from the first neural network class I took 25 years ago. In one of the assignments I programmed an autoencoder and try to use it to compress an image. That didn't work very well but we now have a much better tech stack for this task.
The idea would be to use a JavaScript deep learning framework (such as TensorFlow.js), split an image into tiles, train a single autoencoder to produce codes for each tile (or use a convolutional autoencoder), then compress the image as the decoder side of the autoencoder plus the codes for each tile. This technique trades transfer size with decoding time.
Such a technique address two possible use cases:
- Have a Very Large Image, such as a satellite high definition tile and compress it using this technique; or,
- Have a large collection of images and compress it with this technique but with a single autoencoder such as the decoding network can be sent to the browser only once.
Both uses improve over state-of-the-art in terms of amount of data sent down the wire.
Update
Some work on the topic done by emptyshore: https://github.com/mateusz/ml_compression