把文生圖 AI 反過來用,不就能壓縮圖片了嗎。
每當(dāng)在網(wǎng)上看到有趣的表情包、梗圖時,不少人都會在心中暗暗念叨一句:“你的圖很好,不過現(xiàn)在它是我的了?!?/p>
但當(dāng)人們把“盜”下來的圖再次傳到其他帖子中時,網(wǎng)絡(luò)平臺往往會再次壓縮圖片,節(jié)省儲存空間和網(wǎng)絡(luò)帶寬。如果一個圖被“盜”的次數(shù)太多,就會被重復(fù)壓縮多次。每次壓縮,圖片畫質(zhì)就會下降一點,變得更“糊”一點 —— 甚至還會變綠、變暗一點。被“盜”過很多遍的圖會變綠甚至已經(jīng)變成了一個梗,甚至催生了一系列渣畫質(zhì)的表情包。原因大概是:如果一個圖很有趣,就會被更多人保存,就會被壓縮更多次,畫質(zhì)也就越差;反過來,如果一個圖片畫質(zhì)很差,那大概也就說明它很受歡迎。
這有點像一件受歡迎的古玩,在長久歲月中被無數(shù)人細(xì)細(xì)把玩,最終在表面形成了一層有光澤的“包漿”。渣畫質(zhì)、整體偏綠的顏色已經(jīng)成為了網(wǎng)絡(luò)時代的“電子包漿”、“賽博包漿”。甚至還有人看到那些高畫質(zhì)的好圖,總覺得它沒有經(jīng)過“歲月的洗禮”,心中感慨:“干干巴巴的,麻麻賴賴的,一點兒都不圓潤。盤它!”于是,電子包漿模擬器誕生了。
圖片為何變綠
圖片變綠其實是安卓操作系統(tǒng)核心代碼的一個 bug。安卓系統(tǒng)給開發(fā)者提供了一個圖像壓縮接口,可以讓開發(fā)者方便地壓縮 JPEG 圖片(也就是 jpg 圖片)。但這個接口的底層實現(xiàn)算法為了加速壓縮計算過程,在色彩模式轉(zhuǎn)換的過程中出了一個 bug。
我們在手機(jī)屏幕上看到的圖片都存儲著 RGB 信息(Red 紅、Green 綠、Blue 藍(lán)),它能告訴屏幕上每個紅綠藍(lán)子像素應(yīng)該以何等亮度發(fā)光,從而在屏幕上顯示出圖片的樣貌。但在圖像處理過程中,一般需要 RGB 信息轉(zhuǎn)換成 YUV 信息(亮度、藍(lán)色濃度偏移量、紅色濃度偏移量)。因為人眼對 Y 代表的亮度信息更為敏感,算法可以著重壓縮 UV 信息。這樣就能在人眼感知差別不大的情況下,盡可能減小圖片所占的存儲空間。
一般而言,從 RGB 色彩模式轉(zhuǎn)換到 YUV 色彩模式是輕微有損的,但損失較小,并不至于讓圖片朝著變綠的方向一路狂奔。但是開發(fā)者為了加速這個轉(zhuǎn)換計算過程,不當(dāng)?shù)厥褂昧宋贿\(yùn)算,導(dǎo)致數(shù)據(jù)在從 RGB 向 YUV 轉(zhuǎn)換時會向下取。所以在重復(fù)壓縮過程時,Y、U、V 三個值就會不斷減小,亮度 Y 值減小會讓圖片不斷變暗,而 UV 不斷減小,會讓色彩不斷向綠色的方向偏移(見下圖)。所以,經(jīng)過多次壓縮的圖片會變綠、變暗。
這個問題在 2016 年 4 月中旬就被修復(fù)了,按照安卓系統(tǒng)的發(fā)行時間來看,從 2016 年 8 月 22 日安卓 7 系統(tǒng)發(fā)布,這個問題才算解除。(不過考慮到手機(jī)廠商對安卓系統(tǒng)的跟進(jìn)大多存在延遲,這個問題解決的時間就更晚了。)所以說,圖片變綠的問題,只有在幾年前的安卓系統(tǒng)上使用 JPEG 圖片時才會產(chǎn)生。
新的圖片壓縮算法
雖然有人喜歡圖片變綠變暗的“電子包漿”,覺得這樣的圖片更有“味道”。但開發(fā)者肯定還需要結(jié)果正確、不會變綠的圖片壓縮算法。除了修復(fù)安卓圖片壓縮接口的 bug 外,又有不少高效的圖片格式被開發(fā)了出來。比如谷歌開發(fā)的 WebP 格式,蘋果推廣的 HEIC 格式,都采用了比較先進(jìn)的圖片壓縮算法。和傳統(tǒng)的 JPEG 格式相比,這兩種格式在觀看效果更好的同時,占用的空間還更小。
而最近,根據(jù)文字生成圖像的 AI 火了起來。這些 AI 算法大多基于擴(kuò)散模型,可以在經(jīng)過大量文字、圖像的訓(xùn)練后,從用戶輸入的文字生成一張圖片。雖然圖片的細(xì)節(jié)還不算完美,但可以日夜無休生成圖片的 AI 還是讓人看到了巨大的潛力。甚至有人感嘆,這樣發(fā)展下去,畫師恐怕要失業(yè)了。
這種 AI 將來能發(fā)展到什么程度我們先按下不表,倒是有一名瑞士開發(fā)者 Matthias Bühlmann 動起了“歪腦筋”—— 它能否用于圖片壓縮呢?
人工智能壓縮
Matthias Bühlmann 選擇了免費(fèi)開源的文生圖 AI:Stable Diffusion。它主要由三個模塊構(gòu)成:變分自編碼器(Variational Auto Encoder,VAE)、U-Net 和文字編碼器。
壓縮圖片時不需要文字輸入,所以 Matthias Bühlmann 舍棄了文字編碼器;而 VAE 則可以將圖片編碼到潛在空間表征(latent space representation)。在潛在空間表征下,圖片分辨率變低了(從 512×512 到 64×64),但是色彩精度卻提高了(從 8 位提升到 32 位)。
VAE 還能將潛在空間表征的圖片再解碼回圖片原來的樣子。就算在潛在空間表征上再次對圖片進(jìn)行壓縮,VAE 也能將圖片大致還原成本來的樣子。最終,Matthias Bühlmann 將一張未經(jīng)壓縮的 768kB 的圖片壓縮到了 5kB。肉眼看過去,同樣是把圖片壓縮到這個大小,JPEG 和 WebP 的壓縮損失就很明顯了。
AI 電子包漿
當(dāng)然,但這種壓縮算法并不是完美的。雖然這種圖片壓縮算法能騙過人眼,但在客觀評價圖片質(zhì)量的兩個參數(shù) PSNR 和 SSIM 上,它相對 JPG 和 WebP 并沒有明顯的優(yōu)勢。
說到底,這種圖像壓縮算法還是讓 AI 根據(jù)一個壓縮過的縮略圖去“猜”它的原圖長什么樣子,還原出的圖片在一些細(xì)節(jié)上難免和原圖不一致,這反而造就了一種新的“電子包漿”。Matthias Bühlmann 就發(fā)現(xiàn),這種圖像壓縮算法在處理人臉、文字時,可能在人臉上生成詭異(甚至有時還有點“克蘇魯”)的效果,VAE 重建的文字也幾乎難以辨認(rèn)。也就是說,和以前的壓縮算法會讓圖片產(chǎn)生綠色的“電子包漿”,而新時代 AI 壓縮算法會讓人臉和文字產(chǎn)生詭異的“電子包漿”。
AI 的復(fù)雜性也讓這種圖像壓縮算法難以推廣。傳統(tǒng)圖像壓縮算法是一套固定的算法,可以用輕量化的程序?qū)崿F(xiàn)。而 AI 則以計算量龐大著稱,這種 AI 圖像壓縮算法需要足足 4GB 的空間存儲參數(shù)文件,并且解碼時間也比其他壓縮算法更長。
所以說,目前這種圖像壓縮算法并不值得推廣,就算推廣了,它也并不能完美解決“電子包漿”的問題,反而卻會因為 AI 的特性,產(chǎn)生人類難以想象的、全新的、詭異的“電子包漿”。
不過,現(xiàn)在最流行的電子包漿并不是整體偏綠偏暗的顏色,而是層層疊疊難以去除的水印……
參考鏈接:
https://pub.towardsai.net/stable-diffusion-based-image-compresssion-6f1f0a399202
https://arstechnica.com/information-technology/2022/09/better-than-jpeg-researcher-discovers-that-stable-diffusion-can-compress-images/
https://magiconch.com/patina/
https://www.zhihu.com/question/29355920/answer/119088684
https://github.com/google/skia/commit/c7d01d3e1d3621907c27b283fb7f8b6e177c629d
https://en.wikipedia.org/wiki/YUV
https://developers.google.com/speed/webp
本文來自微信公眾號:環(huán)球科學(xué) (ID:huanqiukexue),撰文:王昱,審校:栗子
廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。