RNN在图像压缩领域的应用-Variable rate image compression with recurrent neural networks

news2024/11/30 14:26:48

Variable Rate Image Compression with Recurrent Neural Networks

RNN在图像压缩领域应用最经典的一篇,由Google的George Toderici提出。原文连接:Variable Rate Image Compression with Recurrent Neural Networks

文章提出了一种基于卷积和反卷积LSTM的RNN网络框架,并强调该网络框架有如下技术优点:

  • 网络只需训练一次,而不是每张图片都需要训练,并且图片输入大小和压缩比变化也不需要重复训练
  • 网络具有连续性,发送的比特越多,图像重建精度就越高
  • 所提出的网络框架和训练后的自编码器模型在相同的比特数下有着相同的效率

一、标准图像压缩算法的缺点

如今,很多普适的标准图像压缩算法取得了很不错的效果,例如Joint Picture Experts Group提出的JPEG和JPEG2000,以及刚提出不久的WebP算法,但是它们都普遍地存在如下两个问题:

  1. 专注于大图片的压缩,低分辨率的thumbnail图片的压缩效果不佳,甚至受损。因为它们图片压缩的原理都来自同一切入点:先设计不同的启发方法减少需要保留的图片信息,再决定能够利用保留的信息尽可能低损地压缩图片的转换方法。
  2. 图像数据集上的假设大多不成立。例如假设高分辨率的图片包含许多冗余的信息,而实际上图片分辨率越高,来自图片的patch包含的低频信息越多。因此这些假设在生成高分辨率图像的thumbnail图的时候并不成立,因为来自thumbnail的patch更多的包含难压缩的高频信息。

二、标准自编码器模型的缺点

Krizhevsky和Hinton于2011年提出了标准自编码器模型,利用神经网络作为编码器(encoder)去生成一个具有代表性的编码,再利用解码器(decoder)根据编码结果重建原始图片。

图片patch经过encoder编码生成一个representation,然后经过二值化函数生成一个二值化编码,最后经过一个decoder利用二值化编码重建原始的图片patch。整个流程可以用如下方程表示:
x ′ = D ( B ( E ( x ) ) ) x'=D(B(E(x))) x=D(B(E(x)))
其中 x x x是原始图片, x ′ x' x是压缩重建后的图片, E E E是编码器函数, B B B是二值化函数, D D D是解码器函数。

然而标准自编码器存在很多限制条件使它们无法推广作为标准的图片编码解码器。其中的一些限制条件使得变压缩比的压缩过程无法实现,每一个压缩比需要对应一个单独的网络单独训练,非常浪费资源,并且无法保证输出的图片质量,因为它们设定了图像大小,只能在对应的图片大小上抓取图片中的冗余信息。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XGkaWpFd-1645004126499)(F:\我的大学\实习\实习项目\深度图压缩\笔记\论文总结\1644976328574.png)]

三、本文提出的RNN模型框架

1、基于残差输入的图像压缩网络框架

用输出和原始图片的残差作为图像的输入可保证网络的连续性,即每步训练可以产生图片的增量信息。因此,网络可以用如下方程表示:
F t ( r t − 1 ) = D t ( B ( E t ( r t − 1 ) ) ) F_t(r_t-1)=D_t(B(E_t(r_{t-1}))) Ft(rt1)=Dt(B(Et(rt1)))
r r r是残差输入,下标表示迭代的时间点。

不基于LSTM

对于不基于LSTM结构的模型, F F F没有记忆性,每一步的残差仅根据上一步的残差结果计算得出,因此,整个图像patch的重建是通过将残差全部加起来的总和得出的,例如后文将要提到的前向全连残差编码器(feed-forward fully-connected residual encoder)和前向卷积/反卷积残差编码器(feed-forward convolutional/deconvolutional residual encoder)。每一步的残差计算公式如下:
r t = F t ( r t − 1 ) − r t − 1 r_t=F_t(r_{t-1})-r_{t-1} rt=Ft(rt1)rt1
基于LSTM

对于基于LSTM结构的模型, F F F具有记忆性,每一步的残差直接根据原始图片计算得出,因此每一步的输出都是在预测原始图片patch,例如后文将要提到的基于LSTM的压缩网络(LSTM-based compression)和基于LSTM的卷积/反卷积压缩网络(convolutional/deconvolutional LSTM-based compression)。每一步的残差计算公式如下:
r t = F t ( r t − 1 ) − r 0 r_t=F_t(r_{t-1})-r_0 rt=Ft(rt1)r0
以上两种方式的压缩网络均按如下方式进行训练,其中N是网络中的自编码器总数:
minimizing ⁡ ∥ r t ∥ 2 2  for  t = 1 … N \operatorname{minimizing}\left\|r_{t}\right\|_{2}^{2} \text { for } t=1 \ldots N minimizingrt22 for t=1N

2、二值化表示编码

文章引用的二值化方法分为如下两步:

  1. 第一步使用一个全连接层加 t a n h tanh tanh激活函数,将经过编码器后得到的representation映射到(-1, 1)的区间内
  2. 利用如下函数将(-1, 1)区间内的编码二值化为集合{-1, 1}

b ( x ) = x + ϵ ∈ { − 1 , 1 } b(x)=x+\epsilon \quad \in\{-1,1\} b(x)=x+ϵ{1,1}

ϵ ∼ { 1 − x  with probability  1 + x 2 − x − 1  with probability  1 − x 2 \epsilon \sim \begin{cases}1-x & \text { with probability } \frac{1+x}{2} \\ -x-1 & \text { with probability } \frac{1-x}{2}\end{cases} ϵ{1xx1 with probability 21+x with probability 21x

其实公式6和7可以简化为:(论文中有点高大尚的感觉)
b ( x ) = { 1  with probability  1 + x 2 − 1  with probability  1 − x 2 b(x) =\begin{cases}1 & \text { with probability } \frac{1+x}{2} \\ -1 & \text { with probability } \frac{1-x}{2}\end{cases} b(x)={11 with probability 21+x with probability 21x
因此,整个二值化编码器可以表示成:
B ( x ) = b ( t a n h ( W b i n x + b b i n ) ) B(x)=b(tanh(W^{bin}x+b^{bin})) B(x)=b(tanh(Wbinx+bbin))
其中W、b分别是线性全连接层的权重和偏置,x是上一层的激活值。

图像的压缩比由每一步生成的representation比特数(即W矩阵的行数)和网络迭代次数(即残差自编码器的重复次数)共同决定。

3、模型一:不基于LSTM的全连接残差编码器

文章首先提出最简单的实例便是用全连接层堆叠起来的编码器E和解码器D,还设置每个全连接层输出的个数均为512,并且只使用tanh非线性激活函数。网络框架如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZWp6LdiN-1645004126501)(F:\我的大学\实习\实习项目\深度图压缩\笔记\论文总结\1644983333281.png)]

从结构图片可以看出,最终图片patch的重建是通过所有stage的residual加和得到的

模型二:基于LSTM的残差编码器

该模型通过堆叠LSTM层,搭建基于LSTM的编码器E和解码器D。并且本文使用的LSTM结构是2013年由Grave提出的简易结构,该简易LSTM结构如下:
( i f o g ) = ( sigm ⁡ sigm ⁡ sigm ⁡ tanh ⁡ ) T 4 n l ( h t l − 1 h t − 1 l ) \left(\begin{array}{l} i \\ f \\ o \\ g \end{array}\right)=\left(\begin{array}{l} \operatorname{sigm} \\ \operatorname{sigm} \\ \operatorname{sigm} \\ \tanh \end{array}\right) T_{4 n}^{l}\left(\begin{array}{l} h_{t}^{l-1} \\ h_{t-1}^{l} \end{array}\right) ifog=sigmsigmsigmtanhT4nl(htl1ht1l)

c t l = f ⊙ c t − 1 l + i ⊙ g c_{t}^{l}=f \odot c_{t-1}^{l}+i \odot g ctl=fct1l+ig

h t l = o ⊙ tanh ⁡ ( c t l ) h_{t}^{l}=o \odot \tanh \left(c_{t}^{l}\right) htl=otanh(ctl)

s i g m ( x ) = ( 1 + e x p ( − x ) ) − 1 sigm(x)=(1+exp(-x))^{-1} sigm(x)=(1+exp(x))1

其中上标 l l l和下标 t t t代表第 l l l层、 t t t时间点的LSTM隐层的状态,T代表一种仿射变换, ⊙ \odot 表示两矩阵对应位置元素进行乘积。这种简易的LSTM能够减少每一步的操作数,能够保证GPU的高效执行。 基于LSTM的压缩网络结构如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-arvgiZB9-1645004126501)(F:\我的大学\实习\实习项目\深度图压缩\笔记\论文总结\1644983642598.png)]

编码器中由一个全连接层和两个LSTM层构成;解码器由两个LSTM层和一个全连接层加上一个tanh非线性激活函数构成来预测原始图片patch的RGB值,因此每一步迭代都是在预测原始图片的patch

5、模型三:不基于LSTM的卷积/反卷积残差编码器

文章在模型一中提出了全连接的残差自动编码器,在此基础上用卷积操作替换模型一编码器中的全连接层,用反卷积操作替换模型一解码器中的全连接层,并通过3个 1 × 1 1\times1 1×1的卷积将解码后的表征转化为三通道的RGB值。不基于LSTM的卷积/反卷积残差编码器结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hdzEv5Of-1645004126502)(F:\我的大学\实习\实习项目\深度图压缩\笔记\论文总结\1644992365608.png)]

同样,类似于模型一,图片patch的重建是通过加和所有stage的residual得到的

6、模型四:基于LSTM的卷积/反卷积残差编码器

最后一个模型的编码器将模型三的编码器中的第二和第三个卷积替换为LSTM卷积,解码器中的第二和第三个反卷积替换为LSTM反卷积,也就是把模型二中的仿射变换T替换为了卷积加上偏置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xuozHdKa-1645004126502)(F:\我的大学\实习\实习项目\深度图压缩\笔记\论文总结\1644993618134.png)]

LSTM卷积操作方程为:
T 4 n l ( h t l − 1 , h t − 1 l ) = W 1 l ⊗ k h t l − 1 + W 2 l ⊗ 1 h t − 1 l + b l T_{4 n}^{l}\left(h_{t}^{l-1}, h_{t-1}^{l}\right)=W_{1}^{l} \otimes_{k} h_{t}^{l-1}+W_{2}^{l} \otimes_{1} h_{t-1}^{l}+b^{l} T4nl(htl1,ht1l)=W1lkhtl1+W2l1ht1l+bl
LSTM反卷积操作方程为:
T 4 n l ( h t l − 1 , h t − 1 l ) = W d l ⊘ k h t l − 1 + W c l ⊗ 1 h t − 1 l + b l T_{4 n}^{l}\left(h_{t}^{l-1}, h_{t-1}^{l}\right)=W_{d}^{l} \oslash_{k} h_{t}^{l-1}+W_{c}^{l} \otimes_{1} h_{t-1}^{l}+b^{l} T4nl(htl1,ht1l)=Wdlkhtl1+Wcl1ht1l+bl
用c和d来区分卷积和反卷积操作。

五、实验和评价标准

1、训练

文章采用Adam算法,使用多种学习率{0.1, 0.3, 0.5, 0.8, 1}分别进行训练,根据patch像素个数和迭代总步数标准化后的L2损失,损失函数采用8-16位编码步数进行试验。

文章使用从公共网络中收集的216,000,000 张32$\times 32 随 机 彩 色 图 片 , 对 于 一 些 不 是 32 32随机彩色图片,对于一些不是32 3232\times 32 的 质 量 很 好 的 图 片 , 通 过 降 采 样 将 图 片 转 换 为 32 32的质量很好的图片,通过降采样将图片转换为32 3232\times 32 , 最 终 的 32 32,最终的32 3232\times$32图片采用无损PNG格式保存。

2、评价标准

文章强调不应采用PSNR作为评价标准,因为PSNR偏向于使用L2损失的模型,本文提出的模型对于JPEG算法来说不公平,因此文章放弃PSNR,而是采用SSIM(Structural Similarity Idex)。文章将32$\times 32 的 图 片 分 成 不 同 的 8 32的图片分成不同的8 328\times$8的patch,并且在不同patch和不同颜色通道上计算SSIM,最后的得分由所有patch和channel的平均SSIM给出。分析结果时,得分越高说明图像重建质量越好,1.0说明完美重建。

结构相似性(SSIM)是一种衡量两幅图像相似度的指标。该指标首先由德州大学奥斯丁分校的图像和视频工程实验室(Laboratory for Image and Video Engineering)提出。给定两个图像x和y, 两张图像的结构相似性可按照以下方式求出:
SSIM ⁡ ( x , y ) = ( 2 μ x μ y + c 1 ) ( 2 σ x y + c 2 ) ( μ x 2 + μ y 2 + c 1 ) ( σ x 2 + σ y 2 + c 2 ) \operatorname{SSIM}(x, y)=\frac{\left(2 \mu_{x} \mu_{y}+c_{1}\right)\left(2 \sigma_{x y}+c_{2}\right)}{\left(\mu_{x}^{2}+\mu_{y}^{2}+c_{1}\right)\left(\sigma_{x}^{2}+\sigma_{y}^{2}+c_{2}\right)} SSIM(x,y)=(μx2+μy2+c1)(σx2+σy2+c2)(2μxμy+c1)(2σxy+c2)
当两张图像一模一样时,SSIM的值等于1

六、结果和分析

文章中各个网络评价结果以及与标准图像压缩算法(JPEG,JPEG2000和WebP)的比较结果由下表格给出:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oMutQNLq-1645004126503)(F:\我的大学\实习\实习项目\深度图压缩\笔记\论文总结\1645002299649.png)]

全连接LSTM模型的性能可以和JPEG相媲美,基于LSTM的卷积/反卷积模型在SSIM指标上面超越了JPEG

源码中存在的问题

  1. 源码复现了文章模型中的一部分东西
  2. 源码的作者和文章的作者不是同一个人
  3. 源码和文章对不上,源码中未出现文章中提到的残差, 1 × 1 1\times1 1×1卷积,以及直接把512通道的残差和3通道残差相加,非常不合理

数据集


神经网络图像视频压缩领域领军人物或机构

  1. George Toderici
  2. David Minnen
  3. wave
  4. 图鸭

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/26151.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

美食杰项目 -- 登录注册(三)

目录前言:具体实现思路:步骤:1. 展示美食杰菜谱大全效果在这里插入图片描述2. 引入element-ui3. 代码总结:前言: 本文给大家讲解,美食杰项目中 登录注册实现的效果,和具体代码。 具体实现思路&…

内网渗透神器CobaltStrike之钓鱼攻击(六)

一、HTA木马 简介 HTA是HTML Application的缩写,直接将HTML保存成HTA的格式,是一个独立的应用软件。HTA虽然用HTML、JS和CSS编写,却比普通网页权限大得多,它具有桌面程序的所有权限。就是一个html应用程序,双击就能运…

LeetCode-剑指57-II.和为s的连续正数序列

1、循环 我们可以一次循环每一个数,在⌊n2⌋\left \lfloor \frac{n}{2} \right \rfloor⌊2n​⌋的范围内循环检查添加新的数字后形成的数组和是否为target,若是则将当前数组加入结果当中;否则继续进行循环或跳出循环。 class Solution { pu…

VR,向「B」而生

VR仍是一门好生意,对于VR厂商而言,能否看到VR技术大规模普及的那一天,在于是否认清当下局势,即什么时间干什么事。毕竟在这个泡沫较多的领域,“脱虚向实”,活下去,专注技术与服务,更…

块级格式化上下文BFC

块级格式化上下文BFC创建格式化上下文BFC有哪些特性?特性一特性二特性三特性四BFC的特性可以解决哪些问题?高度塌陷margin塌陷包含塌陷BFC是前端日常开发中离不开的知识点,“块级格式化上下文”是格式化上下文中最常用的一种,格式…

iOS程序内语言切换使用小结

随着时代的发展,应用程序相继出现了不同语言的版本方案,中文,英文,法文,韩文等等;想在应用程序中实现语言的自由切换,需要配置多个语言的文件,根据用户的动态选择获取不同语言文件下…

数字孪生论文阅读笔记【1】

[1]刘劲松. 高档数控机床数字孪生关键技术研究与应用[D].中国科学院大学(中国科学院沈阳计算技术研究所),2022.DOI:10.27587/d.cnki.gksjs.2022.000005. Motivation 不同数控机床对外信息接口不同,导致信息孤岛机床部件诊断困难,造成资源浪费维护资源不…

计算机中的数据存储规则

计算机的存储规则: text文本image图片sound声音 在计算机中:任意数据都是以二进制的形式进行存储:两种状态. 0与1, 打孔法 进制转换 任意进制转十进制: 公式: 系数 * 基数的权次幂 相加 系数: 就是每一位上的数字 基数:当前的进…

async/await详解

🐱个人主页:不叫猫先生 🙋‍♂️作者简介:专注于前端领域各种技术,热衷分享,期待你的关注。 💫系列专栏:vue3从入门到精通 📝个人签名:不破不立 &#x1f36c…

面向对象(高级)

目录 1. 类变量和类方法(静态变量) 类变量(静态变量) 内存刨析: 注意事项和使用细节: 类方法(静态方法): 使用场景: 注意事项和细节讨论: …

净亏损2.9亿元,财务业绩陷入困境后,逸仙电商盈利仍遥遥无期

来源:猛兽财经 作者:猛兽财经 逸仙电商概况 逸仙电商(YSG)是一家开曼群岛控股公司,通过与可变利益实体(“VIE”)的合同协议,在中国生产和销售化妆品和美容产品。公司结构如图所示。 逸仙电商成立的目的是…

不懂Hybird开发,感觉错过一个亿~

从当前移动开发的实际情况来看,移动端的开发方式三分天下:纯原生(Native App)、混合开发(Hybird App)、网页应用(Web App)。 ​ 纯原生(Native App)&#xff…

附录10-JS正则

在JS中有多种内置方法可以使用正则表达式,比如说match,exec,test等 文章参考 第十四章 吃通js正则表达式,javascript前端工程师必会技能_哔哩哔哩_bilibili 目录 1 正则常用方法 1.1 exec的简单使用 1.1.1 基本使用 1.1.2 lastIndex属性 1.1.…

Android Activity跳转

实现点击按钮,发送消息并跳转到另一个Activity MainActivity添加SendMessage方法 const val EXTRA_MESSAGE "com.example.myfirstapp.MESSAGE"class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super…

【C++】string的使用

文章目录一、前言二、标准库中的string类三. string类的常用接口1. 构造函数2. 容量操作3. 访问遍历4. 修改操作5. 其他操作一、前言 C语言中,字符串是以\0结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数&#xff0…

ubuntu18.04服务搭建yolov5开发环境

文章目录1. 系统和显卡信息2. 下载安装CUDA2.1 1cuda环境变量配置1. 系统和显卡信息 (1) 系统信息 kanditelpo-System-Product-Name:~$ cat /proc/version Linux version 4.15.0-191-generic (builddlcy02-amd64-032) (gcc version 7.5.0 (Ubuntu 7.5.…

PDF如何转Word?分享几个实用办公软件给你

PDF是我们常用的文件格式,因为它的兼容性好,在手机、电脑查看文件都不影响文件的格式与内容。并且它的保密性也好,因为它无法在线更改文件内容,但这也说明了,我们如果需要对其进行更改的话,将需要把PDF格式…

解决Vue3中echarts无法缩放的问题

这里写自定义目录标题前言问题描述官网示例正常官网示例在本地缩放异常灵光乍现问题解决前言 实际工作中,使用到vue和echarts技术。项目原来用的vue2echarts4,后来更新到了vue3echarts5,结果遇到echarts无法绽放的问题。 问题描述 官网示例…

PDF、Word、Excel文件前端预览实操干货都在这!

随着Odoo在各个行业领域的深入应用,对Odoo的前端交互体验要求也越来越高。 我们在项目开发中常常会遇到,需要上传文件并预览的问题。 这里是我遇到的需求,并完成的一个小demo。 在Odoo中实现文件上传 首先我们需要在qweb页面中加入上传的…

Chrome浏览器插件开发v3版本第二篇:改变页面布局案例

跟着官方教程走才是硬道理:https://developer.chrome.com/docs/extensions/mv3/getstarted/tut-focus-mode/ 老规矩,搭建基本的项目结构:创建一个manifest.json文件 {"manifest_version":3,"name":"Focus",&…