本文由 「AI前線」原創,原文連結:dwz.cn/7yzX0F
作者 | 圖鴨科技
編輯 | Vincent
AI 前線導讀:近年來,深度學習在計算機視覺領域已經佔據主導地位,不論是在影象識別還是超分辨重現上,深度學習已成為圖片研究的重要技術;現在深度學習技術已進入圖片壓縮領域。以圖鴨科技最新研發的圖片壓縮——Tiny Network Graphics (TNG) 為例,其以深度學習卷積神經網路為核心,在保持相同圖片質量的情況下,其圖片大小僅為 JPEG 的 45%。
本文將和大家分享如何使用深度學習卷積神經網路技術設計影象壓縮演算法。
說到影象壓縮演算法,目前市面上影響力比較大的圖片壓縮技術是 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 越小越好。在這個公式中,分母由影象決定,可以調整的部分在分子,分子中 96、64、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 的測試連結:
大家可以自行進行測試(建議在 PC 端進行測試),測試完成後可以下載壓縮後圖片和二進位制檔案,下載安裝解碼器後也可以對已經壓縮的圖片進行恢復處理。
更多幹貨內容,可關注AI前線,ID:ai-front,後臺回覆「AI」、「TF」、「大資料」可獲得《AI前線》系列PDF迷你書和技能圖譜。