把文生图 AI 反过来用,不就能压缩图片了吗。
每当在网上看到有趣的表情包、梗图时,不少人都会在心中暗暗念叨一句:“你的图很好,不过现在它是我的了。”
但当人们把“盗”下来的图再次传到其他帖子中时,网络平台往往会再次压缩图片,节省储存空间和网络带宽。如果一个图被“盗”的次数太多,就会被重复压缩多次。每次压缩,图片画质就会下降一点,变得更“糊”一点 —— 甚至还会变绿、变暗一点。被“盗”过很多遍的图会变绿甚至已经变成了一个梗,甚至催生了一系列渣画质的表情包。原因大概是:如果一个图很有趣,就会被更多人保存,就会被压缩更多次,画质也就越差;反过来,如果一个图片画质很差,那大概也就说明它很受欢迎。
很明显这张盗图比色卡也被盗了很多次这有点像一件受欢迎的古玩,在长久岁月中被无数人细细把玩,最终在表面形成了一层有光泽的“包浆”。渣画质、整体偏绿的颜色已经成为了网络时代的“电子包浆”、“赛博包浆”。甚至还有人看到那些高画质的好图,总觉得它没有经过“岁月的洗礼”,心中感慨:“干干巴巴的,麻麻赖赖的,一点儿都不圆润。盘它!”于是,电子包浆模拟器诞生了。
图片来源:电子包浆 图片赛博做旧 / 神奇海螺实验室图片为何变绿
图片变绿其实是安卓操作系统核心代码的一个 bug。安卓系统给开发者提供了一个图像压缩接口,可以让开发者方便地压缩 JPEG 图片(也就是 jpg 图片)。但这个接口的底层实现算法为了加速压缩计算过程,在色彩模式转换的过程中出了一个 bug。
我们在手机屏幕上看到的图片都存储着 RGB 信息(Red 红、Green 绿、Blue 蓝),它能告诉屏幕上每个红绿蓝子像素应该以何等亮度发光,从而在屏幕上显示出图片的样貌。但在图像处理过程中,一般需要 RGB 信息转换成 YUV 信息(亮度、蓝色浓度偏移量、红色浓度偏移量)。因为人眼对 Y 代表的亮度信息更为敏感,算法可以着重压缩 UV 信息。这样就能在人眼感知差别不大的情况下,尽可能减小图片所占的存储空间。
一般而言,从 RGB 色彩模式转换到 YUV 色彩模式是轻微有损的,但损失较小,并不至于让图片朝着变绿的方向一路狂奔。但是开发者为了加速这个转换计算过程,不当地使用了位运算,导致数据在从 RGB 向 YUV 转换时会向下取。所以在重复压缩过程时,Y、U、V 三个值就会不断减小,亮度 Y 值减小会让图片不断变暗,而 UV 不断减小,会让色彩不断向绿色的方向偏移(见下图)。所以,经过多次压缩的图片会变绿、变暗。
Y=0.5 时的 UV 色彩平面,UV 减小时图片会变绿。图片来源:wikipedia这个问题在 2016 年 4 月中旬就被修复了,按照安卓系统的发行时间来看,从 2016 年 8 月 22 日安卓 7 系统发布,这个问题才算解除。(不过考虑到手机厂商对安卓系统的跟进大多存在延迟,这个问题解决的时间就更晚了。)所以说,图片变绿的问题,只有在几年前的安卓系统上使用 JPEG 图片时才会产生。
新的图片压缩算法
虽然有人喜欢图片变绿变暗的“电子包浆”,觉得这样的图片更有“味道”。但开发者肯定还需要结果正确、不会变绿的图片压缩算法。除了修复安卓图片压缩接口的 bug 外,又有不少高效的图片格式被开发了出来。比如谷歌开发的 WebP 格式,苹果推广的 HEIC 格式,都采用了比较先进的图片压缩算法。和传统的 JPEG 格式相比,这两种格式在观看效果更好的同时,占用的空间还更小。
而最近,根据文字生成图像的 AI 火了起来。这些 AI 算法大多基于扩散模型,可以在经过大量文字、图像的训练后,从用户输入的文字生成一张图片。虽然图片的细节还不算完美,但可以日夜无休生成图片的 AI 还是让人看到了巨大的潜力。甚至有人感叹,这样发展下去,画师恐怕要失业了。
该图片由文心 ERNIE-ViLG 文生图模型生成。使用关键词为“写不出来稿子的编辑正在办公室里摸鱼,赛博朋克,油画”。图片来源:文心 ERNIE-ViLG 文生图这种 AI 将来能发展到什么程度我们先按下不表,倒是有一名瑞士开发者 Matthias Bühlmann 动起了“歪脑筋”—— 它能否用于图片压缩呢?
人工智能压缩
Matthias Bühlmann 选择了免费开源的文生图 AI:Stable Diffusion。它主要由三个模块构成:变分自编码器(Variational Auto Encoder,VAE)、U-Net 和文字编码器。
压缩图片时不需要文字输入,所以 Matthias Bühlmann 舍弃了文字编码器;而 VAE 则可以将图片编码到潜在空间表征(latent space representation)。在潜在空间表征下,图片分辨率变低了(从 512×512 到 64×64),但是色彩精度却提高了(从 8 位提升到 32 位)。
VAE 还能将潜在空间表征的图片再解码回图片原来的样子。就算在潜在空间表征上再次对图片进行压缩,VAE 也能将图片大致还原成本来的样子。最终,Matthias Bühlmann 将一张未经压缩的 768kB 的图片压缩到了 5kB。肉眼看过去,同样是把图片压缩到这个大小,JPEG 和 WebP 的压缩损失就很明显了。
从左到右分别为 WebP 图片、JPG 图片、AI 压缩图片和原图。图片来源:Matthias BühlmannAI 电子包浆
当然,但这种压缩算法并不是完美的。虽然这种图片压缩算法能骗过人眼,但在客观评价图片质量的两个参数 PSNR 和 SSIM 上,它相对 JPG 和 WebP 并没有明显的优势。
说到底,这种图像压缩算法还是让 AI 根据一个压缩过的缩略图去“猜”它的原图长什么样子,还原出的图片在一些细节上难免和原图不一致,这反而造就了一种新的“电子包浆”。Matthias Bühlmann 就发现,这种图像压缩算法在处理人脸、文字时,可能在人脸上生成诡异(甚至有时还有点“克苏鲁”)的效果,VAE 重建的文字也几乎难以辨认。也就是说,和以前的压缩算法会让图片产生绿色的“电子包浆”,而新时代 AI 压缩算法会让人脸和文字产生诡异的“电子包浆”。
从左到右分别为 WebP 图片、JPG 图片和 AI 压缩图片,注意红圈中人脸上的诡异状态。图片来源:Matthias BühlmannAI 的复杂性也让这种图像压缩算法难以推广。传统图像压缩算法是一套固定的算法,可以用轻量化的程序实现。而 AI 则以计算量庞大著称,这种 AI 图像压缩算法需要足足 4GB 的空间存储参数文件,并且解码时间也比其他压缩算法更长。
所以说,目前这种图像压缩算法并不值得推广,就算推广了,它也并不能完美解决“电子包浆”的问题,反而却会因为 AI 的特性,产生人类难以想象的、全新的、诡异的“电子包浆”。
不过,现在最流行的电子包浆并不是整体偏绿偏暗的颜色,而是层层叠叠难以去除的水印……
参考链接:
https://pub.towardsai.net/stable-diffusion-based-image-compresssion-6f1f0a399202
https://arstechnica.com/information-technology/2022/09/better-than-jpeg-researcher-discovers-that-stable-diffusion-can-compress-images/
https://magiconch.com/patina/
https://www.zhihu.com/question/29355920/answer/119088684
https://github.com/google/skia/commit/c7d01d3e1d3621907c27b283fb7f8b6e177c629d
https://en.wikipedia.org/wiki/YUV
https://developers.google.com/speed/webp
本文来自微信公众号:环球科学 (ID:huanqiukexue),撰文:王昱,审校:栗子