Image Compression with Neural Networks
https://research.googleblog.com/2016/09/image-compression-with-neural-networks.html
在网络中,数据压缩无处不在。在线观看的视频,分享的图片,听到的音乐,甚至现在阅读的博客,压缩技术让你可以快速和高效的分享内容,如果没有压缩技术,将要话费大量的时间和带宽。
在"Full Resolution Image Compression with Recurrent Neural Networks",中,我们使用神经网络扩展了以前在“Variable Rate Image Compression with Recurrent Neural Networks”使用的数据压缩方法,探索了机器学习是否可以提供一个更好的方法,就像他在图像识别和文字概括方面的表现。进一步,我们分享了我们的压缩模型,通过tenforflow, 你可以使用它来压缩自己的图像。
我们引入了一个新的Gated Recurrent Unit的变种,叫做Residual Gated Recurrent Unit (Residual GRU). 我们的Residual GRU是GRU和residual connect的结合,residual connect是在"Deep Residual Learning for Image Recognition"中介绍的,对于给定的压缩率,他可以获得很好的图像质量。与现在的基于DCT的压缩算法不同,我们训练2套神经网络,一套编码,一套解码。
我们的系统以迭代的方式工作,逐步精细化重建图像,编码器和解码器都是用Residual GRU,附加信息可以从一个迭代向下一次迭代传递。每一次迭代生成一些新的Bit,可以用来提高重建图像质量。概念上,这个网络的工作方式是:
1. 初始残差,R[0]对应于原始图像I,R[0]=I
2. 设置i=1,为第一次迭代
3. 迭代[i]把R[i-1]作为输入,编码和比特化,生成压缩后的码流B[i]
4. 迭代[i]把压缩后的码流B[i]解码,生成重建图像P[i]
5. 计算迭代[i]的残差R[i]=I-P[i]
6. 设置i=i+1,跳转到第三步
残差R[i]代表当前的迭代后,生成图像与原图像有多少差异,R[i]作为输入,交给下一次迭代,目标是消除压缩误差。此时,码率B[1]到B[N]的级联就可以代表压缩图像。N越大,压缩的图像质量就越好。
为了理解他是如何工作,考虑下面的例子。
左边是原始图像,中间是第一次迭代生成的重建图像,右边是残差。
左图是第二次迭代的输入,中间是第二次迭代生成的重建图像,右边是第二次残差。
一个明显的问题是,第二次迭代,为什么可以从残差输入R[1]中,重建出高质量的重建图像P[2]呢?答案是,模型中使用的RNN模型有记忆功能,他在每一次迭代中都保存了信息用于下一次的迭代。在第一次迭代中,他从原始的图像中学习到了一些东西,用来与R[1]一起,从B[2]中生成更好的重建图像P[2]。
在每一次迭代中,网络都得到更多的关于残差的信息,
At each further iteration, the network gains more information about the errors introduced by compression (which is captured by the residual image). If it can use that information to predict the residuals even a little bit, the result is a better reconstruction. Our models are able to make use of the extra bits up to a point. We see diminishing returns, and at some point the representational power of the network is exhausted.
No comments:
Post a Comment