基于神经网络的图像压缩技术

(本文由软件工程师 Nick Johnston 和 David Minnen 发布)

在互联网之中,数据压缩技术可以说无处不在 —— 您在线观看的视频,分享的图片,听到的音乐,甚至是您正在阅读的这篇博客。压缩技术使得您可以快速且高效地分享内容。如果没有数据压缩,我们在获取所需的信息时,时间与带宽的开销会高得难以接受!

在 “基于递归神经网络的全分辨率图像压缩 ” 一文中,我们对以往使用神经网络进行数据压缩的研究进行了拓展,以探索机器学习是否能像在图像识别文本摘要领域中的表现一样,提供更好的图像压缩效果。此外,我们也正通过 TensorFlow 来发布我们的压缩模​​型,以便您可以尝试使用我们的网络来压缩您自己的图像。

当前我们提出了一种使用残差门控循环单元(RGRU,Residual GRU)的架构,这种单元是门控循环单元(GRU,Gated Recurrent Unit,一种允许单元保存激活和处理序列的 RNN 类型)的一个新型变体。我们的 RGRU 是将原本的 GRU 与文章 “深度残差学习图像识别 ” 中引入的残差连接相结合,以实现在给定的压缩率下获得更显着的图像质量增益。我们训练了两组神经网络 —— 一组用于根据图像进行编码(即作为编码器),另一组则是从编码中解析出图像(即解码器)。而这两组神经网络则代替了目前图像压缩技术中主要使用的,采用 DCT(Discrete Cosine Transform,离散余弦变换) 来生成新的比特表示的压缩方案。

我们的系统通过迭代的方式提炼原始图像的重构,同时编码器和解码器都使用了 RGRU 层,从而使得附加信息在多次迭代中传递下去。每次迭代都会在编码中增加更多的比特位数,从而实现更高质量的重构。从概念上来说,该网络的工作流程如下:

  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 并转到步骤 3(直到达到了所需的迭代次数为止)。

残差图像展示了当前版本的压缩图像与原始图像的差异。而该图像随后则作为输入提供给神经网络,其目的是剔除下一版本的压缩图像中的压缩错误。现在压缩的图像则是由 B[1] 至 B[N] 的连接表示。N 值越大,解码器就能获得更多有助于减少错误,同时又可以生成更高质量的原始图像的重构的信息。

为了理解该算法是如何运作的,请考虑如下图所示的,图像压缩网络前两次迭代的示例。我们以一座灯塔的图像作为原始数据。当它第一次通过网络时,原始图像作为输入进入(R[0] = I)。P[1] 是重建的图像。原始图像和编码图像之间的差异即是残差 R[1],它表示了压缩中出现的误差。

左图:原始图像,I = R[0]。中图:重建的图像,P[1]。右:表示由压缩引入的错误的残差 R[1]。

在第二次通过网络时,R[1] 则作为网络的输入(如下图)。然后更高质量的图像 P[2] 就生成了。那么问题来了,系统是如何根据输入的残差 R[1] 重新创建出这样一个更好的图像(P[2],下图中部)的呢?这是由于模型使用了带有记忆功能的循环节点,因此网络会保存每次迭代中可用于下一次迭代的信息。它在第一次迭代中学习到了关于原始图像的一些东西,这些东西同 R[1] 一起用于从 B[2] 中生成更好的 P[2]。最后,通过从原始图像中减去 P[2] 就产生了新的残差 R[2](右)。由于本次我们重建得到的图像和原始图像之间的差异较小,因此残差也较小。

第二遍通过网络。左图:R[1] 作为输入。中图:更高质量的重建,P[2]。右图:通过从原始图像中减去 P[2] 生成更小的残差 R[2]。

在之后的每次迭代中,网络将获得更多由于压缩而引入的误差的信息(通过残差图像捕获到的信息)。如果我们可以用这些信息来预测残差,那么就能得到更优重建结果。我们的模型能够在一定程度上利用多余的部分信息。我们可以看到收益是递减的,并且在某个时候,网络的所表现出来的能力就会被用尽。

为了演示文件大小和质量之间的差异,我们可以拍摄一张日本狆 Vash 的照片,并生成两种压缩图像,一个 JPEG 和一个 RGRU。两幅图像都以 0.9 MS-SSIM 的感知相似度为目标,如果是两张完全相同的图像,它们之间的感知相似度就是 1.0。我们的学习模型在同样质量的情况下,生成了比 JPEG 小 25% 的最终图像。

左图:1.0 MS-SSIM 的原始图像(1419 KB PNG)。中图:0.9 MS-SSIM 的 JPEG(33 KB)。右图:0.9 MS-SSIM 的 RGRU(24 KB)。相比之下,图像数据量要小25%

观察它的鼻子和嘴巴,我们可以看到,我们的方法没有造成在 JPEG 图像中看到的中间部分的洋红色块和噪音。这是由于 JPEG 压缩的方块效应而产生的,而此处我们的压缩网络对整个图像同时处理。然而,这是经过了权衡的 —— 在我们的模型中,晶须和纹理的细节丢失了,但是它在减少方块效应方面展现出了强大能力。

左图:原始图像。中图: JPEG。右图:RGRU。

虽然今天我们常用的编解码器依旧表现良好,但我们的工作已经表明,使用神经网络来压缩图像可以生成质量更高且数据量更小的压缩方案。如果想了解更多关于我们的研究的细节,以及与其他循环架构的比较,请查看我们的论文。在未来的研究中,我们将着重于获得更好的压缩质量以及设计更高效的模型,敬请期待!

本文的版权归 StoneDemo 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏文武兼修ing——机器学习与IC设计

基于Pytorch的CapsNet源码详解CapsNet基本结构代码实现参考

CapsNet基本结构 参考CapsNet的论文,提出的基本结构如下所示: ? capsnet_mnist.jpg 可以看出,CapsNet的基本结构如下所示:...

37870
来自专栏大数据文摘

算法可视化:把难懂的代码画进梵高的星空

30640
来自专栏机器之心

学界 | 神经优化器搜索:利用强化学习自动搜索最优化方法

47060
来自专栏技术随笔

[透析] 卷积神经网络CNN究竟是怎样一步一步工作的?

38260
来自专栏深度学习之tensorflow实战篇

开源|LightGBM基本原理,以及调用形式

1.7K50
来自专栏AI研习社

如何有效处理特征范围差异大且类型不一的数据?

原题目如下: 1. 特征类型混杂: 连续变量,离散变量,描述变量共存 2. 不同变量之间取值差异大: 例如有些变量取值在 0~1 但有些取值为 10000-5...

48170
来自专栏人工智能LeadAI

透析 | 卷积神经网络CNN究竟是怎样一步一步工作的?

视频地址:https://www.youtube.com/embed/FmpDIaiMIeA; 文档参阅:<a href="https://github.com...

42660
来自专栏AI科技大本营的专栏

谷歌大脑深度学习从入门到精通视频课程[1.2]:前馈神经网络——激活函数

课程主要内容 回顾上一节课的内容。(P2) 神经网络中的四种激活函数的性质。(P3-P6) PPT 解释如下: P1. 首页 P2. 回顾上一节课的内容,主要...

27230
来自专栏人工智能头条

如何使用 RNN 模型实现文本自动生成 |

58520
来自专栏人工智能头条

深入浅出LSTM神经网络

18150

扫码关注云+社区

领取腾讯云代金券