Stable Diffusion還能壓縮圖:比JPEG更小更清晰,但千萬別試人臉
2022-09-30由 量子位 發表于 林業
冷杉數量有多少
Alex 發自 凹非寺
量子位 | 公眾號 QbitAI
免費開源的Stable Diffusion又被玩兒出了新花樣:
這次是被拿來
壓縮圖片
。
Stable Diffusion不僅能把同一張原圖縮到更小,而且表現還
肉眼可見地優於JPEG和WebP
。
對於同一張原圖,Stable Diffusion壓縮出來的影象不僅有更多細節,而且壓縮偽影也變少了。
但用Stable Diffusion來壓縮圖的軟體工程師Matthias Bühlmann(咱們就叫他MB哥吧)也指出,這種方式也有明顯的侷限性。
因為這不太擅長處理人臉和文字等,有時甚至會在解碼擴充套件回去後,幻化出原圖中不存在的特徵。
比如像這樣(效果可以讓人嚇一跳):
△左為原圖,右為Stable Diffusion壓縮再擴充套件的生成圖
不過,話說回來——
Stable Diffusion是如何壓縮圖片的?
要講清楚Stable Diffusion怎麼壓縮圖片,不妨從Stable Diffusion的一些重要工作原理說起。
Stable Diffusion
是一種特殊的擴散模型,叫作
潛在擴散
(Latent Diffusion)。
和標準擴散(Standard Diffusion )不同,潛在擴散在維度較低的隱空間(Latent Space)上進行擴散過程,而不使用實際的畫素空間。
也就是說,隱空間的表示結果是一些解析度較低的壓縮圖,不過這些圖有較高的精確度。
這裡說一下,影象的解析度和精度是兩回事兒。解析度是表示一張圖資料量多少的引數,而精度是反映結果與真值接近程度的量。
就拿這個駱駝的大頭照來舉例:原圖大小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)。
不過在這項壓縮影象的測驗中,文字編輯器沒什麼用。
發揮主要作用的還是VAE,它由兩部分組成:一個編碼器和一個解碼器。
所以,VAE可以將一張圖從影象空間中,編碼再解碼得到一些潛在空間表示(Latent space representation)。
MB哥發現,VAE的解碼功能對於量化潛在表示來說,表現非常穩定。
透過縮放、拖拽和重新對映,將潛在表示從浮點量化為8位無符號整數,就可以得到不怎麼失真的壓縮圖了:
首先將latents量化為8位無符號整數,此時影象大小為64×64×4×8Bit=16 kB(原圖大小512×512×3×8Bit=768 kB)。
然後再運用調色盤(Palette)和抖動(Dither),進一步使資料縮小到5kB,同時還提高了影象的還原度。
作為一位嚴謹的程式設計師,MB哥除了透過肉眼觀察,還對影象質量進行了資料分析。
不過,從影象質量評估的兩項重要指標PSNR(峰值信噪比)和SSIM(結構相似性)來看,Stable Diffusion的壓縮結果並沒有比JPG和WebP好到哪兒去。
另外,當把潛在表示重新解碼擴充套件到原圖解析度時,雖然影象的主要特徵仍然可見,但VAE也會將高解析度的特徵賦予這些畫素值。
用大白話講,就是重建的影象往往和原圖不一樣,裡面夾雜了不少新生成的“鬼畜”特徵。
讓我們再來回顧一下這張圖:
雖然用Stable Diffusion來壓縮圖確實還存在不少問題,但用MB哥的話來說,其效果還是很驚豔的,非常有發展前途。
現在MB哥已經把相關程式碼放到了Google Colab上,感興趣的朋友可以仔細看看~
傳送門
https://colab。research。google。com/drive/1Ci1VYHuFJK5eOX9TB0Mq4NsqkeDrMaaH?usp=sharing