超先验模型实战:用PyTorch复现VARIATIONAL IMAGE COMPRESSION论文核心代码

【图像压缩】超先验模型 《VARIATIONAL IMAGE COMPRESSION WITH A SCALE HYPERPRIOR》 绪论 2015年,第一个端到端图像编码方案被提出。基于深度学习的端到端图像压缩主要分为两类,一类是基于RNN的方法,一类是基于CNN的方法。本文对基于CNN的方法 阅读详情

超先验模型实战:用PyTorch复现VARIATIONAL IMAGE COMPRESSION论文核心代码

在数字图像处理领域,压缩技术始终是平衡存储效率与视觉质量的关键环节。传统方法如JPEG、HEVC等依赖手工设计的变换和熵编码,而基于深度学习的端到端图像压缩方案正在改写这一格局。本文将聚焦超先验模型(Scale Hyperprior)的PyTorch实现,通过代码级解析揭示其如何在潜在表示中捕获空间依赖性,从而显著提升压缩效率。

1. 超先验模型架构解析

超先验模型的核心创新在于引入二级编码结构:主编码器提取图像特征y,超先验编码器则进一步提取特征的特征z。这种层级设计源于对潜在表示统计特性的观察——空间相邻元素在尺度上存在明显耦合。

模型组件对比表:

组件类型输入维度输出维度核心作用
主编码器H×W×3H/16×W/16×192生成潜在表示y
超先验编码器H/16×W/16×192H/32×W/32×128生成超先验z
主解码器H/16×W/16×192H×W×3重建图像
超先验解码器H/32×W/32×128H/16×W/16×192预测y的尺度参数

在PyTorch中构建该模型时,需要特别注意卷积层的配置。主编码器采用5×5卷积核配合GDN(Generalized Divisive Normalization)激活函数,这种组合比传统ReLU+BN更能保留图像局部结构:

class GDN(nn.Module):
    def __init__(self, channels, inverse=False):
        super().__init__()
        beta = torch.sqrt(torch.tensor(channels, dtype=torch.float))
        self.beta = nn.Parameter(beta * torch.ones(channels))
        self.gamma = nn.Parameter(torch.eye(channels).view(channels, channels, 1, 1))
        self.inverse = inverse

    def forward(self, x):
        gamma = self.gamma / torch.norm(self.gamma, dim=(0,1), keepdim=True)
        norm = F.conv2d(x**2, gamma, bias=self.beta, stride=1, padding=0)
        return x / torch.sqrt(norm) if not self.inverse else x * torch.sqrt(norm)

2. 量化与熵编码实现

量化环节是连接连续特征与离散符号的关键桥梁。论文采用均匀量化器配合STE(Straight-Through Estimator)技巧解决梯度回传问题:

class Quantizer(nn.Module):
    def __init__(self):
        super().__init__()
        
    def forward(self, x, training):
        if training:
            noise = torch.rand_like(x) - 0.5
            return x + noise  # 训练时添加均匀噪声模拟量化
        else:
            return torch.round(x)  # 测试时直接四舍五入

熵编码部分需要实现两个关键模块:

  1. 累积分布函数建模:使用单调递增的神经网络拟合概率分布
  2. 算术编码接口:将概率估计转换为实际比特流

以下是CDF建模的核心代码:

class EntropyModel(nn.Module):
    def __init__(self, channels):
        super().__init__()
        self.filters = nn.ModuleList([
            nn.Conv1d(channels, channels, 3, padding=1) 
            for _ in range(3)
        ])
        
    def _logits_cumulative(self, inputs):
        logits = inputs
        for conv in self.filters:
            logits = torch.sigmoid(conv(logits))
        return logits

注意:实际部署时需要将CDF表量化为16位整数,以适配标准算术编码器。训练阶段则保持浮点运算确保梯度稳定。

3. 率失真联合优化

模型训练采用率失真权衡损失函数:L = R + λD。其中码率R通过交叉熵计算,失真D使用MSE或MS-SSIM。超参数λ控制压缩率与质量的平衡:

def rate_distortion_loss(y_hat, z_hat, x, x_hat, lambda_val):
    # 计算失真(MSE)
    distortion = F.mse_loss(x_hat, x)
    
    # 计算码率(交叉熵)
    y_prob = self.entropy_model(y_hat)
    z_prob = self.hyper_entropy_model(z_hat)
    rate = torch.sum(-torch.log2(y_prob)) + torch.sum(-torch.log2(z_prob))
    
    return rate + lambda_val * distortion

λ值选择经验表:

λ值目标bpp适用场景
0.01~0.15极低码率监控视频
0.03~0.3移动端图片传输
0.1~0.6网页图片
0.3~1.2高质量图像存档

4. 工程实践中的关键技巧

在实际复现过程中,以下几个细节显著影响模型性能:

  1. 梯度裁剪:GDN层的梯度可能爆炸,需限制在[-1,1]范围内

    optimizer.zero_grad()
    loss.backward()
    nn.utils.clip_grad_norm_(model.parameters(), 1.0)
    optimizer.step()
    
  2. 量化感知训练:采用分段线性函数平滑量化噪声的影响

    class SoftQuantizer(nn.Module):
        def forward(self, x):
            return x + (torch.round(x) - x).detach()  # 直通估计器
    
  3. 混合精度训练:在保持精度前提下提升训练速度

    with torch.cuda.amp.autocast():
        y_hat, z_hat = model(x)
        loss = rate_distortion_loss(y_hat, z_hat, x, x_hat, lambda_val)
    
  4. 熵编码加速:使用CUDA内核并行计算概率分布

    @torch.jit.script
    def fast_prob_estimate(y: torch.Tensor) -> torch.Tensor:
        # 使用查表法加速概率估计
        return precomputed_table[y.long()]
    

5. 性能优化与调试

当模型出现收敛问题时,建议按以下步骤排查:

  1. 可视化特征图:检查各层激活值分布是否合理

    import matplotlib.pyplot as plt
    plt.hist(y_hat.detach().cpu().numpy().flatten(), bins=50)
    plt.title('Latent Representation Distribution')
    plt.show()
    
  2. 验证梯度流:确认反向传播无中断

    for name, param in model.named_parameters():
        if param.grad is None:
            print(f"Zero gradient at: {name}")
    
  3. 调整学习率策略:采用余弦退火配合热启动

    scheduler = torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(
        optimizer, T_0=10, T_mult=2)
    
  4. 内存优化技巧:使用梯度检查点减少显存占用

    from torch.utils.checkpoint import checkpoint
    y = checkpoint(self.encoder, x)  # 不保存中间激活值
    

6. 扩展与改进方向

基础超先验模型可进一步优化:

  1. 上下文建模:引入棋盘格注意力机制捕获空间相关性

    class CheckerboardAttention(nn.Module):
        def forward(self, y):
            # 将特征图分为锚点和非锚点
            anchor = y[:,:,::2,::2]
            non_anchor = y[:,:,1::2,1::2]
            # 使用锚点预测非锚点分布
            return anchor + F.conv2d(non_anchor, self.mask_conv.weight)
    
  2. 多尺度超先验:构建金字塔式层级预测结构

    class MultiScaleHyperprior(nn.Module):
        def __init__(self):
            self.down1 = nn.Conv2d(192, 128, 2, stride=2)
            self.down2 = nn.Conv2d(128, 64, 2, stride=2)
            # 对应上采样层...
    
  3. 感知质量优化:将判别器引入损失函数

    perceptual_loss = F.l1_loss(vgg(x), vgg(x_hat)) 
    gan_loss = -torch.mean(discriminator(x_hat))
    total_loss = rate + lambda_d*distortion + lambda_p*perceptual_loss
    

在Kodak测试集上的典型性能表现:

  • 0.3bpp时PSNR > 32dB
  • 解码时间约200ms/张(RTX 3090)
  • 模型大小约18MB

实际部署时建议使用TensorRT加速,可获得3-5倍推理速度提升。对于移动端应用,可采用知识蒸馏技术将模型压缩至5MB以下,同时保持90%以上的压缩性能。

【202503】Wan:开放且先进的大规模视频生成模型【1.3B、14B】【支持对无限长度视频进行稳定的Inference】【Wan中的主要计算开销来自注意力机制】 wan: Open and Advanced Large-Scale Video Generative ModelsWan:开放且先进的大规模视频生成模型Wan Team, Alibaba Group Wan 团队,Alibaba GroupThis report presents Wan, a comprehensive and open suite of video foundation models designed to push the boundaries of video generation 阅读详情

相关推荐

图像压缩新突破:超先验模型为何能超越HEVC?技术细节全拆解

本文深入解析了基于变分图像压缩(Variational Image Compression)框架的超先验(Scale Hyperprior)模型如何实现图像压缩新突破。该模型通过引入边信息捕获潜在表示的空间相关性,并采用端到端优化与非参数概率密度模型,在率失真性能上挑战甚至超越了传统HEVC标准,尤其在MS-SSIM感知质量指标上表现优异。

weixin_29300241的博客 290

【图像压缩】多层超先验模型 《Coarse-to-Fine Hyper-Prior Modeling for Learned Image Compression》

绪论 基于超先验和空间上下文的模型在建模长期依赖方面有局限性,不能很好地榨干图像中的空间冗余度。本文提出一个多层超先验模型,并使用由粗到细的框架,以进一步减少空间冗余。

hahalidaxin的专栏 2482

【信息科学与工程学】计算机科学与自动化——第三百零五篇 数据中心 Scale-Up、Scale-Out、Scale-Across 20

GPU 训练中的各种算子融合技巧、梯度压缩与稀疏通信的高级变体、混合专家模型的负载均衡与通信优化、长序列模型的注意力机制优化、模型量化与蒸馏的联合优化、分布式训练中的容错与恢复、以及一些新兴硬件特性的建模(如 HBM3、GDDR7、CXL 3.0 内存语义、PCIe Gen6 PAM4 信令等)。每条仍然包含四个方程式子节。

weixin_49199313的博客 365

贝叶斯多层先验分布

什么是多层先验分布? 所给定的先验分布中超参数难以确定时,可以对超参数再给出一个先验,第二个先验称为超先验。由先验和超先验决定的一个新先验就称为多层先验。 简单来说,就是对你之前原本的先验分布上,再假设一层先验分布,这就是两层先验分布。(当然如果不嫌麻烦,可以无穷层的orz…) 例: 我们以一个例子来说明: 设某产品的不合格率为θθ\theta, θθ\theta的先验为π1...

Kanny 5257

EMI硬件抑制八项工程对策:从回路面积到谐振规避

电磁干扰(EMI)是电子系统可靠性与EMC合规性的核心挑战,其本质源于高频电流回路产生的辐射与耦合效应。理解回路面积、共模/差模噪声、阻抗匹配等基础原理,是实施有效抑制的前提。技术价值体现在降低辐射发射(RE)、传导发射(CE)超标风险,提升产品一次通过率与长期稳定性。典型应用场景包括开关电源设计、高速数字接口布局、工业嵌入式设备及医疗电子等对EMC要求严苛的领域。本文聚焦可落地的硬件级对策,涵盖回路面积控制、屏蔽策略、变压器漏磁管理、双线传输与阻抗匹配等关键实践,深度融合电流回路物理模型与PCB工程实现。

weixin_35019679的博客 86

LabVIEW电压信号采集系统:从零搭建到科研实战

本文详细介绍了如何从零开始搭建一个基于LabVIEW的电压信号采集系统。内容涵盖硬件选型(如NI USB-6002数据采集卡)、软件环境配置、核心程序开发(包括多通道同步采集、数据自动保存)以及高级功能优化。系统支持自定义采样率与时长,并提供了完整的LabVIEW程序框图和配套的Python数据分析脚本,旨在帮助科研人员和工程师快速构建稳定、高效的专属数据采集方案,提升实验自动化水平。

gold8的专栏 462

超先验模型实战:用PyTorch复现VARIATIONAL IMAGE COMPRESSION论文核心算法

本文详细介绍了如何使用PyTorch实现VARIATIONAL IMAGE COMPRESSION论文中的超先验模型(SCALE HYPERPRIOR),构建端到端图像压缩系统。通过层级编码架构和率失真优化,该模型能有效提升图像压缩效率,特别适用于高纹理区域。文章包含完整的代码实现、训练技巧和性能优化策略,为开发者提供了实用的技术指南。

tgb3456789的博客 871

ACM算法模板 · 一些常用的算法模板-模板合集(打比赛专用)

萌新常用的都在这了,本萌新的模板集。

张天枭の博客 5万+

【图像压缩】自回归模型 《Joint Autoregressive and Hierarchical Priors for Learned Image Compression》

绪论 第一个在PSNR和MS-SSIM都优于BPG的学习模型。虽然自回归模型有验证功能的计算惩罚,但作者发现在图像压缩领域,自回归模型与多层先验模型互补,共同挖掘一

hahalidaxin的专栏 5172

从机械到数字:EC11旋转编码器与ESP32的PWM控制艺术

本文详细解析了EC11旋转编码器与ESP32的PWM控制技术,探讨了如何将机械旋转动作转换为精确的数字信号控制。通过硬件连接、信号处理和软件优化等实践技巧,开发者可以构建高效的人机交互系统,适用于智能照明、电机控制等多种应用场景。

android的专栏 786

HRnet的pytorch实现

HRnet的pytorch实现

奋土的博客 1954

手把手教你用Python实现Variational Image Compression超先验模型(附代码)

本文提供了基于Python和PyTorch实现Scale Hyperprior图像压缩模型的完整实战教程。文章详细讲解了从环境搭建、核心组件(如GDN层、量化器)实现、率失真损失设计到完整训练流程的每一步,并附有可直接运行的代码,帮助开发者快速掌握这一前沿的变分图像压缩技术。

quiet的专栏 208

深度探索:机器学习中的最大似然估计(MLE)原理及其应用

最大似然估计作为统计推断的核心方法,在机器学习领域具有广泛的应用价值和深远影响。尽管存在对模型假设敏感、易受异常值影响等局限性,但其直观的原理、坚实的理论基础以及高效的实现方式使其在实践中仍占据主导地位。随着深度学习、强化学习等新兴领域的快速发展,最大似然估计将继续演化并适应新的模型结构与优化框架。同时,结合现代优化算法、并行计算技术以及贝叶斯方法的融合,最大似然估计有望在保持其核心优势的同时,进一步提升参数估计的准确性和鲁棒性,为未来的机器学习研究与应用开辟更广阔的道路。

qq_51320133的博客 1万+

手把手教你用Python实现Variational Image Compression(附超先验模型代码)

本文提供了一份详细的Python实战指南,手把手教你实现基于超先验的变分图像压缩模型。文章深入解析了Scale Hyperprior模型的核心思想,通过完整的代码示例展示了如何构建编码器、解码器、熵模型及训练流程,帮助读者从零掌握这一前沿的端到端学习型图像压缩技术。

terraform7cloud的博客 111

【FF-A】第二章 Introduction

Armv8.4 架构引入了在安全状态下的虚拟化扩展。Arm® SMMU v3.2 架构[1]为安全流添加了对第2阶段翻译的支持,以补充在 Armv8.4 处理器状态下的安全 EL2 翻译制度。这些架构特性使得在安全状态下,彼此不信任的软件组件能够相互隔离。关于在安全状态下引入虚拟化扩展以及固件框架目标的更多理念可在名为《在安全世界使用虚拟化进行隔离》的白皮书[3]中找到。软件组件只能访问物理地址空间和系统资源的区域,例如 GIC 中对其正确运行必要的中断。

baron-周贺贺-代码改变世界ctw 528

异构图中的注意力机制网络:节点级别和语义级别的注意力(Python实现)

在本文中,我们介绍了如何使用Python实现异构图中的节点级别注意力和语义级别注意力。通过语义级别注意力,我们可以根据节点的语义信息对节点进行加权聚合。在本文中,我们将介绍如何使用Python实现异构图中的注意力机制网络,包括节点级别的注意力和语义级别的注意力。最后,我们使用注意力权重对节点特征进行加权聚合,得到聚合后的节点表示。然后,将聚合后的节点表示传递给语义级别注意力模型,根据节点的语义信息进行加权聚合,得到最终的表示。函数中,首先使用节点级别注意力模型对节点特征进行聚合,得到聚合后的节点表示。

HackNebulaZ的博客 487

PRML第八章读书笔记——Graphical Models 生成式模型/超先验/层次贝叶斯模型、d-分离/朴素贝叶斯、有向分解/马尔可夫毯、D图I图完美图、马尔科夫链/因子图/和积算法/最大和算法

(终于读到概率图了,从这一章开始应该算是PRML的精华内容了。过于基础的东西就不写了,主要写自己不会的) 目录8.1 Bayesian NetworksP365 祖先采样法ancestral samplingP365 生成式模型generative modelsP366 离散变量P370 线性高斯模型P372 超先验hyperprior与层次贝叶斯模型hierarchical Bayesian model8.2 Conditional IndependenceP378 d-分离 d-seperationP3

小树屋 1272

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

图像先验分布详解

引子 图像复原是图像处理中最重要的任务之一,其包括图像去噪、去模糊、图像修复、超分辨等, 都是底层视觉中被广泛研究的问题。实际中我们得到的图像往往是退化后的图像(如带噪声图像、模糊图像、被采样的图像等): y=D(x)y=D(x)y=D(x) 其中,yyy表示观察到的退化图像,xxx是原始图像,D(⋅)D(⋅)D(⋅)是退化函数,往往是未知的,在实际的计算中,常常使用成像物理模型近似。 图像复原就...

WeisongZhao 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

超分辨模型介绍

来源于这篇综述https://arxiv.org/pdf/1902.06068.pdf 第1组-预先采样 在这种方法中,首先对低分辨率图像进行插值以获得“粗略”高分辨率图像。现在,CNN用于学习从插值的低分辨率图像到高分辨率图像的端到端映射。直觉是,与学习从低维空间到高维空间的直接映射相比,使用传统方法(例如双线性插值法)首先对低分辨率图像进行升采样,然后对结果进行细化可能更容易。 您可...

red_ear的博客 1788

RNNoise-SpeexDSP-WebRTC使用说明

本文介绍RNNoise、SpeexDSP与WebRTC音频处理库的下载、调用及参数配置方法,适用于Android语音工程集成。RNNoise基于深度学习,适合非稳态噪声降噪,需48kHz输入;SpeexDSP支持多采样率与回声消除,适用于全双工场景;WebRTC提供轻量级窄带处理。三者可串联使用:麦克风信号先经前级降噪(RNNoise或SpeexDSP),再进入WebRTC媒体引擎进行编码。重点说明各库的典型应用场景、接口调用方式、关键参数调节策略及采样率转换注意事项,帮助开发者高效集成与优化语音处理链路。

知识共享,你我皆是知识的搬运工 224

基于深度学习的商品评论情感分析系统-毕业设计

面向商品评论的中文情感分析系统,支持单条预测、批量分析、情感分布与关键词、报告导出。TextCNN、BiLSTM、Transformer 在同一词表、同一数据切分、同一种子与超参下公平对比,测试集 F1 分别为 0.9101、0.9089、0.9075。结论是这一规模下模型复杂度未带来收益,但误差结构不同。附技术栈、截图、文档预览与演示视频。

csbysj2020 151

Transformer 为什么能取代 RNN?从自注意力讲起

2017 年谷歌在《Attention Is All You Need》中提出 Transformer,核心是。它如今是 GPT、BERT、ChatGPT 的共同底座。

anew___的博客 973

【原创深度学习项目】基于深度学习的建筑工地防护装备检测系统|安全帽与反光衣检测系统(RT-DETR-L 模型)

本文设计并实现了一套基于RT-DETR-L的建筑工地防护装备检测系统,采用Django+Vue前后端架构,实现对安全帽、反光背心等7类装备及“无PPE”“未戴安全帽”等缺失状态的精准识别。系统支持图片、视频、摄像头实时检测,具备参数可调、数据可视化与统计分析功能,有效解决小目标漏检、误检及管理难问题,助力智慧工地安全管理落地。文末可获取源码。

qq_1445749146的博客 230

图解循环神经网络(RNN)

RNN(循环神经网络)就是“带记忆的网络”:让网络拥有一块“记忆”,在处理当前数据时,能同时参考之前看过的内容;它不一次性看完全部输入,而是像人读书一样,一个字一个字地读,每读一个字就更新一次脑子里的记忆,然后用这份记忆去理解当前这个字。但便签一直在被改写,新信息不断挤占旧信息,传到第 40 步时,“巴黎”的痕迹已经淡得几乎没了。读到“贵”的时候,网络并没有重新去查“好看”这个词——但“好看”的影响已经融在了便签里(那个 1.5)。这三个困难的共同点:答案不在当前这一个字里,而在“前面那串东西”里。

技术管理两手抓,两手都要硬. 409

神经网络入门指南:从 CNN、RNN 到 Attention

神经网络的学习,本质是“预测—比较—纠错”的循环;CNN 通过局部连接与权重共享理解图像;RNN 通过隐藏状态传递上下文;LSTM 和 GRU 用门控机制管理记忆;Encoder–Decoder 把理解与生成拆成两个阶段;Attention 则让模型在每一步都能主动寻找最相关的信息。到这里,我们已经走完了从普通神经网络到 Attention 的完整路线。下一篇将正式进入 Transformer,看看它如何摆脱 RNN 的顺序计算,又如何让每个 Token 直接找到与自己相关的信息。

爱敲代码的小黄 385

AI 学习第 15 课:变长序列不 pack 直接喂 RNN,隐状态全被 0 污染

NLP 的 batch 里句子长短不一,短句垫 0 补齐后直接喂 RNN,看似能跑,实际上每个 0 垫步都在更新隐状态——短序列的最后一步输出根本不是它真实句子的结果。这一课用 torch 2.15(

aifannihao的博客 152
上一篇: 从串口到蓝牙:nRF52832开发中NRF_ERROR_NO_MEM的3种意外触发场景及修复
下一篇: Unity Timeline实战:5分钟搞定Spine动画轨道配置(附插件下载指南)
gitlab7runner
博客等级 码龄4年 78粉丝 1747原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值