Stable Diffusion還能壓縮圖:比JPEG更小,肉眼看更清晰,但千萬別試人臉
這個圖像生成模型又被玩出了新花樣
Alex 發(fā)自 凹非寺
量子位 | 公眾號 QbitAI
免費開源的Stable Diffusion又被玩兒出了新花樣:
這次是被拿來壓縮圖片。
Stable Diffusion不僅能把同一張原圖縮到更小,而且表現(xiàn)還肉眼可見地優(yōu)于JPEG和WebP。
對于同一張原圖,Stable Diffusion壓縮出來的圖像不僅有更多細節(jié),而且壓縮偽影也變少了。
但用Stable Diffusion來壓縮圖的軟件工程師Matthias Bühlmann(咱們就叫他MB哥吧)也指出,這種方式也有明顯的局限性。
因為這不太擅長處理人臉和文字等,有時甚至?xí)诮獯a擴展回去后,幻化出原圖中不存在的特征。
比如像這樣(效果可以讓人嚇一跳):
△左為原圖,右為Stable Diffusion壓縮再擴展的生成圖
不過,話說回來——
Stable Diffusion是如何壓縮圖片的?
要講清楚Stable Diffusion怎么壓縮圖片,不妨從Stable Diffusion的一些重要工作原理說起。
Stable Diffusion是一種特殊的擴散模型,叫作潛在擴散?(Latent Diffusion)。
和標(biāo)準(zhǔn)擴散(Standard Diffusion )不同,潛在擴散在維度較低的隱空間(Latent Space)上進行擴散過程,而不使用實際的像素空間。
也就是說,隱空間的表示結(jié)果是一些分辨率較低的壓縮圖,不過這些圖有較高的精確度。
這里說一下,圖像的分辨率和精度是兩回事兒。分辨率是表示一張圖數(shù)據(jù)量多少的參數(shù),而精度是反映結(jié)果與真值接近程度的量。
就拿這個駱駝的大頭照來舉例:原圖大小768KB,分辨率為512×512,精度為3×8位。
用Stable Diffusion壓縮到4.98KB后,分辨率減少為64×64,而精度反而提升到4×32位了。
所以看起來,Stable Diffusion的壓縮圖和原圖相比,差別不大。
如果再進一步具體而言而話,Stable Diffusion這種潛在擴散模型有三個主要組成部分:
VAE?(Variational Auto Encoder,變分自編碼器),U-Net,和文本編碼器?(Text-encoder)。
不過在這項壓縮圖像的測驗中,文本編輯器沒什么用。
發(fā)揮主要作用的還是VAE,它由兩部分組成:一個編碼器和一個解碼器。
所以,VAE可以將一張圖從圖像空間中,編碼再解碼得到一些潛在空間表示(Latent space representation)。
MB哥發(fā)現(xiàn),VAE的解碼功能對于量化潛在表示來說,表現(xiàn)非常穩(wěn)定。
通過縮放、拖拽和重新映射,將潛在表示從浮點量化為8位無符號整數(shù),就可以得到不怎么失真的壓縮圖了:
首先將latents量化為8位無符號整數(shù),此時圖像大小為64×64×4×8Bit=16 kB(原圖大小512×512×3×8Bit=768 kB)。
然后再運用調(diào)色板(Palette)和抖動(Dither),進一步使數(shù)據(jù)縮小到5kB,同時還提高了圖像的還原度。
作為一位嚴謹?shù)某绦騿T,MB哥除了通過肉眼觀察,還對圖像質(zhì)量進行了數(shù)據(jù)分析。
不過,從圖像質(zhì)量評估的兩項重要指標(biāo)PSNR(峰值信噪比)和SSIM(結(jié)構(gòu)相似性)來看,Stable Diffusion的壓縮結(jié)果并沒有比JPG和WebP好到哪兒去。
另外,當(dāng)把潛在表示重新解碼擴展到原圖分辨率時,雖然圖像的主要特征仍然可見,但VAE也會將高分辨率的特征賦予這些像素值。
用大白話講,就是重建的圖像往往和原圖不一樣,里面夾雜了不少新生成的“鬼畜”特征。
讓我們再來回顧一下這張圖:
雖然用Stable Diffusion來壓縮圖確實還存在不少問題,但用MB哥的話來說,其效果還是很驚艷的,非常有發(fā)展前途。
現(xiàn)在MB哥已經(jīng)把相關(guān)代碼放到了Google Colab上,感興趣的朋友可以仔細看看~
傳送門
https://colab.research.google.com/drive/1Ci1VYHuFJK5eOX9TB0Mq4NsqkeDrMaaH?usp=sharing
參考鏈接:
[1]https://arstechnica.com/information-technology/2022/09/better-than-jpeg-researcher-discovers-that-stable-diffusion-can-compress-images/
[2]https://matthias-buehlmann.medium.com/stable-diffusion-based-image-compresssion-6f1f0a399202
[3]https://huggingface.co/blog/stable_diffusion