美劇《硅谷》Pied Piper變爲現實:圖鴨發佈圖片壓縮TNG,節省55%帶寬

本文由 「AI前線」原創,原文連接: dwz.cn/7yzX0F
做者 | 圖鴨科技
編輯 | Vincent

AI 前線導讀:近年來,深度學習在計算機視覺領域已經佔據主導地位,不管是在圖像識別仍是超分辨重現上,深度學習已成爲圖片研究的重要技術;如今深度學習技術已進入圖片壓縮領域。以圖鴨科技最新研發的圖片壓縮——Tiny Network Graphics (TNG) 爲例,其以深度學習卷積神經網絡爲內核,在保持相同圖片質量的狀況下,其圖片大小僅爲 JPEG 的 45%。程序員


本文將和你們分享如何使用深度學習卷積神經網絡技術設計圖像壓縮算法。web

說到圖像壓縮算法,目前市面上影響力比較大的圖片壓縮技術是 WebP 和 BPG。算法

WebP:谷歌在 2010 年推出的一款能夠同時提供有損壓縮和無損壓縮的圖片文件格式,其以 VP8 爲編碼內核,在 2011 年 11 月開始能夠支持無損和透明色功能。目前 facebook、Ebay 等網站都已採用此圖片格式。網絡

BPG:知名程序員、ffmpeg 和 QEMU 等項目做者 Fabrice Bellard 推出的圖像格式,它以 HEVC 爲編碼內核,在相同體積下,BPG 文件大小隻有 JPEG 的一半。另外 BPG 還支持 8 位和 16 位通道等等。儘管 BPG 有很好的壓縮效果,可是 HEVC 的專利費很高,因此目前的市場使用比較少。框架

就壓縮效果來講,BPG 更優於 WebP,可是 BPG 採用的 HEVC 內核所帶來的專利費,致使其沒法在市場進行大範圍使用。在這種狀況下,運用深度學習來設計圖片壓縮算法就應運而生。函數

如何用深度學習技術設計圖片壓縮算法學習

經過深度學習技術設計壓縮算法的目的之一是設計一個比目前商用圖片壓縮更優的壓縮算法,同時藉助於深度學習技術還能夠設計更簡潔的端到端算法。在圖片、視頻壓縮領域,主要用到的深度學習技術是卷積神經網絡 (CNN)。如圖 1 所顯示,像搭積木同樣,一個卷積神經網絡由卷積、池化、非線性函數、歸一化層等模塊組成。最終的輸出根據應用而定,如在人臉識別領域,咱們能夠用它來提取一串數字(專業術語稱爲特徵)來表示一幅人臉圖片,而後經過比較特徵的異同進行人臉識別。測試

圖 1 卷積神經網絡示意圖大數據

用深度學習設計的圖片壓縮完整框架包括 CNN 編碼器、量化、反量化、CNN 解碼器、熵編碼、碼字估計、碼率 - 失真優化等幾個模塊。編碼器的做用是將圖片轉換爲壓縮特徵,解碼器就是從壓縮特徵恢復出原始圖片。其中編碼器和解碼器,能夠用卷積、池化、非線性等模塊進行設計和搭建。優化

(圖 2 用深度學習進行圖片壓縮示意圖)

如何評判壓縮算法

在深刻技術細節前,咱們先來了解一下如何評判壓縮算法。評判一個壓縮算法好壞的重要指標有三個:PSNR(Peak Signal to Noise Ratio)、BPP(bit per pixel)和 MS-SSIM(multi-scaleSSIM index)。咱們知道,任何數據在計算機內都是以比特形式存儲,所需比特數越多則佔據的存儲空間越大。PSNR 用來評估解碼後圖像恢復質量,BPP 用於表示圖像中每一個像素所佔據的比特數,MS-SSIM 值用來衡量圖片的主觀質量,簡單來講在同等的 Rate/BPP 下 PSNR 更高,恢復質量越好,MS-SSIM 更高,主觀感覺越好。

舉個例子,假設長寬爲 768×512 的圖片大小爲 1M,利用深度學習技術對它編碼,經過編碼網絡後產生包括 96×64×192 個數據單元的壓縮特徵數據,若是表示每一個數據單元平均須要消耗 1 個比特,則編碼整張圖須要 96×64×192 個比特。通過壓縮後,編碼每一個像素須要的比特數爲(96×64×192)/(768×512)=3,因此 BPP 值爲 3bit/pixel,壓縮比爲 24:3=8:1。這意味着一張 1M 的圖,經過壓縮後只須要消耗 0.125M 的空間,換句話說,以前只能放 1 張照片的空間,如今能夠放 8 張。

如何用深度學習作壓縮

談到如何用深度學習作壓縮,仍是用剛纔那個例子。將一張大小 768×512 的三通道圖片送入編碼網絡,進行前向處理後,會獲得佔據 96×64×192 個數據單元的壓縮特徵。有計算機基礎的讀者可能會想到,這個數據單元中可放一個浮點數、整形數、或者是二進制數。那到底應該放入什麼類型的數據?從圖像恢復角度和神經網絡原理來說,若是壓縮特徵數據都是浮點數,恢復圖像質量是最高的。但一個浮點數佔據 32 個比特位,按以前講的比特數計算公式爲(96×64×192×32)/(768×512)=96,壓縮後反而每一個像素佔據比特從 24 變到 96,非但沒有壓縮,反而增長了,這是一個糟糕的結果,很顯然浮點數不是好的選擇。

因此爲了設計靠譜的算法,咱們使用一種稱爲量化的技術,它的目的是將浮點數轉換爲整數或二進制數,最簡單的操做是去掉浮點數後面的小數,浮點數變成整數後只佔據 8 比特,則表示每一個像素要佔據 24 個比特位。與之對應,在解碼端,可使用反量化技術將變換後的特徵數據恢復成浮點數,如給整數加上一個隨機小數,這樣能夠必定程度上下降量化對神經網絡精度的影響,從而提升恢復圖像的質量。

即便壓縮特徵中每一個數據佔據 1 個比特位,但是 8:1 的壓縮比在咱們看來並非一個很理想的結果。那如何進一步優化算法?再看下 BPP 的計算公式。假設每一個壓縮特徵數據單元佔據 1 個比特,則公式可寫成:(96×64×192×1)/(768×512)=3,計算結果是 3 bit/pixel,從壓縮的目的來看,BPP 越小越好。在這個公式中,分母由圖像決定,能夠調整的部分在分子,分子中 9六、6四、192 這三個數字與網絡結構相關。很顯然,當咱們設計出更優的網絡結構,這三個數字就會變小。

那 1 與哪些模塊相關?1 表示每一個壓縮特徵數據單元平均佔據 1 個比特位,量化會影響這個數字,但它不是惟一的影響因素,它還與碼率控制和熵編碼有關。碼率控制的目的是在保證圖像恢復質量的前提下,讓壓縮特徵數據單元中的數據分佈儘量集中、出現數值範圍儘量小,這樣咱們就能夠經過熵編碼技術來進一步下降 1 這個數值,圖像壓縮率會進一步提高。

用深度學習作視頻壓縮,能夠看做是在深度學習圖片壓縮基礎上的擴展,可結合視頻序列幀間的光流等時空信息,在單張壓縮的基礎上,進一步下降碼率。

深度學習圖片壓縮的優點

圖鴨科技經過深度學習技術研發的圖片壓縮 TNG 在內部的測試上已經超過 webp 與 BPG,下圖是在 kodak24 標準數據集上測評結果, 分別是 PSNR 值與 MS-SSIM 值。

圖 3 圖 4 在 kodak24 標準數據集上測評結果,上圖爲 PSNR 結果,下圖爲 MS-SSIM 的結果

熟悉圖像壓縮的朋友能夠直接經過 PSNR 和 MS-SSIM 值看出:TNG 的 PSNR 值與 MS-SSIM 值明顯高於 WebP、jpeg2000 和 jpeg;且 TNG 在高碼字的狀況下 PSNR 值高於 BPG,且其 MS-SSIM 值基本一致高於 BPG。

  • 在低碼字狀況下 TNG 與 WebP 壓縮效果對比

圖 5 圖 6 低碼字狀況下 TNG 與 WebP 壓縮效果對比 圖 5 TNG,圖 6 webp

相比 TNG,WebP 儘管保留了更多的細節,可是其失真更多,不利於後期恢復。而 TNG 採用了保邊濾波的方法,讓其失真更少,總體圖像效果優於 WebP。

  • 在高碼字狀況下 TNG 與 BPG 對比

圖 7 圖 8 高碼字狀況下 TNG 與 BPG 壓縮效果對比,圖 7 TNG 圖 8 BPG

上面兩幅圖是高碼字的狀況,在實際的測試中,BPG 會出現上圖所示的顏色失真狀況;而反觀 TNG 其基本不會出現這類的失真情況。

這是由於 BPG 在編碼壓縮時儘管圖片時,其 YUV 通道是分開進行編解碼,產生了一些色差。

而 TNG 在編碼時考慮到了總體圖片的狀況,採用了同一編碼,也就避免了上述的狀況。

  • 在低碼字的狀況下 TNG 與 BPG 的對比

圖 9 圖 10 低碼字狀況下 TNG 與 BPG 壓縮效果對比,圖 9 TNG 圖 10 BPG

在低碼字的狀況下,BPG 壓縮圖片中出現了僞輪廓和塊效應等問題,整個圖片的連續性比較差;而 TNG 的圖片連續性和物體的輪廓保持的更好。

圖片壓縮的使用領域能夠說的極其普遍了,從社交應用、新聞客戶端到遊戲等領域,能夠說有圖片的地方就有圖片壓縮功能。使用更先進的圖片壓縮技術,能夠幫助大量使用圖片的企業節省大量圖片帶寬成本,且能幫助用戶節省圖片流量,減小加載圖片所需時間。

總結

整體而言,藉助於深度學習設計圖像壓縮算法是一項很是具備前景但也很是具備挑戰性的技術。深度學習技術圖片壓縮可使你們在全面高清屏的時代有更優質的視覺體驗,同時在遊戲、空間圖像傳感等領域,深度學習圖片壓縮技術能夠幫助圖片達到更高分辨率,更小存儲空間,從而爲用戶提供更好的視覺體驗。

這裏附上 TNG 的測試連接:

www.tucodec.com/picture/ind…

你們能夠自行進行測試(建議在 PC 端進行測試),測試完成後能夠下載壓縮後圖片和二進制文件,下載安裝解碼器後也能夠對已經壓縮的圖片進行恢復處理。

更多幹貨內容,可關注AI前線,ID:ai-front,後臺回覆「AI」、「TF」、「大數據」可得到《AI前線》系列PDF迷你書和技能圖譜。

相關文章
相關標籤/搜索