概要
该文提出了两种有效的新编解码块:采用卷积层和Generalized Divisive Normalization(GDN)的分析(analysis)和合成块(synthesis)。该文的网络利用pixel RNN方法进行量化。此外,为了改进整个网络,我们使用LSTM细胞对残差图像进行编码,以减少不必要的信息。
1. 网络结构
下图给出了两块图像压缩的总体体系结构:
每个输入(image patch)首先被传递到分析(analysis)编码器块,以丰富图像表示。类似地,合成(synthesis)-解码器块在循环神经网络细胞的帮助下重建解码图像。
在端端框架中有三个模块带有两个新模块,即编码器网络、分析块、二值化器、解码器网络和合成块。
端到端框架的单次迭代在(1)中表示:
b
t
=
B
i
n
(
E
n
c
t
(
r
t
−
1
)
)
x
^
t
=
D
e
c
t
(
b
i
n
t
)
+
γ
x
^
t
−
1
(1)
b_t=Bin(Enc_t(r_t-1)) \\ \hat{x}_t=Dec_t(bin_t)+\gamma \hat{x}_{t-1} \tag 1
bt=Bin(Enct(rt−1))x^t=Dect(bint)+γx^t−1(1)
r t = x − x ^ t , r 0 = x , x ^ 0 = 0 (2) r_t=x-\hat{x}_t, \ \ r_0=x,\ \ \hat{x}_0=0 \tag 2 rt=x−x^t, r0=x, x^0=0(2)
其中Enc和Dec是迭代 t t t的编码器和解码器, b i n t bin_t bint是二进制表示, x ^ t \hat{x}_t x^t是实际图像 x x x的重建版本, γ = 0 \gamma =0 γ=0是 O n e s h o t r e c o n s t r u c t i o n One\ shot\ reconstruction One shot reconstruction。
根据实际加权值和预测值之间的loss来进行每一次迭代训练。
L
1
=
∑
i
=
1
n
∣
y
t
r
u
e
−
y
p
r
e
d
i
c
t
e
d
∣
(3)
L_1=\sum \limits_{i=1}^{n}|y_{true}-y_{predicted}| \tag 3
L1=i=1∑n∣ytrue−ypredicted∣(3)
在可变率框架的每次迭代时的总体损失为:
L
1
=
β
∑
t
∣
r
t
∣
(4)
L_1=\beta \sum \limits_{t}|r_t| \tag 4
L1=βt∑∣rt∣(4)
2.1 Analysis Block
提出了一种基于空间信息的有效的空间自适应分析块。我们的分析编码器块的结构包含三个输入通道和64个输出通道。图层的内核大小为3,步幅为1。该分析块由卷积层、广义分裂归一化技术组成。每一步都从仿射卷积开始:
v
i
(
k
)
(
m
,
n
)
=
∑
j
(
h
k
,
i
j
∗
u
j
(
k
)
)
(
m
,
n
)
+
c
k
,
i
(5)
v^{(k)}_i(m,n)=\sum \limits_j(h_{k,ij}*u_j^{(k)})(m,n)+c_{k,i} \tag 5
vi(k)(m,n)=j∑(hk,ij∗uj(k))(m,n)+ck,i(5)
v
i
(
k
)
(
m
,
n
)
v_i^{(k)}(m,n)
vi(k)(m,n)其中
i
t
h
i^{th}
ith是输入的channel维度,
k
t
h
k^{th}
kth是第
k
s
t
e
p
,
(
m
,
n
)
k\ step,(m,n)
k step,(m,n)是空间位置。
x
x
x是输入图像,由
v
e
c
t
o
r
v
i
(
0
)
(
m
,
n
)
vector\ v_i^{(0)}(m,n)
vector vi(0)(m,n)组成,输出是
y
y
y,由
v
e
c
t
o
r
u
i
(
3
)
(
m
,
n
)
vector\ u_i^{(3)}(m,n)
vector ui(3)(m,n)组成。
∗
*
∗代表2D卷积:
w
i
(
k
)
(
m
,
n
)
=
v
i
(
k
)
(
s
k
m
,
s
k
,
n
)
(6)
w_i^{(k)}(m,n)=v_i^{(k)}(s_km,s_k,n) \tag 6
wi(k)(m,n)=vi(k)(skm,sk,n)(6)
其中,步骤k处的降采样因子用
s
k
s_k
sk表示。每一步之后都是GDN操作。现在,式(7),定义了GDN操作的所有两个阶段,其中
β
k
,
i
\beta_{k,i}
βk,i和
γ
k
,
i
j
\gamma_{k,ij}
γk,ij是归一化操作的两个尺度和偏差参数:
2.2 Synthesis Block
考虑到最终重建图像的问题,该图像可能包含多个伪影。在量化后的解码器侧提出了一种有效的合成块,以保持解码图像的信息和质量。如上图所示,通过几个卷积和逆GDN层来重建输入图像。与上述的分析块相同,解码器模块由两个阶段组成,其中所有的过程都被反转。经过iGDN操作后,特征向量进入RNN单元进行进一步重建,反卷积层形成最终的重建图像。每一步都从卷积层开始,然后进行逆GDN运算,计算如下:
inverse GDN包括三个步骤,每一步都进行逆操作、降采样和inverse GDN。
2.3 RNN Cell
该图像压缩网络包括RNN个单元和一个像素深度方案。在每次迭代中,使用RNN单元从图像中提取特征。连续地记忆每个迭代过程中的残差状态,并重建图像。整个网络使用7个RNN单元,3个单元在编码器侧,4个单元在解码器侧。在每次迭代中,前一个单元格的估计结果都会传递到隐藏层以进行进一步的迭代。RNN单元格的简化视图如图所示:
RNN单元格的hidden layer和memory layer状态分别为ck−1和xk−1。第k次迭代的输入特征向量为 x k x_k xk,等于该迭代的上层输出。每个单元格由两个卷积层组成; c o n v _ i n i conv\_{in}_i conv_ini用于输入特征向量 x k x_k xk, c o n v _ h i conv\_h_i conv_hi用于隐藏层。
在上述图中, x k x_k xk、 c k − 1 c_{k−1} ck−1和 h k − 1 h_{k−1} hk−1是输入向量。其中, X X X表示元素级的乘法。类似地, + + +表示元素级加法 c k c_k ck, h k h_k hk是这个单元格的输出向量和下一个单元格的输入向量。
这里, x k 、 c k − 1 和 h k − 1 x_k、c_{k-1}和h_{k-1} xk、ck−1和hk−1是来自卷积层的输入向量。 C k C_k Ck和 h k h_k hk是每次迭代的计算方法,定义为:
2.4 Entropy Coding
我们通过在二值化器模块中使用不同的隐藏值来提高网络的性能。
上图探究了一下通道数及GDN block的存在对于PSNR的影响。在上述实验中,该文的网络中使用了Block+Conv(Enc64+Bin38)的参数。
3. 结果
4.总结
该文提出了在基于RNN的图像压缩网络中嵌入的基于卷积层和GDN层的两个有效块,即分析块和合成块。采用像素级RNN方法,利用线性卷积构造了一种具有一定隐藏值的像素级二值量化方案。此外,为了进一步提高网络的性能,同时利用了RNN Cells。这些单元格被放置在编码器和解码器的部分,以提高性能。
论文是有提供代码的:代码
Reference:
Image Compression with Recurrent Neural Network and Generalized Divisive Normalization