深度學習之圖片壓縮技術 頂 原

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

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

 

當前主要圖片壓縮算法

 

說到圖像壓縮算法,目前市面上影響力比較大的圖片壓縮技術是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 值。

圖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的測試鏈接:http://www.tucodec.com/picture/index大家可以自行進行測試(建議在PC端進行測試)。感興趣的朋友也可以在測試完後,下載壓縮後圖片和二進制文件,下載安裝解碼器,來進行壓縮圖片的恢復處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章