基于文本的图像生成模型大行其道,不仅是扩散模型,还有开源的StableDiffusion模型。最近,瑞士软件工程师MatthiasBühlmann无意中发现StableDiffusion不仅可以用来生成图像,还可以用来压缩位图图像,甚至比JPEG和WebP的压缩率更高。比如一张骆驼的照片,原图768KB,使用JPEG压缩到5.66KB,而StableDiffusion可以进一步压缩到4.98KB,并且可以保留更多的高分辨率细节和更少的压缩伪影,裸眼可见眼睛比其他压缩算法更好。但是这种压缩方式也有缺陷,就是不适合压缩人脸和文字图片,在某些情况下甚至会生成一些没有内容的原图。虽然重新训练一个autoencoder也可以达到类似StableDiffusion的压缩效果,但是使用StableDiffusion的一个主要优点是已经有人投入了数百万给你训练一个,你何必再花钱呢?训练压缩模型怎么样?StableDiffusion如何压缩图像Diffusion模型正在挑战生成模型的霸主地位,相应的开源StableDiffusion模型也在机器学习界掀起一场艺术革命。稳定扩散是通过连接三个训练有素的神经网络获得的,即变分自动编码器(VAE)、U-Net模型和文本编码器。变分自编码器对图像空间中的图像进行编码和解码,得到图像在潜在空间中的表示向量,用较低分辨率(64x64)和较高精度(4x32bit)的向量表示源图像(3x8或4x8位512x512)。VAE将图像编码到latentspace的训练过程主要依赖self-supervisedlearning,即输入和输出都是源图像,所以随着模型的进一步训练,不同版本模型的latentspace表示可能看起来不同的。使用StableDiffusionv1.4的潜在空间表示被重新映射并解释为4通道彩色图像后,它看起来像下面的中间图像,源图像中的主要特征仍然可见。需要注意的是VAE往返编码一次并不是无损的。例如,经过解码后,蓝带上ANNA的名字就不如源图清晰,可读性明显降低。StableDiffusionv1.4中的变分自动编码器不太擅长表示小文本和面部图像。不知道v1.5会不会改进。StableDiffusion的主要压缩算法是利用图像的这种潜在空间表示从短文本描述中生成新图像。从潜在空间表示的随机噪声开始,使用经过充分训练的U-Net对潜在空间图像进行迭代去噪,使用更简单的表示输出模型认为它在这种噪声中“看到”的预测,有点像我们在When看着云,从不规则的形状中还原出你脑海中的形状或面孔。当使用StableDiffusion生成图像时,这个迭代去噪步骤由第三个组件引导,即文本编码器,它为U-Net提供有关它应该尝试在噪声中看到什么的信息。然而,对于压缩任务,不需要文本编码器,因此实验过程只创建一个空字符串的编码来告诉U-Net在图像重建过程中执行无引导的去噪。为了将StableDiffusion用作图像压缩编解码器,该算法需要有效地压缩VAE产生的潜在表示。在实验中,可以发现对潜在表示进行下采样或直接使用现有的有损图像压缩方法会大大降低重建图像的质量。但作者发现VAE解码似乎对潜在表示的量化非常有效。从浮点到8位无符号整数的缩放、钳位和重新映射潜能只会产生较小的可见重构错误。通过量化8位潜在表示,图像表示的数据大小现在为64*64*4*8bit=16kB,远小于未压缩源图像的512*512*3*8bit=768kB。如果latentrepresentations的数量少于8bit,就无法产生更好的结果。如果进一步对图像进行调色和抖动,量化将再次提高。使用256*4*8位向量的潜在表示和Floyd-Steinberg抖动创建调色板表示,使潜在空间调色板的抖动进一步数据大小压缩到64*64*8+256*4*8bit=5kB噪声是引入,扭曲解码结果。但是,由于StableDiffusion是建立在去除latentnoise的基础上的,所以U-Net可以用来去除jitter带来的noise。经过4次迭代后,重建结果在视觉上非常接近未量化版本。虽然数据量大大减少(源图比压缩图大155倍),效果很好,但是也引入了一些artifacts(比如心形图案中不存在的artifacts)原图)。有趣的是,这种压缩方案引入的伪影对图像内容的影响大于图像质量,以这种方式压缩的图像可能包含这些类型的压缩伪影。作者还使用zlib对调色板和索引进行了无损压缩。在测试样本中,大部分压缩结果都小于5kb,但这种压缩方式还有较大的优化空间。为了评估压缩编解码器,作者没有使用在互联网上找到的任何标准测试图像,因为互联网上的图像可能已经出现在StableDiffusion训练集中,压缩此类图像可能会导致不公平的比较优势。为了尽可能公平地进行比较,作者使用了Python图像库中最高质量的编码器设置,并使用mozjpeg库对压缩的JPG数据添加了无损数据压缩。值得注意的是,虽然StableDiffusion的结果主观上看起来比JPG和WebP压缩图像好得多,但在PSNR或SSIM等标准测量方面,它们并没有明显好转,也不差。只是引入的伪影类型不太引人注意,因为它们对图像内容的影响大于图像质量。这种压缩方法也有点危险,尽管重建特征的质量很高,但内容可能会出现压缩伪影,即使它看起来非常清晰。例如,在测试图像中,虽然作为编解码器的StableDiffusion在保持图像质量方面要好得多,甚至可以保留相机颗粒(cameragrain)(这对于大多数传统压缩算法来说很难),但它的内容仍然受到压缩伪影的影响,建筑形状等精细特征可能会发生变化。虽然在JPG压缩图像中肯定不可能比在StableDiffusion压缩图像中辨别出更多真实价值,但StableDiffusion压缩结果的高视觉质量可能具有欺骗性,因为在JPG和WebP中更容易发现压缩伪影。如果你也想手工复现实验,作者已经在Colab上开源了代码。代码链接:https://colab.research.google.com/drive/1Ci1VYHuFJK5eOX9TB0Mq4NsqkeDrMaaH?usp=sharing最后作者说文中设计的实验还是挺简单的,但是效果还是很惊喜的,还有未来还有很大的提升空间。
