首頁  >  文章  >  科技週邊  >  Stable Diffusion能超越JPEG等演算法,提高影像壓縮率並保持清晰度?

Stable Diffusion能超越JPEG等演算法,提高影像壓縮率並保持清晰度?

WBOY
WBOY轉載
2023-04-27 08:28:072081瀏覽

基於文字的影像生成模型火了,出圈的不只擴散模型,還有開源的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

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

以上是Stable Diffusion能超越JPEG等演算法,提高影像壓縮率並保持清晰度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除