1. 程式人生 > >【論文筆記2】影象壓縮神經網路在Kodak資料集上首次超越JPEG——Full Resolution Image Compression with Recurrent Neural Networks

【論文筆記2】影象壓縮神經網路在Kodak資料集上首次超越JPEG——Full Resolution Image Compression with Recurrent Neural Networks

一、引言

這篇論文提出了一種基於神經網路的全解析度的有損影象壓縮方法,在變壓縮比的情況下無需重複訓練,所以說整個網路只需要訓練一次。論文的內容主要包括如下三個部分:

(1)提出了三種影象壓縮框架,分別是基於LSTM的RNN網路、基於關聯LSTM(associative LSTM)的RNN網路和結合GRU結構和ResNet殘差訓練思想的基於殘差輸入GRU的RNN網路。三種網路都由編碼網路、二值化網路、解碼網路和熵編碼網路四部分構成。

(2)研究比較了三種影象重建的架構,分別是“one-shot”、“additive reconstruction”和新的“residual scaling”方法。

(3)採用熵編碼進一步提高影象壓縮比。熵編碼技術已經廣泛應用在了標準影象壓縮演算法中。

本文提出的網路最終在AUC(area under the rate-distortion curve,即率失真曲線下的面積,表示影象失真度與編位元速率二者之間的關係)上相較於已有的影象壓縮方法的效能提高了4.3%至8.8%,並且是應用在Kodak資料集在,無需熵編碼,在大部分位元率的率失真曲線上超越JPEG的第一個影象壓縮神經網路框架。

二、已有影象壓縮方法的缺點與本文的改進

現有的標準影象壓縮演算法例如JPEG等和標準自編碼器模型的缺點在我的【論文筆記1】中都有闡述,在這裡不在贅述。

上一篇論文(即我在【論文筆記1】中講的George Toderici團隊於2016年發表的論文)中提出的基於LSTM的卷積/反捲積RNN影象壓縮網路存在兩個很大的缺點:

(1)影象的大小隻能為32×32;

(2)沒有考慮影象patch之間的長期依賴性。

為了使網路可以在壓不同縮比範圍內壓縮任意大小的影象,文章提出瞭如下兩種解決方案:

(1)設計一個性能更強的基於影象patch的殘差編碼器

(2)設計一個熵編碼器來抓取影象patch之間的長期依賴性。

為了描述提出的網路結構的效能,文章不僅使用PSNR、Lp差異這兩個傳統指標,還引入了PSNR-HVSMS-SSIM這兩個常用的矩陣來評價網路的壓縮效能。

三、本文提出的方法

1、方法綜述

本文提出的網路結構的單步流程如下圖所示:

網路包含編碼器E、二值化網路B和解碼器D三個部分,編碼器E將圖片編碼成representation code,二值化網路將representation code變換成二值化編碼,解碼器通過二值化編碼預測輸入的原始圖片。將原始圖片和解碼器預測圖片之間的殘差作為下一步迭代的輸入迴圈迭代過程,網路的權重在不同迭代過程中是共享的。所以,單步迭代過程可以用如下方程表示:

Dt和Et分別表明第t步迭代時刻的解碼器和編碼器狀態,bt是具有連續性的二值化representation編碼,xt尖是重構的圖片。當gamma=0的時候表示的是“one-shot”重構,gamma=1時表示的是“additive”重構,這將在後文提到。

二值化網路使用的方法和上一篇論文的方法一樣,在k步迭代後,網路會生成共計m×k位元的二值化編碼,m是每一步迭代生成的二值化編碼位元數。對於32×32的圖片patch,m=128。

形成網路編碼器和解碼器的遞迴單元含有兩種不同的卷積核,一個是作用在來自上一層的輸入向量上的,一個是作用在狀態向量上的,將作用在狀態向量上的卷積叫做隱卷積,將作用在狀態向量上的卷積核叫做隱卷積核。對於輸入向量的卷積可是實現完全的深度方向上的卷積操作,例如D-RNN#3有256個卷積核作用輸入向量上,每一個卷積核空間尺寸為3×3,在深度上實現完全卷積(128,因為一個“Depth-to-Space”操作將圖片深度降低四倍)。除了D-RNN#3和D-RNN#4的隱卷積核是3×3以外,其它的卷積操作的隱卷積核都是1×1,因為實驗證明,相較於上一篇論文的隱卷積核全為1×1,大的隱卷積核可以提高網路的壓縮效能。

訓練過程中,網路的損失函式是帶權重的每一步的殘差加和,表示如下:

網路的每一步迭代將每一個32×32×3的輸入圖片經過編碼和二值化網路生成一個2×2×32的二值化representation,因此每部迭代bbp為1/8,如果只用第一步迭代,那麼即使不用熵編碼,網路的壓縮比也能達到192:1。

2、三種不同的遞迴單元結構

文章提出了三種不同的遞迴單元結構,分別是LSTM、關聯LSTM和結合GRU結構和ResNet殘差訓練思想的基於殘差輸入GRU的RNN網路。

2.1 LSTM

LSTM的結構可以用如下方程表示:

其中xt、ct、ht分別代表的是輸入、LSTM單元狀態和隱層狀態,下標代表的是迭代時間節點,圓圈內加一點代表的是元素級別的乘法,b是偏置;W和U分別代表對輸入向量的卷積和對狀態向量的隱卷積,需要注意的是W卷積和U卷積應該有相同的深度。

2.2 關聯LSTM(Associative LSTM)

關聯LSTM使用全息representation代替LSTM,它的結構可以用如下方程表示:

ht加上波浪號表示的是關聯LSTM在t時刻的輸出。實驗證明,僅在解碼器中使用關聯LSTM的效果更好,因此文章中的基於關聯LSTM網路都是隻用解碼器中使用關聯LSTM單元而編碼器中依然使用非關聯的LSTM單元。

2.3 殘差輸入的GRU

GRU(Gated Recurrent Units),是LSTM的一個變體,當然LSTM還有有很多其他的變體。GRU保持了LSTM的效果同時又使結構更加簡單,所以它也非常流行。(GRU的解釋來自部落格http://blog.csdn.net/wangyangzhizhou/article/details/77332582)

回顧一下LSTM的模型,LSTM的重複網路模組的結構很複雜,它實現了三個門計算,即遺忘門、輸入門和輸出門。

這裡寫圖片描述

而GRU模型如下,它只有兩個門了,分別為更新門和重置門,即圖中的zt和rt。更新門用於控制前一時刻的狀態資訊被帶入到當前狀態中的程度,更新門的值越大說明前一時刻的狀態資訊帶入越多。重置門用於控制忽略前一時刻的狀態資訊的程度,重置門的值越小說明忽略得越多。

這裡寫圖片描述

GRU單元的結構可用如下方程表示:

文章還受到了ResNet和Highway Networks的啟發,將殘差資訊加入GRU的輸入以加速收斂。最終,殘差輸入GRU單元的結構可用如下方程表示:

文章在試驗中將αx和αh都設定成了0.1。

3、圖片重構的框架

文章研究比較了三種影象重建的架構,分別是“one-shot”、“additive reconstruction”和“residual scaling”方法。

3.1  One-shot reconstruction

回顧一下在方法總數中提到的論文提出的網路框架的單步迭代過程,它的方程為:

當影象重建過程中γ=0時,即每一步解碼器都在預測整個影象。隨著迭代進行下去,通過編碼得到的representation的位元數越來越多,因此重建的圖片質量便越來越好,這種方法被稱為one-shot重建方法。儘管每一步都在預測原始圖片,但是每一步只將上一步的殘差資訊傳遞給下一層,實驗證明,這種方式重建的影象效果並不好。這和上一篇論文中提出的不基於LSTM的網路的使用的重建方法相同。

3.2  Additivie reconstruction

當γ=1時,每一步迭代都是在利用上一層的殘差預測新的殘差,最終的圖片重建過程是通過加和所有迭代過程的殘差得到的。這和上一篇論文中提出的基於LSTM的網路使用的重建方法相同。

3.3 Residual scaling reconstruction

以上兩種重建原影象的方法都存在一個缺點,就是圖片的殘差在初始的時候是非常大的,理論上是期望殘差隨著迭代的進行越來越小,而實際上編碼器和解碼器很難在很大的數值範圍內高效執行。此外,殘差的收斂速率是內容獨立的,意思就是,對於一張圖片patch可能它收斂得很快,而另外一張圖片可能就會很慢了。

因此,文章為了解決以上兩種問題,提出了一種新的圖片重構方法:Residual scaling reconstruction。這種方法將加和重構的方法擴充套件,引入了內容獨立係數和迭代獨立係數。Residual scaling重構方法的圖解如下:

Residual scaling重建方法關注上一輪迭代過程預測的殘差,殘差通過與上一輪gain estimator的輸出scale係數相乘得到一個scaled的殘差。scaled residual經過編碼和解碼後預測了一個新的殘差,該殘差通過gain estimator得到新的scale係數,當前迭代過程的殘差由上一輪的殘差和本輪預測的殘差相減得到。整個residual scaling的結構可用如下方程表示:

其中圓圈中加斜槓表示元素等級的除法;ZOH表示零階保持器上取樣;G表示scale係數的估計函式,它由五層前向卷及神經網路構成,每層的卷積步長為2,前四層卷積核尺寸為3×3,使用ELU非線性函式,輸出深度為32,最後一層使用2×2卷積核和ELU非線性函式使得輸出深度為1。此外為了保證ELU的輸出為(1,+∞),ELU的輸出加上常數2(因為ELU的非線性化值域為(-1,+∞))。

實驗證明,Residual scaling重建方法解決了重建過程中的殘差內容獨立的問題,具有更好的圖片重建效果。

4、熵編碼

4.1 熵編碼原理

熵編碼技術已經廣泛地用在標準影象壓縮演算法中,使用熵編碼技術可以進一步提高影象的壓縮比,因為之前的網路都不是專門為了最大化熵而設計的。熵編碼即編碼過程中按熵原理不丟失任何資訊的編碼。資訊熵為信源的平均資訊量(不確定性的度量)。熵編碼是一種無失真壓縮,例如一幅影象,每個畫素用一個位元組表示,分析每個畫素值出現的概率,把出現概率大的值用少於一個位元組的字元表示,而出現概率小的值用多於一個位元組字元表示,這樣平均每個畫素所佔的大小就少於一個位元組,從而達到壓縮影象的目的。常見的熵編碼有:夏農編碼、霍夫曼編碼和算數編碼等。JPEG影象編碼標準採用的熵編碼演算法就是霍夫曼編碼。

按照夏農提出的資訊理論的觀點,把資料看做資訊和冗餘度的結合。所謂冗餘指一幅影象的畫素之間存在著很大的相關性,可以利用一些編碼的方法山區,從而達到減少冗餘壓縮資料的目的。

熵的定義如下:設資訊源S=S1,S2,S3,...,Sn,Si出現的概率為Pi,1≤i≤N,則資訊源的熵為:

根據夏農資訊理論,無論規定的碼字元如何編排,其平均的碼字元所佔用的位數不可能小於原符號表達的熵值。那麼資訊的最大離散熵為:

則最大熵和熵之間的差值成為冗餘度:

這就意味著,只要資訊源不是等概率分佈的,就存在這資料壓縮的可能。即編碼後字元的平均碼長L與信源的熵H(s)可以任意接近。

後文關於論文的熵編碼方法,目前還有一些沒理解的問題,待學習理解後更新補充。

4.2 單步迭代熵編碼

文章中的熵編碼其實就是用一個網路框架求概率P(C|T),然後通過求P(C|T)和P尖(C|T)的交叉熵來確定編碼c(y,x,d)的最理想的長度,從而進一步壓縮編碼長度,提高壓縮比。

單步迭代壓縮上編碼包含三個步驟,圖示結構如下:

(1)一個卷積核尺寸為7×7的卷積用來提高LSTM的感受野;

(2)卷積後的結果按行輸入進入LSTM模組;

(3)兩個1×1的卷積用來增加網路記憶容量。

最後,單步迭代的交叉熵的計算公式為:

4.3 多歩迭代熵編碼

在多歩迭代的過程中,每一步迭代都重複單步迭代的熵編碼過程,但是每次迭代過程的LSTM不能只有當前過程的輸入,這樣無法抓取迭代過程間的冗餘資訊。因此,在多步迭代過程中,LSTM不在僅僅接收當前的卷積輸出z0還會接收上一次迭代過程的資訊z1,其中z1由上一步的編碼經過多個卷積和一個LSTM卷積過程得到。如下圖所示:

5、結果與分析

在未經過熵編碼操作的模型結果如下:

由表格可以看出,在沒有熵編碼的情況下,在32×32的影象資料集中,one-shot重建法的殘差GRU模型在MS-SSIM和PSNR-HVS兩個指標上均取得了最好的效果;在高資訊熵的資料集中,one-shot重建法的LSTM模型在MS-SSIM指標上取得了最好的結果,one-shot重建法的Residual GRU在PSNR-HVS指標上表現最好。

然而,加上額外的熵編碼後,模型在Kodak資料集上的提升很小,位元率最多隻有在2bpp時提升5%到在0.25bpp時提升32%,因為該資料集中大多是相對低解析度的影象,而熵編碼主要對大影象的壓縮起顯著作用。結果如下圖所示:

綜上所述,文章應用了4種不同的編碼解碼單元和3種影象重構方法提出了4×3=12種影象壓縮RNN框架,並在MS-SSIM和PSNR-HVS指標上進行了測試,平均程度上來說已經超越了JPEG。並且證明了熵編碼可以抓取編碼中的冗餘資訊,進一步降低編碼長度,提高壓縮比。

-------------------------------------------

Youzhi Gu, master student

Foresight Control Center

College of Control Science & Engineering

Zhejiang University

Email: [email protected]