端到端的图像压缩------《End-to-end optimized image compression》笔记

2023-11-19

论文地址:https://arxiv.org/abs/1611.01704

代码地址:https://github.com/tensorflow/compression

Balle  google大神,入门必读。该文章仅供本人笔记用,如果问题欢迎讨论。

简介

整体算法分为三个部分:非线性分析变换(编码器),均匀量化器和非线性合成边变换(解码器),在整个训练框架上联合优化整个模型的率失真性能。在某些条件下,松弛损失函数可以解释为由变分自动编码器实现的生成模型的对数似然,即和变分自编码器的损失函数某种情况下有点像。另外,每一个折衷参数对应一个压缩模型,所以整个R-D曲线是由模型构成的R-D点形成的。

内容

整体算法结构以及流程如下:

!](https://img-blog.csdnimg.cn/20201205140711473.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMjgxNDI1,size_16,color_FFFFFF,t_70)

在这里插入图片描述
x x x x ^ \hat{x} x^ 分别代表输入的原图和经过编解码器后的重建图片。 g a g_a ga表示编码器提供的非线性分析变换, y y y即由输入图片经过编码器网络后得到的潜在特征,通过量化器 q q q后,得到 量化后结果: y ^ \hat{y} y^,再通过 g s g_s gs解码器重建图片结果.

其中,通过对 y y y的码率估计得到 R R R,计算原图 x x x x ^ \hat{x} x^ 的失真得到 D D D g p g_p gp是指一种失真变换,可以将原图和重建图进行通过 g p g_p gp 转化到感知空间上进行计算,,直观的作用可以理解为失真计算: D = d ( x , x ^ ) D=d(x,\hat{x}) D=d(x,x^),例如PSNR,MS-SSIM,或者其他感知域如 VMAF 等。通过得到的 R R R D D D 进行率失真联合优化,定义损失函数为: L = λ ⋅ D + R L=\lambda\cdot D+R L=λD+R通过 λ \lambda λ 参数进行码率的选择控制, λ \lambda λ 大则训练得到的模型的重建图失真,而压缩后的码流大,反之亦然。

激活层改进:受到生物神经元的启发,在编码器与解码器中,论文使用了GDN(广义除数归一化),该激活层在论文中《Density modeling of image using a generalized normalization transformation》有着详细的描述,该激活层实践中比BN层更适用于图像重建工作。其中与BN层的差别:BN层重新调整网络中线性滤波器的响应,以便将其保持在合理的操作范围内。这种类型的归一化不同于局部增益控制,因为在所有空间位置上重新缩放因子是相同的。此外,一旦训练完成,缩放参数通常是固定的,这将归一化转换为数据的仿射变换,不同于GDN那样,GDN是空间自适应的,并且可能是高度非线性的。

量化问题:传统的图像编码中,量化有着不可微分的问题,为分段函数,且在非边界点的导数为0,截断反向传播,在边界点则不存在导数。作者采用基于概率模型连续松弛的代理损失函数(没理解什么意思),用加性均匀噪声代替量化步骤(就是加了-0.5到0.5区间的均匀噪声)。

前向传播

在非线性分析变换(编码器)中 g a g_a ga 包含有三个阶段:卷积,降采样(就是用的卷积层进行的降采样工作),GDN归一化。以下公式预警:

卷积 v i k ( m , n ) = ∑ j ( h k , i j ∗ u j k ) ( m , n ) + c k , i v_{i}^{k}(m,n)=\sum\limits_{j}(h_{k,i j}*u_j^{k})(m,n)+c_{k,i} vikm,n=j(hk,ijujk)(m,n)+ck,i v i k ( m , n ) v_{i}^{k}(m,n) vikm,n) i i i个输出的通道在第 k k k层的网络的输入,总共有3层,所以k最大为3,其中( m m m, n n n)代表长宽的二维的位置。 ∗ * 是卷积操作,上述公式描述输入在
经过卷积层后的输出。

采样 w i k ( m , n ) = v i k ( s k m , s k n ) w_i^{k}(m,n)=v_{i}^{k}(s_km,s_kn) wik(m,n)=vikskm,skn 上述公式, s k s_k sk是采样因子,即几倍采样。一般采样与卷积运算在代码中统一实现。

GDN u i k + 1 ( m , n ) = w i k ( m , n ) ( β k , i + ∑ j r k , i j ( w j k ( m , n ) ) 2 ) u_i^{k+1}(m,n)= \dfrac{w_i^{k}(m,n)}{\sqrt{(\beta_{k,i}+\sum\limits_jr_{k,ij}(w_j^{k}(m,n))^2)}} uik+1(m,n)=(βk,i+jrk,ij(wjk(m,n))2) wik(m,n)所有的待优化参数 h h h(卷积核权重), c c c(卷积核偏置), r r r(GDN的归一化系数)都在整个端到端中被优化。

后续在解码端中的公式不例举辽,这部分内容说白了就是把神经网络作用给抽象公式化。

变换优化问题

     在传统的图像编码中,对于DCT生成的系数需要进行量化,通常采用了矢量量化的形式并且结合熵编码进行率失真控制。在该论文并没有直接在编码空间进行最优量化(矢量),而是通过一个固定的标量量化器进行量化(四舍五入),试图让分线性变换(编码器)进行自动学习,以学习到的方式扭曲量化空间,从而有效实现矢量量化。整体框架通过以下公式进行优化: L = − E [ l o g 2 P q ] + λ ⋅ E [ d ( z , z ^ ) ] L=-E[log_2P_q]+\lambda\cdot E[d(z,\hat{z})] L=E[log2Pq]+λE[d(z,z^)]通过计算熵与失真进行率失真优化,其中两个期望值通过训练集的平均值进行拟合。并且通过非线性分析学习量化特征即矢量量化结构,则本文采用标准量化: y i ^ = q i = r o u n d ( y i ) \hat{y_i}=q_i=round(y_i) yi^=qi=round(yi) i i i 覆盖了所有的,待编码的数值,并且 y i ^ \hat{y_i} yi^ 的边缘密度一系列离散概率密度质量给出: P q i ( n ) = ∫ n − 1 / 2 n + 1 / 2 p y i ( t ) d t P_{q_i}(n)=\int_{n-1/2}^{n+1/2}p_{y_i}(t)dt Pqi(n)=n1/2n+1/2pyi(t)dt p y i ( t ) p_{y_i}(t) pyi(t) y y y的概率密度函数,由于四舍五入,在某一整数的(-0.5,0.5)区间内都会量化为该整数,则通过积分的形式计算这一区间内的数值的出现概率,得到量化后的整数的出现概率。

     上述公式均涉及到量化问题,但是量化会导致不可微分,阻断反向传播优化的问题。论文中采用了添加(-0.5,0.5)范围的均匀噪声,在训练过程中,即采用这种形式近似可微以用于反向传播的优化,在推理过程中,则依旧使用 r o u n d round round 函数进行四舍五入(因为不用进行优化了),使用均匀噪声有两个优点:

首先, y ~ = y + n o i s e \tilde{y} = y+noise y~=y+noise 的密度函数是 q q q的概率质量函数的连续松弛

y i y_i yi是编码空间的元素,就是需要被编码的值, y i ^ \hat{y_i} yi^ 是四舍五入后的值, y i ~ \tilde{y_i} yi~ 是通过添加噪声后的值,上述是三者的概率密度函数(PDF),离散的 y i ^ \hat{y_i} yi^是概率质量函数(PMF),其中黑点的数值由实线在各自区间内取积分得到的,但是其实不一定等于虚线在区间内的积分,只能是近似关系(论文中说相等,我不信=-=)。即可以通过这种近似关系,合理等于两者的微分熵,换个说法就是加均匀噪声后,不影响码率的估计。

其次,独立的均匀噪声就其边际矩(我也不知道什么是边际矩)而言近似于量化误差,并且经常被用作量化误差的模型(Gray and Neuhoff,1998)。

针对y的宽松概率模型和熵代码在代码空间中假设独立的边际,则通过进行参数建模以减少码率估计模型与实际模型之间的差距,具体使用精细采样的分段线性函数,这些函数与一维直方图的更新类似(请参见附录)即通过神经网络生成编码点的PMF,通过PMF的积分求得每个特征点对应的可导形式的概率值,通过对概率值求自信息得到估计的码率点,在前向传播中,通过训练阶段生成的神经网络生成分位点与CDF,将CDF与待编码点输出range coder进行熵编码。
以用于熵编码。 由于编码数值的概率密度函数被均匀噪声平滑,这部分会导致一定的误差,但是通过减小采样间隔可以使得模型误差任意小。

整个过程可以公式得到: L ( θ , ϕ ) = E x , △ y [ − ∑ i l o g 2 p y i ˉ ( g a ( x ; ϕ ) + △ y ) ; ψ ( i ) + λ d ( g p ( g s ( g a ( x ) ; ϕ ) ) , g p ( x ) ) ] L(\theta,\phi)=E_{x,\triangle y}[-\sum_ilog_2p_{\bar{y_i}}(g_a(x;\phi)+\triangle y);\psi_{(i)}+\lambda d(g_p(g_s(g_a(x); \phi)),g_p(x))] L(θ,ϕ)=Ex,y[ilog2pyiˉ(ga(x;ϕ)+y);ψ(i)+λd(gp(gs(ga(x);ϕ)),gp(x))]量化以及 ψ \psi ψ的分段线性逼近很适合随机优化(我看不出=-=!)

变分推导问题

再论,等下一篇超先验网络结构模型进行推导吧。

实验结果

在这里插入图片描述
左图为量化所引起的误差和均匀噪声引起的误差的关系,右图为离散情况下的熵率以及可微分情况下的熵率的关系,可以得出,本文提出的量化模型以及熵率估计模型与实际中量化引起的误差和待编码值得熵率近似一致。

在这里插入图片描述
以及在实际中,得到得R-D性能,PSNR,MS-SSIM性能指标熵超过了JPEG2000压缩标准。其中在PSNR度量标准上是通过MSE为失真指标进行训练的,而MS-SSIM是在MS-SSIM指标上进行训练到。并不是一种失真模型对应两个失真指标。即MSE训练了六个lambda的模型,MS-SSIM训练了六个lambda的模型。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过主观感受可以看出,本文提出的算法优于JPEG以及JPEG2000。

结论

该论文还是着重与量化和熵率估计的问题,论述了添加均匀噪声的量化的合理性以及对于熵率估计的影响,包括提出了如何使得熵率估计模型可微分以及CDF的学习以用于熵编码的情况。并且确定了在图像压缩框架中,标量量化可以通过编码器的非线性分析达到矢量量化的效果(期望这种非线性分析可以学习得到)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

端到端的图像压缩------《End-to-end optimized image compression》笔记 的相关文章

  • 基于ShuffleNetv2-YOLOv4模型的目标检测

    目录 1 引言 摘要 1 1 说明 1 2替换完成的工程请参考gitee 2 网络结构基础 2 1YOLOv3 2 1 YOLOv4算法 2 3 ShuffleNetv2 2 4 替换后的网络结构 3 实验结果 3 1实验环境配置及数据集介
  • 仅需一个样本即可定制个性化的SAM

    Personalize Segment Anything Model with One Shot https arxiv org pdf 2305 03048 pdf https github com ZrrSkywalker Person
  • 【计算机视觉】消融实验(Ablation Study)是什么?

    文章目录 一 前言 二 定义 三 来历 四 举例说明 一 前言 我第一次见到消融实验 Ablation Study 这个概念是在论文 Faster R CNN 中 消融实验类似于我们熟悉的 控制变量法 假设在某目标检测系统中 使用了A B
  • SimMIM:一种更简单的MIM方法

    自从何恺明的MAE 点击蓝字查看文章详情 出来之后 基于MIM Masked Image Modeling 的无监督学习方法越来越受到关注 这里介绍一篇和MAE同期的工作 SimMIM A Simple Framework for Mask
  • Opencv学习笔记(三)线性及非线性滤波

    大纲 1 滤波综述 2 方框滤波 3 均值滤波 4 高斯滤波 5 中值滤波 6 双边滤波 一 滤波综述 图像的滤波指的是在尽量保证图像细节特征的的情况下对图像中的噪声进行抑制 又因为图像的能量大部分集中在低频或者中频的区域 图像大部分区域是
  • python人脸识别(转载)

    源码出处 http www cnblogs com AdaminXie 该项目笔记是基于下面博客的摘抄 Python 3 利用 Dlib 实现摄像头实时人脸识别 coneypo 博客园 cnblogs com Python 3 利用 Dli
  • 图像特征提取技术

    目 录 前 言 基于颜色的特征提取 1 颜色空间 2 直方图以及特征提取 基于纹理的特征提取 1 灰度共生矩阵 2 tamura纹理 基于深度神经网络的图像处理 前 言 图像特征提取属于图像分析的范畴 是数字图像处理的高级阶段 本文将从理论
  • 【论文】F1的单位是%还是1,mAP的单位是%还是1?答:F1的单位是1,mAP的单位是%

    文章目录 前提 1 F1的单位是 还是1 2 mAP的单位是 还是1 前提 以下回答均来自 chatgpt poe 感觉说的很正确 还参考了师兄师姐的论文的 答案应该是正确的 1 F1的单位是 还是1 F1分数的单位是 1 而不是百分比 F
  • 软件测试/人工智能丨计算机视觉场景中,如何处理视频/图片数据并进行测试

    在计算机视觉中 处理视频和图片数据并进行测试是一个关键的任务 以下是一些常见的步骤和方法 处理图片数据 数据加载 使用图像处理库 例如OpenCV PIL 加载图像数据 将图像转换为模型所需的格式 通常是矩阵 预处理 标准化图像 将图像像素
  • 探索人工智能中的AI作画:创意、技术与未来趋势

    导言 AI作画是人工智能领域中一个备受关注的前沿应用 它将传统艺术与先进技术相结合 创造出令人惊艳的艺术品 本文将深入探讨AI作画的创意过程 技术原理以及未来可能的发展趋势 1 AI作画的创意过程 艺术风格迁移 AI作画通过学习大师的风格
  • 人工智能与底层架构:构建智能引擎的技术支柱

    导言 人工智能与底层架构的交融塑造了智能系统的基石 是推动智能时代发展的关键动力 本文将深入研究人工智能在底层架构中的关键作用 以及它对智能引擎的技术支持 探讨人工智能在计算机底层架构中的作用 以及这一融合如何塑造数字化未来 1 人工智能与
  • 讲解光流估计 liteflownet3

    目录 讲解光流估计 LiteFlowNet3 什么是 LiteFlowNet3 模型架构 训练与优化 应用与展望 结论 讲解光流估计 LiteFlowNet3 光流估计是计算机视觉领域的重要任务 其可以估计图像序列中每个像素的运动矢量 光流
  • 澳鹏干货解答!“关于机器学习的十大常见问题”

    探索机器学习的常见问题 了解机器学习和人工智能的基本概念 原理 发展趋势 用途 方法和所需的数据要求从而发掘潜在的商机 什么是机器学习 机器学习即教授机器如何学习的过程 为机器提供指导 帮助它们自己开发逻辑 访问您希望它们访问的数据 机器学
  • 什么是“人机协同”机器学习?

    人机协同 HITL 是人工智能的一个分支 它同时利用人类智能和机器智能来创建机器学习模型 在传统的 人机协同 方法中 人们会参与一个良性循环 在其中训练 调整和测试特定算法 通常 它的工作方式如下 首先 对数据进行人工标注 这就为模型提供了
  • 互操作性(Interoperability)如何影响着机器学习的发展?

    互操作性 Interoperability 也称为互用性 即两个系统之间有效沟通的能力 是机器学习未来发展中的关键因素 对于银行业 医疗和其他生活服务行业 我们期望那些用于信息交换的平台可以在我们需要时无缝沟通 我们每个人都有成千上万个数据
  • 详解数据科学自动化与机器学习自动化

    过去十年里 人工智能 AI 构建自动化发展迅速并取得了多项成就 在关于AI未来的讨论中 您可能会经常听到人们交替使用数据科学自动化与机器学习自动化这两个术语 事实上 这些术语有着不同的定义 如今的自动化机器学习 即 AutoML 特指模型构
  • 【图像配准】

    非配对配准 Non rigid registration 和配对配准 Rigid registration 是医学图像配准中常用的两种方法 它们有着不同的含义和应用 非配对配准 Non rigid registration 非配对配准是指将
  • 【图像融合】基于联合双边滤波和局部梯度能量的多模态医学图像融合研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 图像 文章
  • 回望计算机视觉会议ICCV的31年

    作者 原野寻踪 编辑 汽车人 原文链接 https zhuanlan zhihu com p 670393313 点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 全栈算法 技术交流群 本文只做
  • 3D点云检测神技 | UFO来了!让PointPillars、PV-RCNN统统涨点!

    作者 AI驾驶员 编辑 智驾实验室 点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 3D目标检测 技术交流群 本文只做学术分享 如有侵权 联系删文 在这篇论文中提出了一个关于在3D点云中检测未

随机推荐

  • VS-code出现注释乱码以及VS调试过程中出现汉字乱码问题

    文章目录 VS VS code 1 前言 2 方法 VS Notepad 方法 VS VS code 1 前言 Visual Studio Code 简称VS code 是如今我们常用的一款编辑器 但是可能一些用户会需要其他软件进行调试等
  • 一次线上生产系统内存泄漏排查与优化实践

    今天给大家分享一个我们之前基于dubbo开发一个线上系统时候遇到的内存泄漏生产问题的排查与优化实践经验 相信对于大家多看一些类似的案例 以后对于大家自己在线上系统遇到各种生产问题的时候 进行排查和优化的思路会有很大的启发 内存泄漏问题发生背
  • begin to drop messages due to rate-limiting

    对于syslog保存的日志会有很多重要信息 但是一旦打印的日志数量超过设置的阈值 就会丢掉 imuxsock pid 48 begin to drop messages due to rate limiting 这是在调试时不愿看到的 可以
  • 【论文笔记系列】AutoML:A Survey of State-of-the-art (上)

    之前已经发过一篇文章来介绍我写的AutoML综述 最近把文章内容做了更新 所以这篇稍微细致地介绍一下 由于篇幅有限 下面介绍的方法中涉及到的细节感兴趣的可以移步到论文中查看 论文地址 https arxiv org abs 1908 007
  • yolo 车辆测距+车辆识别+单目测距(双目测距)

    基于yolo目标检测算法实现的车前道路中的车辆和行人检测 并且可以估测出目标与本车之间的距离 一 视频展示 yolo车距1 订阅专栏获得源码 提供完整代码 无需看下文 二 单目测距原理 图中有一个车辆 且车辆在地面上 其接地点Q必定在地面上
  • 用KNN(K近邻算法)和ANN(人工神经网络)建立预测模型

    数据 输入 32 维的向量 输出一个值 有151组这样的数据 目的 用这样一组数据建立一个预测模型 输入32维的向量就能预测一个值 代码部分 1 导入工具包 在import pandas as pd import seaborn as sn
  • 机器学习算法Python实现:tfidf 特征词提取及文本相似度分类

    coding utf 8 本代码主要实现了对于商品名称根据tfidf提取特征词 然后基于已经训练好的word2vec模型 对每行商品的tfidf值大于某一阈值的特征词相似度匹配已经给定的商品类别 import jieba import ji
  • 有趣算法之C++函数模板

    C 函数模板 20200924 原文链接 https www runoob com w3cnote c templates detail html 原文正在慢慢理解中 模板是C 支持参数化多态的工具 使用模板可以使用户为类或者函数声明一种一
  • Qt-信号和槽

    一 Qt信号和槽机制 emit的使用 一 相关概念 1 信号 Signal 就是在特定情况下被发射的事件 例如PushButton 最常见的信号就是鼠标单击时发射的 clicked 信号 一个 ComboBox 最常见的信号是选择的列表项变
  • 【SQLSERVER】 "in"的替换方法

    期望效果 select From Empoylee Where Address1 Address2 in Select Address1 Address2 From EmpoyleeAdresses Where Country Canada
  • iOS架构-组件化(项目框架搭建2)

    静态库引用静态库 如果像上图一样 直接在业务层组件引用数据层组件的文件 则会报错 因为组件之间没有建立引用关系 如下图 静态库如何引用Pods第三方库 拷贝Podfile文件到项目 打开终端执行pad install 直接引用Pod下面的Y
  • VC++6.0调试工具使用初步

    摘要 程序设计初者学会IDE 集成开发环境 中提供的调试工具 是一件非常重要的事 本文在初学者有初步的程序设计体验 只需要掌握到控制结构 为前提 介绍了单步执行 断点设置及观察程序运行情况的方法 并配有练习的建议 方便读者的学习 相关博文
  • HTTP协议头部与Keep-Alive模式详解

    转自 https www byvoid com zhs blog http keep alive header 1 什么是Keep Alive模式 我们知道HTTP协议采用 请求 应答 模式 当使用普通模式 即非KeepAlive模式时 每
  • Bootstrap导航

    Bootstrap 导航 1 定义导航组件 基本结构 ul class nav li class active a href 首页 a li li a href 导航标题1 a li li a href 导航标题2 a li ul 1 1
  • Code39码和Code93码的区别

    条形码可以标示出产品的生产国 制造厂家 图书分类号 邮件起止地点 类别 日期等许多信息 因而在很多领域都得到了广泛的应用 尤其是那些可以同时支持字母 数字 字符这些字符集的条码 比如Code39和Code93 都是可以支持多种字符集的条形码
  • ios游戏开发

    知识系统 英文教程网站 http www csdn net article 2012 12 20 2813035 game dev guide 开发类库 http www csdn net article 2012 11 07 281158
  • Jmeter动态吞吐量实现

    在容量测试时 控量 是非常重要的 JMeter 是根据线程数大小来控制压力强弱的 但我们制定的压测目标中的指标往往是吞吐量 QPS TPS 这就给测试人员带来了不便之处 必须一边调整线程数 一边观察 QPS TPS 达到什么量级了 为了解决
  • 本地视频播放器

    这是一个基于VUE Go做的一个本地视频播放器项目 欢迎fork或star 使用指南 本地开发 安装依赖 npm install 开发模式 npm run dev 打包 npm run build 启动后端 bee run 直接使用 解压
  • “条件递进式编程”技巧两例

    什么是 条件递进式编程 呵呵 这是我自己起的名字 所谓条件递进式编程 就是指需要一系列相关函数组合执行的情况下 后续函数执行的必要性由前面所有函数执行是否成功来决定 比如说 有一系列函数如下DoSomething1 DoSomething2
  • 端到端的图像压缩------《End-to-end optimized image compression》笔记

    End to end optimized image compression 简介 内容 整体算法结构以及流程如下 前向传播 变换优化问题 变分推导问题 实验结果 结论 论文地址 https arxiv org abs 1611 01704