天天看點

Stable Diffsuion能壓縮圖像?壓縮率更高,清晰度超越JPEG等算法

作者:新智元

編輯:LRS

【新智元導讀】Stable Diffusion除了生成圖像外,還能用來壓縮圖像!

基于文本的圖像生成模型火了,出圈的不止有擴散模型,還有開源的Stable Diffusion模型。

Stable Diffsuion能壓縮圖像?壓縮率更高,清晰度超越JPEG等算法

最近一位瑞士的軟體工程師Matthias Bühlmann無意間發現,Stable Diffusion不僅能用來生成圖像,還可以用來壓縮位圖圖像,甚至比JPEG和WebP的壓縮率更高。

比如一張美洲駱駝的照片,原圖為768KB,使用JPEG壓縮到5.66KB,而Stable Diffusion可以進一步壓縮到4.98KB,而且能夠保留更多高分辨率的細節以及更少的壓縮僞影,肉眼可見地優于其他壓縮算法。

Stable Diffsuion能壓縮圖像?壓縮率更高,清晰度超越JPEG等算法

不過這種壓縮方式也存在缺陷,即不适合壓縮人臉和文本圖像,在某些情況下,甚至會生成一些原圖并不存在内容。

Stable Diffsuion能壓縮圖像?壓縮率更高,清晰度超越JPEG等算法

雖然重新訓練一個自編碼器也能做到類似于Stable Diffusion的壓縮效果,但使用Stable Diffusion的一個主要優勢在于,有人已經投入了上百萬的資金幫你訓練了一個,你又何必重新花錢訓練一個壓縮模型呢?

Stable Diffusion如何壓縮圖像

擴散模型正在挑戰生成模型的霸主地位,對應的開源Stable Diffusion模型也在機器學習社群掀起一場藝術革命。

Stable Diffsuion能壓縮圖像?壓縮率更高,清晰度超越JPEG等算法

Stable Diffusion由三個訓練後的神經網絡串聯得到,即一個變分自編碼器(VAE),U-Net模型和一個文本編碼器。

Stable Diffsuion能壓縮圖像?壓縮率更高,清晰度超越JPEG等算法

變分自編碼器對圖像空間中的圖像進行編碼和解碼,進而獲得該圖像在潛空間的表征向量,以一個分辨率更低(64x64)具有更高精度(4x32bit)的向量來表示源圖像(3x8或4x8bit的512x512)。

VAE在将圖像編碼到潛空間的訓練過程主要依賴自監督學習,即輸入和輸出都是源圖像,是以随着模型進一步訓練,不同版本的模型的潛空間表征可能會看起來不同。

使用Stable Diffusion v1.4的潛空間表征通過重新映射和解釋為4通道彩色圖像後,看起來就是下圖的中間圖像,源圖像中的主要特征仍然可見。

Stable Diffsuion能壓縮圖像?壓縮率更高,清晰度超越JPEG等算法

需要注意的是,VAE往返編碼一次并不是無損的。

比如在解碼之後,藍色帶子上的ANNA名字就沒有源圖像那麼清晰了,可讀性顯著降低。

Stable Diffusion v1.4中的變分自編碼器不太擅長表示小文本以及人臉圖像,不知道在v1.5版本中是否會改善。

Stable Diffusion的主要壓縮算法就是利用圖像的這種潛空間表征,從短文本描述中生成新的圖像。

從潛空間表征的随機噪聲開始,使用充分訓練的U-Net疊代去除潛空間圖像的噪聲,用一種更簡單的表征輸出模型認為它在這個噪聲中「看到」的預測,有點像我們在看雲的時候,從不規則的圖形中還原出腦海裡的形狀或面孔。

當使用Stable Diffusion來生成圖像時,這個疊代去噪步驟是由第三個元件,即文本編碼器引導的,該編碼器為U-Net提供關于它應該嘗試在噪聲中看到什麼的資訊。

不過對于壓縮任務來說,并不需要文本編碼器,是以實驗過程隻建立了一個空字元串的編碼用于告訴U-Net在圖像重建過程中進行非引導去噪。

為了使用Stable Diffusion作為圖像壓縮編解碼器,算法需要有效地壓縮由VAE産生的潛表征。

在實驗中可以發現,對潛表征進行下采樣或者直接使用現有的有損圖像壓縮方法,都會大大降低重建圖像的品質。

但作者發現 VAE 的解碼似乎對潛表征的量化(quantization)非常有效。

通過對從浮點到8位無符号整數的潛量化進行縮放、拖拽(clamping)和重新映射,隻會産生很小的可見重構錯誤。

Stable Diffsuion能壓縮圖像?壓縮率更高,清晰度超越JPEG等算法

通過量化8位的潛表征,圖像表示的資料大小現在是64*64*4*8bit=16kB ,遠小于未壓縮源圖像的512*512*3*8bit=768kB

如果潛表征的位數小于8bit,無法産生比較好的效果。

如果對圖像進一步執行調色闆(palettizing)和抖動(dithering),則量化效果就會再次提升。

使用256*4*8位向量和Floyd-Steinberg抖動的潛表征建立了一個調色闆表示,使資料大小進一步壓縮到64*64*8+256*4*8bit=5kB

Stable Diffsuion能壓縮圖像?壓縮率更高,清晰度超越JPEG等算法

潛空間調色闆的抖動會引入噪聲,進而扭曲了解碼結果。但由于Stable Diffusion是基于潛噪聲的去除,是以可以使用U-Net去除抖動引起的噪聲。

經過4次疊代,重建結果在視覺上非常接近未量化的版本。

Stable Diffsuion能壓縮圖像?壓縮率更高,清晰度超越JPEG等算法

雖然資料量大大減少了(源圖像為壓縮圖像的155倍大),但效果是非常好的,不過也引入了一些僞影(比如原圖的心形圖案中不存在僞影)。

有趣的是,這種壓縮方案引入的僞影對圖像内容的影響比對圖像品質的影響更大,而且以這種方式壓縮的圖像可能包含這些類型的壓縮僞影。

作者還用zlib對調色闆和索引進行了無損壓縮,在測試樣本中,大多數的壓縮結果都小于5kb,但這種壓縮方法仍然存在更多的優化空間。

為了評估該壓縮編解碼器,作者沒有使用任何在網上找到的标準測試圖像,因為網上的圖像都有可能在Stable Diffusion的訓練集中出現過,而壓縮這類圖像可能會導緻不公平的對比優勢。

為了盡可能公平地進行比較,作者使用了Python圖像庫中最高品質的編碼器設定,以及使用mozjpeg庫添加了壓縮後的JPG資料的無損資料壓縮。

值得注意的是,雖然Stable Diffusion的結果主觀上看起來比JPG和WebP壓縮的圖像要好得多,但在标準測量名額(如PSNR或SSIM)方面,它們并沒有明顯更好,但也沒有更差。

隻是引入的僞影類型不那麼明顯,因為它們對圖像内容的影響大于對圖像品質的影響。

這種壓縮方法也有一點危險,雖然重建特征的品質很高,但内容可能會受到壓縮僞影的影響,即使它看起來非常清晰。

例如,在一張測試圖像中,雖然Stable Diffusion作為編解碼器在保持圖像的品質方面要好得多,甚至連相機顆粒紋理(camera grain)都能保留下來(這是大多數傳統壓縮算法難以做到的) ,但其内容仍然受到壓縮僞影的影響,像建築物形狀這樣的精細特征可能會發生變化。

Stable Diffsuion能壓縮圖像?壓縮率更高,清晰度超越JPEG等算法

雖然在JPG壓縮圖像中當然不可能比在Stable Diffusion壓縮圖像中識别出更多的真實值,但是Stable Diffusion壓縮結果的高視覺品質可能具有欺騙性,因為JPG和WebP中的壓縮僞影更容易識别。

如果你也想動手複現一遍實驗,作者在Colab上開源了代碼。

Stable Diffsuion能壓縮圖像?壓縮率更高,清晰度超越JPEG等算法

代碼連結:https://colab.research.google.com/drive/1Ci1VYHuFJK5eOX9TB0Mq4NsqkeDrMaaH?usp=sharing

最後,作者表示,文章中設計的實驗仍然是相當淺顯的,但效果仍然令人驚喜,未來仍然有很大的改進空間。

參考資料:

https://arstechnica.com/information-technology/2022/09/better-than-jpeg-researcher-discovers-that-stable-diffusion-can-compress-images/