Stable Diffusion是最近在圖像生成領(lǐng)域大火的模型,在對(duì)他研究的時(shí)候我發(fā)現(xiàn)它可以作為非常強(qiáng)大的有損圖像壓縮編解碼器。在介紹之前,我們先看看它與高壓縮率下的JPG和WebP相比的而結(jié)果,所有都是512x512像素的分辨率為單位:
上面這圖的細(xì)節(jié)如下:
這是JPG壓縮結(jié)果大小為5.66kB
這是WebP ,大小為6.74kB:
最后是Stable Diffusion 大小4.97kB
還有一些其他示例,請(qǐng)參考我們最后提供的源代碼地址
這些示例非常明顯,與JPG和WebP相比,用Stable Diffusion壓縮這些圖像在較小的文件尺寸下會(huì)產(chǎn)生極好的圖像質(zhì)量。這么看來這是一種非常有前途的有損圖像壓縮的選擇,但是Stable Diffusion還會(huì)帶來一些問題,我們?cè)诤竺娼榻B。
Stable Diffusion的潛在空間
Stable Diffusion使用三個(gè)常用的神經(jīng)網(wǎng)絡(luò)進(jìn)行組合:
1、VAE
2、U-net
3、文本編碼器
Variational Auto Encoder(VAE)編碼和解碼器將圖像轉(zhuǎn)換為一些潛在空間表示。
VAE如何將圖像編碼到這個(gè)潛在空間中呢,它在訓(xùn)練過程中自行學(xué)習(xí),隨著模型的進(jìn)一步訓(xùn)練,模型的不同版本的潛在空間表示可能會(huì)有所不同,但是Stable Diffusion v1.4的表示形式看起來像這樣(重新映射為4通道顏色圖像):
在重新縮放和解釋潛在的顏色值(帶有alpha通道)后,圖像的主要特征仍然是肉眼可見,VAE將較高的分辨率特征編碼到這些像素值中。一個(gè)vae的編碼/解碼的過程如下:
左:512x512@24bpp的真實(shí)圖像,中:64x64@128bpp的潛在空間,右:潛在空間解碼生成的512x512@24bpp圖像
通過潛在空間還原的過程并不是無損的。可以看到解碼后,我們的羊駝?lì)^上藍(lán)色帶子包含的名字就不太清晰了。這是因?yàn)镾table Diffusion v1.4的VAE通常不太擅長(zhǎng)表示小文本以及人臉。
而我們知道Stable Diffusion的主要算法從短文本描述中生成新圖像,它從潛在空間表示中的隨機(jī)噪聲開始,然后通過使用訓(xùn)練過的U-Net對(duì)潛在空間圖像進(jìn)行迭代去噪,簡(jiǎn)單地說,U-Net輸出它認(rèn)為在噪聲中“看到”的東西的預(yù)測(cè)。當(dāng)生成圖像時(shí),這個(gè)迭代的去噪步驟由第三個(gè)ML模型(文本編碼器)進(jìn)行指導(dǎo),該模型向U-Net提供關(guān)于它應(yīng)該在噪聲中嘗試看到什么內(nèi)容的信息。所以對(duì)于我們這個(gè)壓縮的方案來說,不需要文本編碼器,也就是希望沒有文本來進(jìn)行引導(dǎo)。所以我們這里只創(chuàng)建一個(gè)空字符串的一次性編碼,這樣相當(dāng)于是告訴U-Net在圖像重建期間進(jìn)行無引導(dǎo)去噪。
壓縮方法
為了使用Stable Diffusion作為圖像壓縮編解碼器,我們還需要研究了如何有效地壓縮由VAE生成的潛在表示。在這個(gè)實(shí)驗(yàn)中,進(jìn)行下采樣或者應(yīng)用現(xiàn)有的有損圖像壓縮方法都會(huì)大大降低重構(gòu)圖像的質(zhì)量。但是我發(fā)現(xiàn)VAE的解碼似乎對(duì)潛在的量化非常穩(wěn)健。
對(duì)潛在空間進(jìn)行從浮點(diǎn)到8位無符號(hào)整數(shù)的量化,通過scaling,clamping,然后remapping ,只有非常小的可見重構(gòu)誤差:
為了量化由VAE生成的空間,我首先將它們按1 / 0.18215進(jìn)行縮放,這個(gè)數(shù)字是在Stable Diffusion源代碼中出現(xiàn)的。用這個(gè)數(shù)字可以很好地映射到[- 1,1]的范圍。
通過將潛在項(xiàng)量化到8位,圖像表示的數(shù)據(jù)大小現(xiàn)在是646448位= 16 kB(真實(shí)圖像為51251238位= 768 kB)
將潛在對(duì)象量化到8位以下并沒有產(chǎn)生好的結(jié)果,但通過重整色調(diào)和抖動(dòng)來進(jìn)一步量化它們卻出乎意料地好。使用256個(gè)48位向量和Floyd-Steinberg抖動(dòng)的潛在色調(diào)創(chuàng)建了一個(gè)色調(diào)表示。使用256的色調(diào)用單個(gè)8位索引表示每個(gè)潛在向量,使數(shù)據(jù)大小達(dá)到64648+2564*8位= 5 kB。
色調(diào)的抖動(dòng)會(huì)引入了噪聲使解碼結(jié)果失真。但由于擴(kuò)散模型是基于潛波的去噪,所以可以使用U-Net來去除抖動(dòng)帶來的噪聲。經(jīng)過4次迭代,重構(gòu)結(jié)果在視覺上非常接近于未量化的版本:
左:抖動(dòng)后,中:4個(gè)去噪步驟,右:真實(shí)圖像
數(shù)據(jù)大小的極大減少了(壓縮系數(shù)為155倍),結(jié)果非常好,但是我們也看到心臟符號(hào)上新增了光澤陰影,這是在壓縮之前不存在。這種壓縮方案會(huì)引入新的內(nèi)容從而影響圖像表示而不是圖像質(zhì)量,這也說明擴(kuò)散模型是在創(chuàng)造而不僅僅是還原。
結(jié)果評(píng)估
為了評(píng)估此壓縮編解碼器,所以沒有使用任何公開的圖像,這樣以確保圖像不會(huì)包含在擴(kuò)散模型的訓(xùn)練集中(這樣的圖像可能會(huì)獲得不公平的壓縮優(yōu)勢(shì),因?yàn)樗鼈兊囊徊糠謹(jǐn)?shù)據(jù)可能已經(jīng)在訓(xùn)練時(shí)出現(xiàn)了)。為了使比較盡可能公平,使用了Python圖像庫的JPG和WebP壓縮的最高質(zhì)量設(shè)置,并且還使用MozJPEG庫對(duì)壓縮JPG數(shù)據(jù)進(jìn)行了無損壓縮。
雖然看起來Stable Diffusion結(jié)果比JPG和WebP壓縮圖像好得多,但就標(biāo)準(zhǔn)測(cè)量指標(biāo)(如PSNR或SSIM)而言,它們并沒有明顯好(但也沒更差)。這可能是因?yàn)镾table Diffusion創(chuàng)造了一些不太引人注意的新的內(nèi)容,這些內(nèi)容不會(huì)會(huì)影響圖像評(píng)分,但是對(duì)人類而言感覺卻變好了,例如重構(gòu)內(nèi)容可能會(huì)受到新生成內(nèi)容的影響,即使它看起來非常清晰(原圖沒有,但是還原圖被生成出來的一些細(xì)節(jié)欺騙了)。例如這張舊金山測(cè)試圖像中的一個(gè)細(xì)節(jié):
左:JPG壓縮圖,中:真實(shí)圖片 -右:Stable Diffusion壓縮
可以非常清晰的看到,建筑物的形狀的改變。
一些限制
有些特征目前并沒有被保留得很好;特別是小文本和(參考 Stable Diffusion v1.4的Limitations and Biases節(jié))。下面是一個(gè)簡(jiǎn)單的例子
這是真實(shí)圖像:
vae潛在空間 32bit
8bit的解碼和去噪
可以非常清晰的看到當(dāng)前的Stable Diffusion1.4模型在潛在空間中不能很好地保存小的文本,所以這個(gè)壓縮方案也有這些限制。但是據(jù)說從1.5以后似乎在人臉處理方面做得更好,期待stability.ai盡快發(fā)布更好的版本。
這種方法與基于ml的圖像恢復(fù)有何不同?
深度學(xué)習(xí)非常成功地用于恢復(fù)降級(jí)的圖像和視頻或?qū)⑵涮岣叩礁叩姆直媛?。這種方法與恢復(fù)圖像壓縮的圖像有何不同?
這里重要的區(qū)別是是要理解Stable Diffusion不是用來恢復(fù)由于壓縮而降級(jí)的圖像。它是將有損的壓縮應(yīng)用于對(duì)圖像的內(nèi)部理解,然后試圖“修復(fù)”有損壓縮對(duì)內(nèi)部表示造成的損害(這與修復(fù)降級(jí)圖像不同)。
例如,傳統(tǒng)的圖像恢復(fù)保留相機(jī)紋理(定性)以及任何其他定性退化,而AI恢復(fù)一個(gè)高度壓縮的jpg將無法恢復(fù)相機(jī)紋理,因?yàn)槿魏侮P(guān)于它的信息已經(jīng)從數(shù)據(jù)中丟失了。
一下這個(gè)比喻可能會(huì)更恰當(dāng)一點(diǎn):
假設(shè)我們有一個(gè)擁有過目不忘的高技能藝術(shù)家。我們給他們看一張圖像,然后讓他們重新創(chuàng)造它,藝術(shù)家可以根據(jù)自己的記憶創(chuàng)造一個(gè)近乎完美的副本。這位藝術(shù)家的攝影記憶就是是Stable Diffusion中VAE的潛在空間。
而傳統(tǒng)的圖像恢復(fù),我們會(huì)給這位藝術(shù)家看一張被圖像壓縮后嚴(yán)重降級(jí)的圖像,然后讓他們根據(jù)記憶重建這張圖像。
然對(duì)于我們的量化操作,可以認(rèn)為是我們向藝術(shù)家展示原始的、未壓縮的圖像并要求他們盡可能地記住它。然后我們對(duì)藝術(shù)家進(jìn)行腦部手術(shù),通過對(duì)其進(jìn)行一些有損壓縮來縮小他們記憶中的數(shù)據(jù)(量化或者上面提到的壓縮),這種壓縮去除了看起來不重要的細(xì)微差別,并用相同的變化替換了記憶圖像中非常非常相似的概念和方面的變化。
手術(shù)后,我們還是要求藝術(shù)家根據(jù)自己的記憶,創(chuàng)造一個(gè)完美的圖像重建。他們?nèi)匀粫?huì)記住圖像的所有重要方面,例如,從內(nèi)容到相機(jī)紋理的定性屬性,以及他們看到的每座建筑的位置和大致外觀,雖然可能每個(gè)點(diǎn)的確切位置不再相同,并且在他們記憶中還有一些奇怪的缺失,但是這些小的缺失對(duì)于整理來說影響并不大。
最后,藝術(shù)家通過這些手術(shù)后的記憶(壓縮后)來從新繪畫,細(xì)節(jié)變少了也就是被壓縮了,但是整體來說還是不變的。
所以在這種情況下,藝術(shù)家被要求根據(jù)他們的記憶和經(jīng)驗(yàn)畫出他們認(rèn)為應(yīng)該是什么樣子的東西,但由于這里的壓縮應(yīng)用于他們對(duì)圖像的記憶表示,圖像的視覺質(zhì)量和概念內(nèi)容都已降低,所以在某些部分可能是因?yàn)槠渌洃洰a(chǎn)生的所以藝術(shù)家會(huì)在圖畫中發(fā)明創(chuàng)造一些新的東西。這也就是我們剛才說到的創(chuàng)造。
總結(jié)
作為有損圖像壓縮方案,Stable Diffusion似乎非常有前途。我們可以通過更多的實(shí)驗(yàn)來完整這個(gè)方案并且還可以專門設(shè)計(jì)和訓(xùn)練用于圖像壓縮的VAE,或者其他更好的方法都是我們?cè)谖磥硌芯康姆较?,如果你感興趣,請(qǐng)看看下本文的源代碼并加以改進(jìn)。
https://avoid.overfit.cn/post/3b8ce036928f431d93061e5a307f8067文章來源:http://www.zghlxwxcb.cn/news/detail-530060.html
作者:Matthias Bühlmann文章來源地址http://www.zghlxwxcb.cn/news/detail-530060.html
到了這里,關(guān)于基于擴(kuò)散模型的圖像壓縮:創(chuàng)建基于Stable Diffusion的有損壓縮編解碼器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!