深度學習影象視訊壓縮技術

圖鴨科技發表於2017-12-06

寫在文章前面,剛剛發現有很多小夥伴收藏轉發了我們的圖片簡史,所以我就又來了,今天給大家帶來的是辦公室另一位大牛寫的關於圖片壓縮和深度學習的文章。希望大家喜歡哈~

說到影象壓縮演算法,最典型的有JPEG、JPEG2000等。

深度學習影象視訊壓縮技術
JPEG壓縮與JPEG2000壓縮對比

而其中JPEG 採用的是以離散餘弦轉換(Discrete Cosine Transform) 為主的區塊編碼方式(如圖2)。JPEG2000改用以小波轉換(Wavelet Transform) 為主的多解析編碼方式。小波轉換的主要目的是將影象的頻率成分抽取出來。

深度學習影象視訊壓縮技術
圖2JPEG編碼框圖

在有失真壓縮下,JPEG2000一個比較明顯的優點是沒有JPEG壓縮中的馬賽克失真效果。JPEG2000的失真主要是模糊失真。模糊失真產生的主要原因是高頻量在編碼過程中一定程度的衰減。在低壓縮比情形下(比如壓縮比小於10:1),傳統的JPEG影象質量有可能比JPEG2000好。JPEG2000在高壓縮比的情形下,優勢才開始明顯。

整體來說,和傳統的JPEG相比,JPEG2000仍然有很大的技術優勢,通常壓縮效能大概可以提高20%以上。一般在壓縮比達到100:1的情形下,採用JPEG壓縮的影象已經嚴重失真並開始難以識別了,但JPEG2000的影象仍可識別。

深度學習技術設計壓縮演算法的目的

用深度學習技術設計壓縮演算法的一個目的是學習一個比離散餘弦變換或小波變換更優的變換,同時用深度學習技術也可以設計更簡潔的端到端演算法,這樣可以設計出比JPEG2000等商用演算法效能更優的演算法。

在圖片或視訊壓縮領域,使用最多的深度學習技術是卷積神經網路(CNN),先簡單介紹卷積神經網路。如圖3所顯示,像搭積木一樣,一個卷積神經網路可以由卷積、池化、非線性函式、歸一化層等模組組成。最終的輸出根據應用而定,如在人臉識別領域,我們可以用它來提取一串數字(專業術語稱為特徵)來對一幅人臉圖片進行表示。然後可以通過比較特徵的異同,來進行人臉識別。

深度學習影象視訊壓縮技術
圖3卷積神經網路示意圖 (來源http://blog.csdn.net/hjimce/article/details/47323463)

那如何利用卷積神經網路做壓縮?如圖4所示,完整的框架包括CNN編碼網路、量化、反量化、CNN解碼、熵編碼等幾個模組。編碼網路的作用是將圖片轉換為壓縮特徵,解碼網路就是從壓縮特徵恢復出原始圖片。其中編碼網路和解碼網路,可以用卷積、池化、非線性等模組進行設計和搭建。

深度學習影象視訊壓縮技術
圖4用深度學習進行圖片壓縮示意圖

如何評判壓縮演算法

在深入技術細節前,我們先來了解一下如何評判壓縮演算法。評判一個壓縮演算法好壞的重要指標有兩個:一個是每個畫素佔據的位元位數(bit per pixel, BPP),一個是PSNR。我們知道,資料在計算機中以位元形式儲存,所需要的位元數越多,則佔據的儲存空間越大。BPP用於表示影象中每個畫素所佔據的位元數,如一張RGB三通道圖,表示每個畫素需要消耗24個位元。PSNR用來評估解碼後影象的恢復質量,簡單理解就是PSNR越高,恢復質量越好。

我們舉個例子,假設長寬為768512的圖片大小為1M,我們利用深度學習技術對它編碼,通過編碼網路後產生包括9664192個資料單元的壓縮特徵資料,如果表示每個資料單元平均需要消耗1個位元,則編碼整張圖需要9664192個位元。經過壓縮後,編碼每個畫素需要的位元數為(9664192)/(768512)=3,所以BPP值為3bit/pixel,壓縮比為24:3=8:1。這意味著一張1M的圖,通過壓縮後只需要消耗0.125M的空間,換句話說,之前只能放1張照片的空間,現在可以放8張。

如何用深度學習做壓縮

談到如何用深度學習做壓縮,還是用剛才那個例子。將一張大小768512的三通道圖片送入編碼網路,進行前向處理後,會得到佔據9664192個資料單元的壓縮特徵。有計算機基礎的讀者可能會想到,這個資料單元中可放一個浮點數,整形數,或者是二進位制數。那問題來了,到底應該放入什麼型別的資料?從影象恢復角度和神經網路原理來講,如果壓縮特徵資料都是浮點數,恢復影象質量是最高的。但一個浮點數佔據32個位元位,那之前講的位元數計算公式變為(966419232)/(768*512)=96,壓縮後反而每個畫素佔據位元從24變到96,非但沒有壓縮,反而增加了,這是一個糟糕的結果,很顯然浮點數不是好的選擇。

所以為了設計靠譜的演算法,我們使用一種稱為量化的技術,它的目的是將浮點數轉換為整數或二進位制數,最簡單的操作是去掉浮點數後面的小數,浮點數變成整數後只佔據8位元,則,表示每個畫素要佔據24個位元位。與之對應,在解碼端,可以使用反量化技術將變換後的特徵資料恢復成浮點數,如給整數加上一個隨機小數,這樣可以一定程度上降低量化對神經網路精度的影響,從而提高恢復影象的質量。

即使壓縮特徵中每個資料佔據1個位元位,可是8:1的壓縮比在我們看來並不是一個很理想的結果。那如何進一步優化演算法?我們再看下BPP的計算公式。假設每個壓縮特徵資料單元佔據1個位元,則公式可寫成:,計算結果是3bit/pixel,從壓縮的目的來看,BPP越小越好。在這個公式中,分母由影象決定,我們可以調整的部分在分子,分子中96、64、192這三個數字與網路結構相關。很顯然,當我們設計出更優的網路結構,這三個數字就會變小。

那1與哪些模組相關?1表示每個壓縮特徵資料單元平均佔據1個位元位,量化會影響這個數字,但它不是唯一的影響因素,它還與位元速率控制和熵編碼有關。位元速率控制的目的是在保證影象恢復質量的前提下,讓壓縮特徵資料單元中的資料分佈儘可能集中,出現數值範圍儘可能小,這樣我們就可以通過熵編碼技術來進一步降低1這個數值,影象壓縮率會進一步提升。

用深度學習做視訊壓縮,可以看作是在深度學習圖片壓縮的基礎上擴充套件,可結合視訊序列幀間的光流等時空資訊,在單張壓縮的基礎上,進一步降低碼字。

深度學習影象視訊壓縮技術
深度學習影象視訊壓縮技術
在kodak24標準資料集上測評結果,上圖為PSNR,下圖為MS—SSIM的結果

總結

總的來說,用深度學習來設計視訊和影象壓縮演算法是個非常具有前景但也是非常具有挑戰性的技術。目前,其已經在人臉識別等領域證明了它的強大能力,有理由相信在不久的將來,深度學習技術將為影象視訊壓縮領域帶來更大的突破。現階段我們公司自主研發的演算法已經超過商用的JPEG2000。 如圖6和圖7

深度學習影象視訊壓縮技術
深度學習影象視訊壓縮技術
圖 6 在同等壓縮率下壓縮視覺效果對比。上圖為我們所提出的演算法,下圖為JPEG2K演算法。在紋理細節上,我們的演算法能得到更好的效果。

深度學習影象視訊壓縮技術
深度學習影象視訊壓縮技術
圖 7 在同等壓縮率下,對複雜影象壓縮視覺效果對比。上圖為我們所提出的演算法,下圖為JPEG2K演算法。在細節上,我們的演算法能得到更好的效果。

關注圖鴨微信公眾號(微信搜尋:tucodec) 聯絡我們

相關文章