用神经网络压缩图像,挺有意思的。传送门:https://github.com/tensorflow/models/tree/master/compression
这是一个用Tensorflow实现的例子,跑了一下,还挺管用的。对图像质量要求低点话,最大压缩比例192:1。它的工作原理挺复杂的,大致原理是:压缩网络由一个编码网络E,一个二进制处理器B和一个解码网络D组成。E和D都是RNN网络。输入图像首先被编码,然后转换成二进制码被存储或者转发给解码网络。解码网络基于收到的二进制信息尝试创建一个原始图像的复制品。然后计算原始图像和复制品之间的残差,反复训练,直到得到满意的结果。 想要了解详细内容,请阅读paper《Full Resolution Image Compression with Recurrent Neural Networks》。
注意到一个细节,解码器decoder.py里面使用了uint8来还原图像,可以大幅减低对GPU内存的需求。如果把uint8改成uint16的话,我的6G显存的GPU就没法正常工作了。Tensorflow对uint8支持的不错,非常适合做移动端的应用。