文件更小,質(zhì)量更高,大火的Stable Diffusion還能壓縮圖像?
近來,Stable Diffusion 成為一個(gè)新興的研究方向。一位名為 Matthias Bühlmann 的博主嘗試實(shí)驗(yàn)探究這種模型的強(qiáng)大功能,結(jié)果發(fā)現(xiàn) Stable Diffusion 是一個(gè)非常強(qiáng)大的有損圖像壓縮編解碼器。他撰寫了一篇博客描述了這個(gè)實(shí)驗(yàn)分析過程,以下是博客原文。
首先 Matthias Bühlmann 給出在高壓縮因子條件下,Stable Diffusion 方法與 JPG、WebP 的壓縮結(jié)果,所有結(jié)果都是 512x512 像素的分辨率:
舊金山風(fēng)景圖,從左至右:JPG (6.16kB), WebP (6.80kB), Stable Diffusion: (4.96kB)。
糖果店,從左至右:JPG (5.68kB), WebP (5.71kB), Stable Diffusion (4.98kB)。
動(dòng)物照片,從左至右:JPG (5.66kB), WebP (6.74kB), Stable Diffusion (4.97kB)。
這些例子明顯表明,與 JPG 和 WebP 相比,使用 Stable Diffusion 壓縮圖像可以在更小的文件大小下保留更出色的圖像質(zhì)量。
探究實(shí)驗(yàn)
Matthias Bühlmann 分析了一下其中的工作原理,Stable Diffusion 使用三個(gè)串聯(lián)的訓(xùn)練好的人工神經(jīng)網(wǎng)絡(luò):
- 變分自編碼器(Variational Auto Encoder,VAE)
- U-Net
- 文本編碼器(Text Encoder)
VAE 將圖像空間中的圖像編碼和解碼為某種潛在的空間表征。源圖像(512 x 512,3x8 或 4x8 bit)的潛在空間表征會(huì)分辨率更低(64 x 64)、精度更高(4x32 bit)。
VAE 在訓(xùn)練過程中自行學(xué)習(xí),隨著模型的逐步訓(xùn)練,不同版本模型的潛在空間表征看起來可能會(huì)有所不同,例如 Stable Diffusion v1.4 的潛在空間表征如下(重映射為 4-channel 彩色圖像):
當(dāng)重新擴(kuò)展和將潛在特征解釋為顏色值(使用 alpha channel)時(shí),圖像的主要特征仍然可見,并且 VAE 還將更高分辨率的特征編碼到像素值中。
例如,通過一次 VAE 編碼 / 解碼 roundtrip 得到如下結(jié)果:
值得注意的是,這種 roundtrip 不是無損的。例如,圖中藍(lán)色帶子上白色的字在解碼后可讀性稍差了一些。Stable Diffusion v1.4 模型的 VAE 一般不太擅長表征小型文本和人臉。
我們知道,Stable Diffusion 的主要用途是根據(jù)文本描述生成圖像,這就要求該模型要對(duì)圖像的潛在空間表征進(jìn)行操作。該模型使用經(jīng)過訓(xùn)練的 U-Net 迭代地對(duì)潛在空間圖像進(jìn)行去噪,輸出它在噪聲中「看到」(預(yù)測(cè))的內(nèi)容,類似于我們有時(shí)把云看成某種形狀或面孔。在迭代去噪步驟中,第三個(gè) ML 模型(文本編碼器)指導(dǎo) U-Net 來嘗試看到不同的信息。
Matthias Bühlmann 分析了 VAE 生成的潛在表征(latent representation)是如何進(jìn)行有效壓縮的。他發(fā)現(xiàn)對(duì) VAE 中的潛在表征進(jìn)行采樣或?qū)撛诒碚鲬?yīng)用已有的有損圖像壓縮方法,都會(huì)極大地降低重構(gòu)圖像的質(zhì)量,而 VAE 解碼過程似乎對(duì)潛在表征的質(zhì)量魯棒性較高。
Matthias Bühlmann 將潛在表征從浮點(diǎn)數(shù)量化為 8-bit 無符號(hào)整數(shù),結(jié)果發(fā)現(xiàn)只有非常小的重構(gòu)誤差。如下圖所示,左:32-bit 浮點(diǎn)潛在表征;中:ground truth;右:8-bit 整數(shù)潛在表征。
他還發(fā)現(xiàn)通過 palette 和抖動(dòng)算法進(jìn)一步量化,得到的結(jié)果會(huì)出乎意料的好。然而,當(dāng)直接使用 VAE 解碼時(shí),palettized 表征會(huì)導(dǎo)致一些可見的偽影:
左:32-bit 潛在表征;中:8-bit 量化潛在表征;右:帶有 Floyd-Steinberg 抖動(dòng)的 palettized 8-bit 潛在表征
帶有 Floyd-Steinberg 抖動(dòng)的 palettized 表征引入了噪聲,使解碼結(jié)果失真。于是 Matthias Bühlmann 使用 U-Net 來去除抖動(dòng)帶來的噪聲。經(jīng)過 4 次迭代,重構(gòu)結(jié)果在視覺上非常接近未量化的版本:
重構(gòu)結(jié)果(左:帶有 Floyd-Steinberg 抖動(dòng)的 palettized 表征;中:經(jīng)過四次迭代去噪;右:Ground Truth)。
雖然結(jié)果非常好,但還是會(huì)引入一些偽影,例如上圖中心形符號(hào)上的光澤陰影。
雖然從主觀上看,Stable Diffusion 壓縮圖像的結(jié)果比 JPG 和 WebP 好很多,但從 PSNR、SSIM 等指標(biāo)看,Stable Diffusion 并沒有明顯的優(yōu)勢(shì)。
如下圖所示,雖然作為編解碼器的 Stable Diffusion 在保留圖像粒度方面比其他方法要好得多,但受壓縮偽影的影響,圖像中物體形狀等特征可能會(huì)發(fā)生變化。
左:JPG 壓縮;中:Ground Truth;右:Stable Diffusion 壓縮。
值得注意的是,當(dāng)前的 Stable Diffusion v1.4 模型在壓縮過程中無法很好地保留字體很小的文本信息和人臉特征,但 Stable Diffusion v1.5 模型在人臉生成方面有所改進(jìn)。
左:Ground Truth;中:經(jīng)過 VAE roundtrip (32-bit 潛在特征) ;右:從 palettized 去噪 8-bit 潛在特征解碼的結(jié)果。
博客發(fā)布后,Matthias Bühlmann 的實(shí)驗(yàn)分析引起了大家的討論。
Matthias Bühlmann 自己認(rèn)為 Stable Diffusion 的圖像壓縮效果比預(yù)期好,U-Net 似乎能夠有效消除抖動(dòng)引入的噪聲。不過,Stable Diffusion 模型未來的版本可能不會(huì)再有這種圖像壓縮特性。
然而有網(wǎng)友質(zhì)疑道:「VAE 本身就被用于圖像壓縮」,例如基于 Transformer 的圖像壓縮方法 TIC 就用到了 VAE 架構(gòu),所以 Matthias Bühlmann 的實(shí)驗(yàn)似乎是大材小用了。
對(duì)此,你有什么看法?