神经网络压缩图像

在这里插入图片描述

简介

典型的压缩管道由四个组件组成:
编码:输入图像 x x x通过编码器函数 ε \varepsilon ε,将其转换为潜在表示 z z z
量化:截断 z z z以丢弃一些不重要的信息
熵编码:使用某种形式的熵编码(例如:算术编码)来无损地存储截断的潜在 z ^ \hat z z^
解码:原始 x x x被重构为通过使用 z ^ \hat z z^通过解码器函数 D D D获得
x ^ \hat x x^

在这里插入图片描述
需要注意的是,压缩失真主要是由量化步骤造成的——编码器可以是一个双射函数。我们根据某种失真度量来衡量原始图像与重构图像之间的接近程度,其中常见的选择是平方误差 d d d

d ( x , x ^ ) = ∣ ∣ x − x ^ ∣ ∣ 2 2 d(x,\hat x)=||x-\hat x||^2_2 d(x,x^)=∣∣xx^22
它使得图像数据在压缩和解压缩过程中丢失了一些信息,因此导致了压缩的失真。失真度量是用来衡量原始图像和压缩后的重建图像之间的差异程度的指标,通常使用的是平方误差,即重建像素值与原始像素值之间的差的平方。

虽然传统的压缩方法(例如JPEG)独立地优化了这些组件中的每一个,但基于神经的学习方法可以联合优化它们,这可能是非常有益的。自然地,这种神经方法建立在自动编码器架构上,由三个可学习的组件组成:编码器 ε θ \varepsilon_\theta εθ,解码器 D ψ D_\psi Dψ和熵模型 p ζ p_\zeta pζ,其中 θ \theta θ ψ \psi ψ ζ \zeta ζ是可训练的参数。

上文的速率失真理论在图像压缩中是一种重要的概念

用于平衡压缩比特率(速率)和压缩图像质量之间的关系。以下是速率失真理论在图像压缩中的详细解释:

  • 速率(Rate):速率指的是用于表示和传输图像信息所需的比特数。在图像压缩中,我们希望以最小的比特数来表示图像,以减少存储和传输成本。通常情况下,速率与压缩比特率直接相关,即速率越低,表示压缩得越好。
  • 失真(Distortion):失真是指压缩后的图像与原始图像之间的差异程度。在图像压缩中,失真通常以图像的均方误差(MSE)来衡量,即压缩后图像像素与原始图像像素之间的平均差的平方。压缩时,我们希望尽量减小失真,使压缩后图像尽可能接近原始图像。
  • 速率失真函数(Rate-Distortion Function):速率失真函数描述了在给定失真水平下,所需的最小比特率。在图像压缩中,速率失真函数用于评估不同压缩算法或参数设置下的压缩性能。通常情况下,我们希望在给定的失真水平下,找到最小的速率失真函数值,以实现高效的图像压缩。
  • 速率失真优化(Rate-Distortion Optimization):速率失真优化是指在给定失真水平的约束下,通过调整压缩算法或参数来最小化所需的比特率。在图像压缩中,速率失真优化的目标是找到最佳的压缩方案,以在给定失真水平下实现最小的比特率,或在给定比特率下实现最小的失真。

当我们进行图像压缩时,我们通常希望在减少文件大小(即减少比特率或速率)的同时尽可能地保持图像的质量。速率失真理论就是帮助我们找到这种平衡的一种方法。
首先,我们要明白,压缩图像就是要以尽量少的比特(或者说数字信息)来表示图像,这样就可以节省存储空间或者传输带宽。但是,当我们减少了比特率时,压缩后的图像质量往往会下降,因为我们丢失了一些原始图像中的细节和信息。
速率失真理论告诉我们,存在一种平衡点,在这个点上,我们以最小的比特率来压缩图像,同时仍然保持了所需的图像质量。这个平衡点取决于所使用的压缩算法和质量度量标准。
换句话说,速率失真理论帮助我们找到了一个最优的压缩方案,即在压缩图像时,我们尽可能地减少比特率,但是又不至于使图像质量变得太差。这样,我们就可以在存储或传输图像时达到更高的效率,同时又不牺牲图像的观感质量。

那么如何将这个概念加入到神经网络编码中呢

在这篇论文中《Improving Statistical Fidelity for Neural Image Compression with Implicit Local Likelihood Models》介绍了一种方法,下文将以这篇论文为基础展开理论介绍

论文地址:https://proceedings.mlr.press/v202/muckley23a/muckley23a.pdf

代码地址:https://github.com/facebookresearch/NeuralCompression/tree/main/projects/illm

在神经网络编码中引入速率失真理论的关键在于将其约束条件融入训练过程中,以平衡压缩率、失真度量和统计保真度。这需要设计合适的损失函数和训练目标,以确保编码器和解码器的性能在压缩数据时能够尽可能地接近最优的速率失真性能。接下来,我们将探讨如何将速率失真理论融入到神经网络编码中,并详细介绍其中涉及的方法和公式。

符号表示

我们使用了一些数学符号和概念来描述神经网络编码器的设计。

首先引入了使用概率空间 ( Ω , F , P ) (Ω,F,P) ΩFP来描述随机变量的行为。在这里, Ω Ω Ω代表样本空间, F F F代表事件空间, P P P则是概率函数,用于描述事件发生的可能性。

然后引入了两个随机变量, X : Ω → X X:Ω→X XΩX Y : Ω → Y Y:Ω→Y YΩY,它们分别将样本空间映射到 X X X Y Y Y的值域 ,它们分别表示原始信号和编码后的信号,这两个随机变量都是函数,将样本空间映射到它们的取值范围上。我们用大写字母表示随机变量,例如 X X X Y Y Y

用小写字母表示它们的具体取值,如 x ∈ X x ∈ X xX。分布函数 P X P_X PX表示 X X X的概率分布,而 p x px px表示 P X P_X PX的概率质量函数。还引入了条件分布表示 P X ∣ Y P_{X|Y} PXY,它描述了在给定 Y Y Y的情况下 X X X的分布情况。

这实际上是一系列概率测度,对于每个y的取值,都存在相应的条件分布 P X ∣ Y = y P_{X|Y=y} PXY=y。期望值用 E x ∼ P X [ q ( x ) ] E_{x∼PX}[q(x)] ExPX[q(x)]表示,也可以简写为 E [ q ( x ) ] E[q(x)] E[q(x)]

速率失真感知理论

在有损压缩中,目标是尽可能用尽量少的比特(比特率)存储离散随机变量 X X X的结果 x ∼ P X x∼P_X xPX,例如自然图像,同时确保重构 x ^ ∼ P X ^ ∣ x \hat x∼P_{\hat X|x} x^PX^x的质量水平不低于 τ τ τ。这个方法表述为速率失真理论(Shannon,1948)。Shannon得出的最佳比特率R由速率失真函数表征:

在这里插入图片描述

其中 I ( ⋅ ; ⋅ ) I(·;·) I(⋅;⋅)表示互信息, ρ ( ⋅ , ⋅ ) ρ(·,·) ρ(⋅,⋅)是一个失真度量。Blau & Michaeli(2019)将上述速率失真函数扩展为另一个约束方法,该约束方法表征了重构的统计数据与真实数据分布的统计数据之间的相似程度:

在这里插入图片描述

这里 d ( ⋅ , ⋅ ) d(·,·) d(⋅,⋅) 是分布之间的某种差异度量,如Kullback-Leibler散度(KLD)。

接下来,将展示如何通过逼近和放宽受限速率失真感知函数 R ( τ , σ ) R(τ,σ) R(τ,σ) 来构建可微分的训练目标。也就是损失函数

有损压缩编解码器损失优化

在有损压缩算法中,我们的目标是设计一个编码器和解码器,能够将原始数据 x x x压缩成潜在表示 y y y,并能够从该潜在表示重构出近似原始数据 x ^ \hat{x} x^。为了在训练过程中平衡压缩率、失真度量和统计保真度,我们需要引入概率空间和相关的概率分布。

我们假设源符号 x x x将被编码成一个(量化的)潜在表示 y = f ( x ) y = f(x) y=f(x),其中 f : X → Y f:X→Y fXY。随后,我们使用一个熵编码器 g ω ( y ) g_ω(y) gω(y)来将 y y y无损地压缩成其可能的最短比特串。

r ( x ) : = ∣ g ω ( y ) ∣ r(x) := |g_ω(y)| r(x):=gω(y)表示由 g ω g_ω gω生成的二进制串的比特率或长度。由于发送方和接收方都具有熵编码器的共同知识,接收方可以应用解码器 h : Y → X h:Y→X hYX来恢复源信号 x ^ = h ( y ) = f ◦ h ( x ) \hat x = h(y) = f ◦ h(x) x^=h(y)=fh(x)

我们将编码器、解码器和熵编码器的元组称为有损编解码器 ( f , g ω , h ) (f, g_ω, h) f,gω,h。在这个设计中,我们的目标是通过学习参数化的有损编解码器 ( f φ , g ω , h υ ) (f_φ, g_ω, hυ) fφ,gω,hυ来优化。在这种情况下,编码器 f φ f_φ fφ和解码器 h υ h_υ hυ是神经网络,熵编码器 g ω g_ω gω将由对表示的边缘参数化近似定义,换句话说,我们需要学习 P Y ∣ ω P_{Y|ω} PYω。为了实现这一目标,我们需要将速率失真理论的约束应用于训练目标中,以便在优化过程中平衡比特率、失真度量和统计保真度。

使用拉格朗日乘数放松(1)速率和(2)失真感知函数的约束,并考虑到统计保真度约束,我们的训练目标如下:

在这里插入图片描述

在这里详细描述我们损失编解码器的功能形式之前,需要说明如何在实践中近似计算分布的差异。

机械地说,通常很容易为 ρ ( f φ ◦ h υ ( x ) , x ) ρ(f_φ ◦ h_υ(x), x) ρ(fφhυ(x),x)指定失真函数,但最小化 P X ^ P_{\hat X} PX^ P X P_X PX 之间的差异项 d ( P X ^ , P X ) d(P_{\hat X} , P_X) d(PX^,PX) 可能会更加复杂。一种常用的技术是使用生成对抗网络(GANs)来优化对称的Jensen-Shannon散度(JSD)(Goodfellow等,2014;Nowozin等,2016)。JSD是分布之间的一种合适的散度度量,这意味着如果有足够的训练样本并且模型类 P X ^ P_{\hat X} PX^ 足够丰富,就可以准确地近似 P X P_X PX。Goodfellow等(2014)展示了JSD通过众所周知的GAN最小最大优化问题得到最小化:

在这里插入图片描述

其中 D ϕ D_ϕ Dϕ是一个参数化的鉴别器函数(具有参数 ϕ ϕ ϕ),用于估计一个样本是否来自真实数据分布,我们使用了简写 x ^ = f φ ◦ h υ ( x ) \hat x = f_φ ◦ h_υ(x) x^=fφhυ(x)。在神经压缩中,假设 P X ^ P_{\hat X} PX^ 是联合分布 P X P X ^ ∣ x P_XP_{\hat X|x} PXPX^x 的边际分布。为了计算(4)中的经验风险,我们为 x x x x ^ \hat x x^ 绘制不同的样本。从(4)中反转符号的生成器损失函数是:

在这里插入图片描述

可以将其用作(3)中 d ( P X ^ , P X ) d(P_{\hat X} , P_X) d(PX^,PX) 的替代项(用于鉴别器的交替最小化)。这种方法已经应用于几种神经压缩系统中(Agustsson等,2019;Mentzer等,2020)。与用于图像生成的GAN相比, P X ^ P_{\hat X} PX^ 的任务由于神经压缩任务的属性而大大简化。因此,重新设计了鉴别器,以反映压缩所需的投影的局部性。

论文结构和方法

在这里插入图片描述
图 2. 使用基于鉴别器的差异最小化的学习有损压缩系统概述。图像 x x x 被编码并量化为潜变量 y y y。概率模型 g ω g_ω gω 可以对 y y y 进行熵编码,并估计速率 r φ , ω r_{φ,ω} rφ,ω。解码器 h υ h_υ hυ 将量化的 y y y 转换回压缩图像 x ^ \hat x x^。为了提高统计保真度,还通过一个鉴别器 D ϕ D_ϕ Dϕ 进行训练,该鉴别器试图匹配预训练标签器 u u u 的标签。

自动编码器架构

在这里,描述了编码器 f φ f_φ fφ,解码器 h υ h_υ hυ 以及由熵编码器 g ω g_ω gω 使用的潜在边缘 P Y ∣ ω P_{Y|ω} PYω。由于速率失真函数与变分推断之间的关系,神经编解码器可以被视为一种变分自动编码器的类型(Balle等人,2017)。与神经压缩领域的先前工作一致,使用了两级分层自动编码器来建模数据分布,也称为超先验模型(Balle等人,2018)。这个模型类别以自身为模型的主导先验 P Y ∣ ω P_{Y|ω} PYω 命名,本身被建模为一个潜变量模型:

P Y ∣ ω = ∑ P Y ∣ z ; ω P z P_{Y∣ω}=\sum P_{Y∣z;ω}P_z PYω=PYz;ωPz

先前的工作对先验分布进行了不同的选择,例如条件高斯(Balle等人,2018;Minnen等人,2018;Mentzer等人,2020)。采用了Minnen等人(2018)的方法,对高斯的均值和尺度进行条件设定,并将其称为均值-尺度超先验模型。对于编码器和解码器的架构,遵循了Mentzer等人(2020)的方法,其使用的模型比Minnen等人(2018)使用的模型更大更深。

隐式局部似然模型

为了开发的似然模型,假设可以访问一个标签向量函数 u : X → 0 , 1 ( C + 1 ) × W × H u:X→{0,1}^{(C+1)×W×H} u:X0,1(C+1)×W×H。对于数据集中的任何 x x x u u u 输出一个三维空间分布的独热目标向量图,其中 C C C 是标签数量, W W W 是潜空间宽度, H H H 是潜空间高度。将零标签保留为“假”类,用于指示重构图像,并使用其余的 C C C 类来标记原始图像。定义 b 0 b0 b0 作为一个独热目标 ( C + 1 ) × W × H (C+1)×W×H (C+1)×W×H 张量,其中 C C C 维度中的零元素的值为 1,实际上是标准 GAN 术语中的“假”类。

遵循Sushko等人(2022),现在可以定义两个 c-GAN 风格的对抗损失函数:

在这里插入图片描述

其中 D ϕ ( x ) D_ϕ(x) Dϕ(x) 现在是一个矢量值函数, ⟨ ⋅ , ⋅ ⟩ ⟨·,·⟩ ⋅,⋅ 表示内积。请注意,与其仅区分原始和重构图像不同,这里鉴别器的目标是区分原始图像的 C C C 个图像标签,以及检测重构图像。生成器损失对应于Goodfellow等人(2014)提出的非饱和 GAN 损失,扩展到多标签情况。它的目标是为重构图像最大化相应实际图像标签的鉴别器概率。这实际上允许鉴别器在标签中使用更多的局部信息。

标签函数的选择

标签函数的选择影响方法的成功。方程(6)和(7)允许广泛类别的标签,包括当设置 W = H = 1 W = H = 1 W=H=1 时的全局图像标签,以及 H , W > 1 H,W > 1 HW>1 时的空间分布标签。由于目标是在隐式似然模型中强制执行局部性,论文选择应用 VQ-VAEs(van den Oord等人,2017;Razavi等人,2019)。通过向量量化,将 VQ-VAE 自动编码器的潜空间划分为具有集群均值 m c c = 1 C {mc}_{c=1}^{C} mcc=1C C C C 个簇。对于原始图像,设置为如下

在这里插入图片描述

这里 e ( i , j ) e^{(i,j)} e(i,j) 是来自 VQ 编码器位置 ( i , j ) (i, j) (i,j) 处的通道向量。VQ-VAE 编码器将潜向量空间划分为 C C C 个Voronoi单元格。由于Voronoi单元格是凸的,任何两点都是路径连通的。此外,由于解码器架构是连续映射,因此即使在重构空间 X X X 中,路径连通性仍然保持不变。换句话说,使用 VQ-VAE 方法,标签空间的局部性意味着图像空间的局部性。这与其他标签方法形成对比,例如 ImageNet 类。没有用于生成潜在代码的模型,论文的方法不考虑无条件生成,尽管可以使用自回归技术实现这一点。我们的 VQ-VAE 架构基于带有一些修改的 VQ-GAN 变体(Esser等人,2021):

论文使用 ChannelNorm(Mentzer等人,2020)代替 GroupNorm,以改善不同图像区域的归一化统计稳定性。
我们使用 XCiT(El-Nouby等人,2021)用于注意力层,以提高计算效率。

鉴于此架构,似然函数的数量由潜空间的空间大小( W × H W×H W×H)和 VQ-VAE 的代码本大小 C C C 控制。更大的潜空间和代码本将导致更小的似然邻域。除非另有说明,使用 256 × 256 256×256 256×256 图像的 32 × 32 32×32 32×32 潜空间和代码本大小为 1024 1024 1024

鉴别器架构

对于鉴别器,论文使用了 U-Net 架构(Ronneberger等人,2015),这是Sushko等人(2022)在语义图像合成背景下提出的。在他们的情况下,鉴别器的目标是使用语义分割图的条件标签为真实图像的像素打上相应的标签,同时将生成图像中的像素标记为“假”。在这个情况下,鉴别器不是预测手动注释的语义类别,而是预测标签函数 u u u 提供的标签中的类别。U-Net 变体使用了 LeakyReLU(Xu等人,2015)作为激活函数,并构建在残差块上,而不是原始 U-Net 的前馈块上(Ronneberger等人,2015)。由于潜在分辨率与图像分辨率不同,在 32 × 32 32×32 32×32 潜空间的输出路径处截断了 U-Net 的输出路径,该潜空间由 u ( x ) u(x) u(x) 提供。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言中的数据结构- -链表(1)

前言 前几节我们学习了C语言中的数据结构--顺序表,该数据结构类型相较于普通的数组而言有很多的优势,但是它还是在一定层面上存在着一些缺陷,可以归纳为以下三点: 1. 中间/头部的插⼊删除,时间复杂度为O(N)【数组的遍…

vue3+高德地图(或echarts)+turfjs实现等压线,色斑图(用于显示气象,环境等地图场景)

首先是turf.js(英文官网),也有中文网不过也就目录翻译了一下. 高德官网自行获得key echarts官网 使用turf的isobands api实现. 数据: 需要准备geojson格式经纬度信息业务值(比如温度,高度,光照只要是number值什么数据都可以) 国内各地区geojson数据点这里获得 参考的是这位大佬…

Python GUI开发模块之ttkbootstrap使用详解

概要 在Python的GUI开发中,使用Tkinter是一种常见的选择。 而ttkbootstrap模块则是在Tkinter的基础上提供了更加现代化和美观的界面设计风格,使得开发者可以快速构建出各种吸引人的GUI应用程序。 本文将对ttkbootstrap模块进行深入分析,并结合多种场景下的Python代码案例…

关于伴行天使车载监护器的技术路线

为了判断分析并反馈孩童是否昏睡状态,以预防因分心后排而导致的交通事故,本团队根据基于回归树对齐算法中获取的数据,建立了疲劳度评分机制。 本评分机制采用人脸关键点智能标注模型检测人脸,通过人脸识别68特征点检测、分别获取…

端口映射软件可以做什么? 快解析如何设置端口映射?

说到端口映射,首先说说nat。简单地说,nat就是在局域网内部网络中使用内部地址,而当内部节点要与外部网络进行通讯时,就在网关处,将内部地址替换成公用地址,从而在外部公网(internet)…

汽车车灯用肖特基二极管,选什么型号好?

肖特基二极管种类繁多,有低压降肖特基二极管、通用型肖特基二极管、快速恢复型肖特基二极管、高功率肖特基二极管、汽车级肖特基二极管等等,其中低压降肖特基二极管和汽车级肖特基二极管是二极管厂家东沃电子的核心优势产品。关于东沃电子推出的低压降肖…

WP免费主题下载

免费wordpress模板下载 高端大气上档次的免费wordpress主题,首页大图全屏显示经典风格的wordpress主题。 https://www.wpniu.com/themes/289.html 免费WP主题 蓝色简洁实用的wordpress免费主题模板,免费主题资源分享给大家。 https://www.wpniu.com/…

【计算机毕业设计】游戏售卖网站——后附源码

🎉**欢迎来到琛哥的技术世界!**🎉 📘 博主小档案: 琛哥,一名来自世界500强的资深程序猿,毕业于国内知名985高校。 🔧 技术专长: 琛哥在深度学习任务中展现出卓越的能力&a…

基于JSP+Mysql+HTml+Css仓库出入库管理系统设计与实现

博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…

SpringBoot3 集成Springdoc 实现Swagger3功能

说明: 只通过引用org.springdoc 的两个包就可以使用Swagger3 功能(步骤1);如想更美观及实现动态认证的开启与关闭,及Swagger3登录认证等功能,需实现(步骤1、2、3)的配置; 1、 引包…

python将pdf转为docx

如何使用python实现将pdf文件转为docx文件 1.首先要安装pdf2docx库 pip install pdf2docx2.实现转换 from pdf2docx import Converterdef convert_pdf_to_docx(input_pdf, output_docx):# 创建一个PDF转换器对象pdf_converter Converter(input_pdf)# 将PDF转换为docx文件pdf…

Qt nodeeditor ROI 组态软件

节点显示节点连接属性设置插件导入导出 展示:

谷歌浏览器的开发者插件vue-devtools

在这里我留下一个git地址用来下载插件包,首先在自己喜欢的位置创建一个新的文件夹,起一个自己喜欢的文件夹名字,下载到包后,然后点进文件夹里下载依赖,npm install,下载后如下面这个样子 git clone https://gitee.com…

【40分钟速成智能风控16】模型训练

目录 ​编辑 模型训练 逻辑回归 XGBoost Wide&Deep 模型部署 模型训练 确定了最终的入模变量,终于进入模型训练的环节了,在这个环节我们需要选定模型结构,调节模型超参数,以及评估模型的效果。为了得到一个兼具区分度和…

C#引用外部组件的常用方法

我们在开发程序过程中,时常会使用到第三方组件,比如一些通信、UI组件等。常用的引用方法有下面几种。 01 NuGet引用 NuGet是.NET的一个包管理平台,很多开源组件会通过NuGet进行管理和发布。比如我们常用的S7NetPlus等。 从NuGet中引用组件…

k8s高可用集群部署介绍 -- 理论

部署官网参考文档 负载均衡参考 官网两种部署模式拓扑图和介绍 介绍两种高可用模式 堆叠 拓扑图如下(图片来自k8s官网): 特点:将etcd数据库作为控制平台的一员,由于etcd的共识算法,所以集群最少为3个&…

访问者模式【行为模式C++】

1.概述 访问者模式是一种行为设计模式, 它能将算法与其所作用的对象隔离开来。 访问者模式主要解决的是数据与算法的耦合问题,尤其是在数据结构比较稳定,而算法多变的情况下。为了不污染数据本身,访问者会将多种算法独立归档&…

韩顺平 | 零基础快速学Python(16) 文件处理

文件 输入与输出 输入:数据从数据源(文件)到程序(内存); 输出:数据从程序(内存)到数据源(文件)。 #mermaid-svg-06PG6JZq4jJMV1oH {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-sv…

如何使用Docker部署Django项目?

第一步:创建Dockerfile文件 在django项目的根目录中创建一个名为Dockerfile的文件,并写入如下配置: # 使用 Python 3.12 作为基础镜像 FROM python:3.12# 设置工作目录 WORKDIR /app# 复制项目文件到工作目录 COPY . /app# 设置清华 pip 镜…

vue webpack打包配置生成的源映射文件不包含源代码内容、加密混淆压缩

前言:此案例使用的是vue-cli5 一、webpack源码泄露造成的安全问题 我们在打包后部署到服务器上时,能直接在webpack文件下看到我们项目源码,代码检测出来是不安全的。如下两种配置解决方案: 1、直接在项目的vue.config.js文件中加…