知道该在哪“偷工减料”,Google开源深度学习压缩图片技术

打开一个网站,发现网页速度加载很慢,这可能不仅仅是你网络带宽的问题,也可能是因为这个网站需要加载太多的图像文件。

而同等带宽和网站的前提下,如果可以“无损”压缩这个网站上的图片大小,理所应当就会载入得更快。我们想拥有更快的网速,也珍惜宝贵的手机流量,Google就决定在技术上做一个微小的贡献,让你浏览网页时有更快的感受。

实际上,Google最近开源了一个图像压缩算法Guetzli——Guetzli能产生(压缩)更小的JPEG文档,同時尽可能的保持图像品质,并且它能与现在的浏览器格式、图像处理应用程序和JPEG标准相容。也就是说,Google提供了一种新的压缩图像的方法,这种方法可以提供类似的图片显示效果,但保持更小的文件大小。它可利用到很多的网站设计以及图像工具上,进而实现降低全网的图像文件大小。

话不多说,先上图看是不是有类似的效果:

clipboard_2

clipboard_1

两张图分别存在未压缩的原图、使用比较流行算法的压缩图和Google的Guetzli算法压缩图。如果我不提前说明,你能看出什么样的规律?

在第一张20×24像素的猫眼图中,我们实际上很难察觉出第一张和第二张内具体有什么区别,但第三张看起来色彩更淡,而猫眼之外第三张比第二张像素块更少;而下面这张图,其实是天空中的一根电话线,我们可以看到第一张图最清晰,电话线本身很少有像素块,而第二张和第三张均出现了像素块,且线之外的天空里第二张像素块更明显。这些是基于我们人眼的判断结果。

真相是,猫的眼睛缩放图最左侧是原始未压缩的图、中间的是经过libjpeg算法的图(libjpeg是另外一个比较流行的图像压缩算法,用来和Guetzli做对比)、最右侧的是经过Guetzli算法的图;第二张16×16像素电线图的位置一样。(在这样的小图里对比马赛克像素,我想说贴一张大图看多实在啊~)

对于这个技术本身,Google并没有在官方博客里给出详细的技术解读,但已知的是这其实也是一个基于深度学习(RNN)的技术,主旨就是基于人们对于图片的感知因素而判断取舍。

JPEG图片的视觉质量和主流的图像多级压缩方式是直接相关的,主要是要遵从三个过程:色彩空间变换——离散余弦变换——量化阶段。前两部分有些复杂,但并不是这个技术的核心,所以可以理解为在前两项技术压缩大小已经固定的情况下,优化最后一项量化阶段。而量化阶段的操作就有点类似很多图像处理软件的“另存为”:选择的视觉质量越小,它就损失越多,图片就会被压缩的小。但这个量化阶段的重点是如何取舍图像质量和图像大小这些细节问题。

Guetzli算法就是在这个步骤引入了一个叫做Butteraugli的精神视觉模型——它用来决定保存哪些颜色或者细节、压缩掉哪些细节,从而达到人们视觉上的最优,且图像文件更小。

但具体是如何做到的,Google Blog中也没有给到更详细的解释。但既然是一项基于图像压缩和人类感知的深度学习技术——或许如果把图像库数据打散成各种标签,与人们视觉感知的结果作逻辑连接,提供人们视觉下的最优解做模型。在不断地摄入众多这样的数据源(图像)后,是不是就可以形成可以支撑Guetzli算法的“精神视觉”模型?而这个精神视觉模型已经学会了判断在人们觉得什么样的图片更好看以及图片如何压缩之间的最优解?嗯,可能比人更了解。

111

Google拿这一结果与另一款比较流行的开源编码器libjpeg进行了对比——“75%的用户更偏好Guetzli,这意味着Butteraugli的精神视觉性模型在高画质感知取舍方面更接近于人类感知。”

Google已经在Github上开源了这个Guetzli JPEG编码器。可见这件事情也不只是针对Google网站或者公司本身,而是Google希望所有的网站开发人员、图形设计师或是摄影师都可以使用到这样的图像压缩算法替代网络中传统算法下的JPEG图片,进而大幅降低网络成本。

Google Blog中也提到,因为Guetzli算法涉及到更多的量化过程,也就是说压缩过程比libjpeg更慢,但Guetzli兼容现有的浏览器和设备。Google希望更多的人使用Guetzli算法压缩图片,而如果这一成就达成,相信我们会有更快的浏览体验。

当然,也会节省你的手机流量。

订阅更多文章
更多有趣好玩的内容 尽在品玩微信公众号