深度學習之圖片壓縮技術

圖鴨科技發表於2018-03-01

近年來,深度學習在計算機視覺領域已經佔據主導地位,不論是在影象識別還是超分辨重現上,深度學習已成為圖片研究的重要技術;現在深度學習技術已進入圖片壓縮領域。

本文將和大家分享如何使用深度學習卷積神經網路技術設計影象壓縮演算法。

當前主要圖片壓縮演算法

說到影象壓縮演算法,目前市面上影響力比較大的圖片壓縮技術是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卷積神經網路示意圖

(來源http://blog.csdn.net/hjimce/article/details/47323463)

用深度學習設計的圖片壓縮

完整的深度學習圖片壓縮框架包括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 值為 3 bit/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 值。深度學習之圖片壓縮技術深度學習之圖片壓縮技術

深度學習之圖片壓縮技術

深度學習之圖片壓縮技術

34kodak24標準資料集上測評結果,上圖為 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的測試連結:http://www.tucodec.com/picture/index大家可以自行進行測試(建議在PC端進行測試)。感興趣的朋友也可以在測試完後,下載壓縮後圖片和二進位制檔案,下載安裝解碼器,來進行壓縮圖片的恢復處理。


相關文章