近年來,深度學習在計算機視覺領域已經佔據主導地位,不管是在圖像識別仍是超分辨重現上,深度學習已成爲圖片研究的重要技術;如今深度學習技術已進入圖片壓縮領域。程序員
本文將和你們分享如何使用深度學習卷積神經網絡技術設計圖像壓縮算法。
當前主要圖片壓縮算法
說到圖像壓縮算法,目前市面上影響力比較大的圖片壓縮技術是
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 越小越好。在這個公式中,分母由圖像決定,能夠調整的部分在分子,分子中 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的測試連接:http://www.tucodec.com/picture/index你們能夠自行進行測試(建議在PC端進行測試)。感興趣的朋友也能夠在測試完後,下載壓縮後圖片和二進制文件,下載安裝解碼器,來進行壓縮圖片的恢復處理。