cookieOptions = {...}; .用深度學習設計圖像影像壓縮算法:更簡潔、更強大 - 3S Market「全球智慧科技應用」市場資訊網

智慧生活設計事務所

2018年2月5日 星期一

什麼是卷積神經網絡 CNN (深度學習)? What is Convolutional Neural Networks (deep learning)?

Nx 雲端影像平台解決方案 


leiphone 作者:思颖


AI 科技評論按,本文為圖鴨科技投稿,正文內容如下:

說到圖像壓縮算法,最典型的就是 JPEG、JPEG2000 等。
用深度学习设计图像视频压缩算法:更简洁、更强大
1:典型圖像壓縮算法 JPEGJPEG2000 

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

用深度学习设计图像视频压缩算法:更简洁、更强大
图 2:JPEG 编码框图

在有損壓縮下,JPEG2000 的明顯優勢,在於其避免了 JPEG 壓縮中的馬賽克失真效果

JPEG2000 的失真主要是模糊失真,而模糊失真的主要原因在於高頻量在編碼過程中,一定程度的衰減。在低壓縮比情形下(比如壓縮比小於 10:1),傳統的 JPEG 圖像品質有可能比 JPEG2000 好。JPEG2000 在高壓縮比的情形下,優勢才開始明顯。

整體來說,JPEG2000 相比於傳統 JPEG,仍有很大技術優勢,通常壓縮性能可提高 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 越高,恢復品質越好。

我們舉個例子,假設長寬為 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 這個數值,圖像壓縮率會進一步提升。

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

用深度学习设计图像视频压缩算法:更简洁、更强大

用深度学习设计图像视频压缩算法:更简洁、更强大
5:在 kodak24 標準數據集上測評結果,上圖為 PSNR 結果,下圖為 MS-SSIM 的結果


總結
總體而言,借助於深度學習設計影像圖像壓縮算法,是一項非常具有前景,但也非常具有挑戰性的技術。目前,其已經在人臉辨識等領域,證明瞭它的強大能力,有理由相信在不久的將來,深度學習技術將為圖像影像壓縮領域,帶來更大的突破。

用深度学习设计图像视频压缩算法:更简洁、更强大

用深度学习设计图像视频压缩算法:更简洁、更强大
6:在同等壓縮率下壓縮視覺效果對比。上圖為圖鴨所提出的算法,下圖為 JPEG2000 算法。在紋理細節上,上圖的效果更好。

用深度学习设计图像视频压缩算法:更简洁、更强大

用深度学习设计图像视频压缩算法:更简洁、更强大
7:在同等壓縮率下,對複雜圖像壓縮視覺效果對比。上圖為圖鴨所提出的算法,下圖為 JPEG2000 算法。在細節上,可以看到上圖的效果更好。

用深度学习设计图像视频压缩算法:更简洁、更强大

用深度学习设计图像视频压缩算法:更简洁、更强大
8:圖鴨科技,BPGJPEG2000JPEGCNN-google 算法的圖像亮度分量的 rate-distortion 曲線,上圖為感知質量,由多尺度結構相似性度量(MS-SSIM)。下圖為峰值信噪比。(完)

                                                                                                                                                                                                                 

0 意見: