ProGIC
生成式图像压缩(Generative Image Compression, GIC)这几年进步很快。从 HiFiC 用 GAN 合成细节,到 MS-ILLM 改进判别器提升分布保真度,再到 DiffEIC 和 OSCAR 借助 Stable Diffusion 做扩散先验增强,感知质量不断刷新纪录。但论文作者 Cao 等人指出了一个被多数工作回避的现实:GIC 的两个核心挑战——带宽受限需要渐进式传输,算力受限需要轻量化部署——至今没有被同时解决。
先说带宽问题。GIC 典型应用场景是极低码率传输,比如卫星通信、移动端弱网环境。带宽极其稀缺时,整个码流传完之前客户端什么都看不到。如果支持渐进式解码(progressive decoding),接收前 20% 的码流就能先看到一张粗略但可用的预览图,这是实际需求中非常关键的能力。然而,现有的 GIC 方法全部要求完整码流才能解码,渐进式 GIC 几乎是空白。
再说算力问题。DiffEIC 依赖 Stable Diffusion 做条件生成,OSCAR 需要单张图 80GB 以上显存,MS-ILLM 的编解码延迟也在百毫秒级别。这些方法根本跑不动在边缘设备上。而低码率场景恰恰最常部署在算力受限的终端——手机、IoT 设备、嵌入式芯片。Fig. 1 的 BD-rate vs. 延迟散点图直观展示了这个矛盾:性能好的方法往往慢得离谱,快的方法又牺牲太多质量。
把现有 GIC 方法按架构分成三条路线,逐个审视它们为什么做不到 ProGIC 想要的事:
GAN 路线(HiFiC / MS-ILLM)
用 GAN 判别器驱动生成器合成高频细节,感知质量不错。但解码器是一个庞大的 CNN/Transformer,没有内在的渐进结构。要提速就得砍模型,砍了质量就掉。MS-ILLM 在 Kodak 上单图解码需要 147ms(A100),在手机 CPU 上更是几秒起步。
VQ 路线(Control-GIC / DLF)
用向量量化码本把潜在表示映射到离散空间。单码本的表示容量有限,Control-GIC 试图用不同粒度的码本做多码率,但本质上是多个独立模型,不支持同一个码流内的渐进解码。
扩散路线(DiffEIC / OSCAR)
用预训练 Stable Diffusion 做解码器,感知质量极致。但代价是推理极慢(DiffEIC 在 CPU 上单图超过 10 秒),显存需求巨大(OSCAR 单图超过 80GB)。渐进式解码?完全不可能——扩散模型需要完整条件才能去噪。
结构性缺陷很清楚:这些方法的解码器要么是"全有或全无"的黑盒,要么依赖无法拆分的大型预训练模型。渐进式解码需要一种可以"部分求和"的表示方式,轻量化需要把大模型的计算量砍掉一个数量级。ProGIC 的方案是同时解决这两个问题。
ProGIC 的核心直觉来自语音压缩领域。在神经音频编解码器(如 EnCodec、SoundStream)中,残差向量量化(Residual Vector Quantization, RVQ)已经被证明是一种高效的多级量化方案。Cao 等人把它搬到了图像压缩中,并做了两个关键适配。
适配一:用 RVQ 实现渐进式解码。传统 VQ 用单个码本量化潜在表示 $\mathbf{y}$,得到 $\hat{\mathbf{y}}$。RVQ 的做法是:先用第一个码本量化 $\mathbf{y}$ 得到 $\hat{\mathbf{y}}_1$,然后计算残差 $\mathbf{r}_1 = \mathbf{y} - \hat{\mathbf{y}}_1$,再用第二个码本量化这个残差得到 $\hat{\mathbf{y}}_2$,以此类推。最终的重建是所有级的求和:
RVQ 重建公式
其中 $\hat{\mathbf{y}}_n = \text{Quantize}_n(\mathbf{y} - \sum_{i=1}^{n-1} \hat{\mathbf{y}}_i)$,每个 $\text{Quantize}_n$ 使用独立的码本 $C_n$。
渐进式解码自然浮现:接收端只需依次累加已收到的级。收到第 1 级 $\hat{\mathbf{y}}_1$ 就能恢复主要语义,收到第 2 级加上 $\hat{\mathbf{y}}_2$ 细节更丰富,到第 $N$ 级就是完整重建。每一级都是一个完整的、可用的中间结果。
适配二:用深度可分离卷积实现轻量化。ProGIC 把传统的 ResNet/Transformer 解码器替换成深度可分离卷积(depthwise-separable convolution)块 + 小注意力模块 + FFN 的组合。深度可分离卷积把标准卷积分解为 depthwise(逐通道)和 pointwise(逐点)两步,计算量从 $O(K^2 \cdot C_{\text{in}} \cdot C_{\text{out}})$ 降到 $O(K^2 \cdot C_{\text{in}} + C_{\text{in}} \cdot C_{\text{out}})$,参数量大幅缩减。
3.1 编码器与 RVQ 量化
编码器 $E$ 将输入图像 $\mathbf{x}$ 缩小 $f=16$ 倍,得到潜在表示 $\mathbf{y} = E(\mathbf{x}) \in \mathbb{R}^{H/f \times W/f \times C}$。然后 RVQ 用 $N$ 个独立码本逐级量化。默认配置下 $N=5$,每个码本包含 $2^L = 2^{10} = 1024$ 个码字($L=10$ bit per codebook index)。
码率计算很直接。每个空间位置在每个 stage 需要 $L$ bit,空间降采样因子为 $f$,所以:
BPP 计算
默认 $L=10, f=16, N=5$ 时,$\text{BPP} = \frac{10}{256} \times 5 = 0.1953$。接收前 $k$ 个 stage 时码率为 $\text{BPP}_k = \frac{L}{f^2} \times k$,对应渐进式解码的 5 个码率点 $\{0.039, 0.078, 0.117, 0.156, 0.195\}$。
不用熵编码。这是 ProGIC 一个非常反直觉的设计选择。传统学习压缩(LIC)花费大量精力设计熵模型(hyperprior、channel-wise context 等)来压缩量化索引的统计冗余。ProGIC 发现,RVQ 量化后的 codebook index 分布近似均匀——信息熵 > 9.80 bit/index(满熵 10 bit),熵编码只能带来 0.90% 的 BD-rate 收益。原因很简单:RVQ 多级分解本身就打散了索引之间的统计结构。与其花费计算量做熵编码,不如把这个时间留给更有价值的事。
3.2 轻量化解码器
解码器的设计体现了 ProGIC 对部署效率的极致追求。整体架构是编码器的镜像:先上采样,然后通过多级卷积块和 FFN 重建细节。
深度可分离卷积块是基础构建单元。每个块包含:depthwise convolution(逐通道空间混合)+ pointwise convolution(逐点通道混合)+ ReLU 激活。与标准卷积相比,参数量和 FLOPs 降低约 $K^2$ 倍($K$ 为卷积核大小)。
Feature Modulation是一个轻量但有效的改进。在卷积块中引入条件调制:用当前 stage 的码本嵌入向量对特征进行逐通道缩放和偏移。这个操作的计算开销几乎为零(只是逐元素乘加),但带来了 2.42% 的 BD-rate 提升。直觉上,它告诉解码器"当前在处理第几个 stage 的残差",让不同 stage 的特征有区分性。
小注意力模块借鉴了 LIC-HPCM 的设计思路,使用轻量的 channel attention 而非完整的 self-attention。它捕获跨通道的全局依赖关系,带来 11.41% 的 BD-rate 提升。两个模块合在一起,总共 14.90% 的 BD-rate 收益,编解码延迟几乎不增加。
FFN Chunk-2是对前馈网络的进一步压缩。标准 FFN 的中间维度是通道数的 4 倍(expansion ratio $r=4$)。Chunk-2 策略将输入张量沿通道维度切成两半,只对一半做全连接变换,另一半直接 pass-through。参数量和计算量直接减半,实验表明精度损失可忽略。
3.3 渐进式传输机制
渐进式传输的工作流程如下:
graph LR
A[编码器] --> B[RVQ Stage 1]
B --> C[RVQ Stage 2]
C --> D[...]
D --> E[RVQ Stage N]
B --> |"仅 Stage 1"| F["粗略预览"]
B --> C --> |"Stage 1+2"| G["中等质量"]
B --> C --> D --> E --> |"全部 N 级"| H["完整重建"]编码端:$N$ 个 stage 的 codebook index 按顺序拼接成码流。解码端:收到前 $k$ 个 stage 的 index,查各自的码本得到 $\hat{\mathbf{y}}_1, \ldots, \hat{\mathbf{y}}_k$,求和后送入解码器。解码器结构不变,只是输入的潜在表示从粗糙到精细逐步改善。
这个设计的一个微妙之处在于训练策略。直接训练 $N$ 个 stage 会导致早期 stage 被"浪费"——模型可能把所有信息都塞到后面的 stage。ProGIC 的解决方案是两阶段训练:
- 阶段一:只训练 $N=1$ 的 base model,让第一个 stage 学会尽可能好的基础重建。
- 阶段二:联合训练全部 $N$ 个 stage。损失函数对每个 stage 的中间重建都施加监督,用权重 $p$ 控制早期 stage 和最终重建的平衡。
多 Stage 联合损失
其中 $\hat{\mathbf{x}}_k$ 是接收前 $k$ 个 stage 后的重建结果。加权系数 $p$ 控制早期 stage 的比重:$p$ 越大,模型越关注低码率下的预览质量;$p$ 越小,越侧重最终重建。默认 $p=0.5$,平衡所有码率点的性能。
ProGIC 的训练分两个阶段,这个策略对渐进式解码的质量至关重要。
阶段一:Base Model 训练
只保留 $N=1$ 个 stage,用完整的 MSE + LPIPS + GAN 损失训练一个基础编解码器。这一步的目的是让第一个 stage 的码本学会捕获图像最主要的语义和结构信息。如果跳过这一步直接训练 5 个 stage,第一个 stage 往往学不到有意义的表示——它会"偷懒",把困难的部分推给后面的 stage。
阶段二:联合多 Stage 训练
固定阶段一训练好的基础模型,逐步加入剩余 $N-1$ 个 stage,联合优化全部参数。每个 stage 有独立的码本和独立的量化器,但共享同一个解码器。损失函数对每个 stage 的中间重建都计算 MSE、LPIPS 和 GAN 损失,并用权重 $p=0.5$ 加权。
训练配置:
- 数据集:ImageNet 全集,每 epoch 采样 1%,随机裁剪 256×256 + 水平翻转
- 优化器:Adam,$\beta_1=0.5$,$\beta_2=0.9$
- 学习率:$10^{-4}$ 前 1.5M iter,之后衰减到 $10^{-5}$
- 总迭代:2M iter,batch size 16
- 硬件:单卡 NVIDIA A100,峰值显存 12.4 GB
12.4 GB 的峰值显存非常克制。对比 OSCAR 单图就需要 80GB 以上显存,ProGIC 的轻量设计在这里体现得淋漓尽致。这也意味着它可以在消费级 GPU 上训练,降低了研究门槛。
4.1 Rate-Distortion 性能
在 Kodak、Tecnick、DIV2K、CLIC 2020 四个数据集上的 BD-rate 对比(以 MS-ILLM 为基准):
| 方法 | Kodak (LPIPS) | Tecnick (LPIPS) | DIV2K (LPIPS) | CLIC 2020 (LPIPS) | Enc. (ms) | Dec. (ms) |
|---|---|---|---|---|---|---|
| MS-ILLM | 0.0% (基准) | 0.0% (基准) | 0.0% (基准) | 0.0% (基准) | 165.38 | 147.79 |
| DiffEIC | — | — | — | — | >10s | >10s |
| OSCAR | OOM | OOM | OOM | OOM | 3429 | 9519 |
| ProGIC | -58.85% | -45.35% | -51.77% | -51.13% | 7.70 | 10.62 |
| ProGIC-s | — | — | — | — | — | — |
几个关键观察:
OSCAR 在 DIV2K 和 CLIC 2020 上 OOM。官方设置处理单张图就需要 80GB 以上显存,这直接证明了扩散方法在实际部署中的根本性障碍。
ProGIC 在所有四个数据集上 BD-rate 收益均超过 45%,在 Kodak 上达到 58.85%(LPIPS)。这不仅超过了 MS-ILLM 基准,也超过了 DiffEIC 和 OSCAR 等扩散方法。
编解码速度。ProGIC 编码 7.70ms、解码 10.62ms(A100),比 MS-ILLM 快 20×以上,比 OSCAR 快 1000×以上。这个速度优势是量级性的,不是百分比级别的改进。
4.2 CPU 与手机实测
ProGIC-s(小型变体)在笔记本 CPU(AMD Ryzen 7840HS)上的测试:
| 方法 | 256×256 Enc. | 256×256 Dec. | 512×512 Enc. | 512×512 Dec. |
|---|---|---|---|---|
| VTM-23.10 | >10s | 330ms | >10s | 456ms |
| DCVC-RT | 247ms | 187ms | 981ms | 725ms |
| MS-ILLM | 121ms | 368ms | 507ms | 1352ms |
| OSCAR | 805ms | 2530ms | 3429ms | 9519ms |
| ProGIC | 76ms | 124ms | 297ms | 515ms |
| ProGIC-s | 34ms | 50ms | 107ms | 184ms |
ProGIC-s 在 CPU 上跑 256×256 图像只需 34ms 编码 + 50ms 解码。更惊人的是,它在手机 CPU 上也跑得动:
| CPU | 256×256 Enc. | 256×256 Dec. | 512×512 Enc. | 512×512 Dec. |
|---|---|---|---|---|
| Snapdragon 870 | 0.563s | 0.675s | 2.498s | 3.827s |
| MTK Dimensity 8000 | 0.559s | 0.715s | 2.346s | 3.658s |
Snapdragon 870 是 2021 年的芯片,MTK Dimensity 8000 是 2022 年的。这些都已大幅落后于今天的主流处理器,但 ProGIC-s 仍然能在上面实现秒级编解码。这意味着它确实具备边缘部署能力。
4.3 消融实验:各组件的贡献
| 配置 | BD-rate (DISTS) | Enc. (ms) | Dec. (ms) |
|---|---|---|---|
| MS-ILLM(基准) | 0.0% | 165.38 | 147.79 |
| Base + ProgDTD (PSNR) | +487.18% | 39.31 | 52.46 |
| Base + ProgDTD (LPIPS) | -10.28% | 38.37 | 51.38 |
| Base + RVQ (LPIPS) | -48.10% | 6.23 | 9.33 |
| + Attention | -56.00% | 7.70 | 10.61 |
| + Attention + Modulation | -57.57% | 7.70 | 10.62 |
| + Entropy Coding | -49.0% | — | — |
消融实验揭示了几个重要事实:
RVQ vs. ProgDTD:ProgDTD 是非生成式的渐进压缩方法。即使把 ProgDTD 用 LPIPS 目标重新训练(Base + ProgDTD (LPIPS)),BD-rate 也只有 -10.28%。换成 RVQ 后跳到 -48.10%,提升 37.82 个百分点,同时速度还快了 5×。这证明 RVQ 不仅提供了渐进能力,还因为其残差分解结构天然适合生成式目标。
注意力 + 调制:两个轻量模块共贡献 14.90% 的 BD-rate 提升,但编码延迟只从 6.23ms 增加到 7.70ms(+23%),解码延迟从 9.33ms 到 10.62ms(+14%)。这个投入产出比非常高。
熵编码几乎没用:加上 range coding 后 BD-rate 从 -57.57% 退回到 -49.0%。这不是 bug——论文解释是因为熵模型的训练目标(估计 index 分布)和主模型的感知目标之间存在冲突,导致主模型被干扰。对于 RVQ 来说,index 分布本身就近均匀,熵编码没有可压缩的冗余。
几乎同一时期,另一篇 CVPR 2026 Oral 论文 RDVQ 也在探索 VQ 在生成压缩中的潜力。两篇论文代表了 VQ 图像压缩的两条截然不同的技术路线:
| 维度 | ProGIC | RDVQ |
|---|---|---|
| 核心思路 | RVQ 多级残差分解 | 可微松弛端到端 RD 优化 |
| 熵编码 | 不用(index 近均匀) | 自回归熵模型 |
| 渐进式 | 原生支持 | 不支持 |
| 目标导向 | 工程部署优先 | 理论 RD 最优 |
| 轻量化 | 深度可分离卷积 + FFN Chunk | 未特别关注 |
| 部署场景 | GPU + CPU + 手机 | GPU |
| 会议级别 | Findings | Oral |
RDVQ 的核心贡献是解决 VQ 不可微的问题——通过引入可微松弛(differentiable relaxation),让码本更新能端到端地优化 RD 目标。这是理论上的重要突破,但它的解码器仍然是重量级的,不支持渐进式传输,也无法在边缘设备上运行。
ProGIC 反其道而行:不追求理论上的 RD 最优,而是追求实用场景下的综合最优。它坦然接受"不用熵编码"可能带来的微小码率损失,换来的是架构上的极度简洁和部署上的极度灵活。
两者几乎同时出现,说明 VQ 路线在图像压缩领域正在走向成熟,但成熟的方式不止一种。如果你的目标是理论分析和算法创新,RDVQ 是更好的参照;如果你的目标是做产品、上边缘、快速落地,ProGIC 的思路更值得借鉴。
ProGIC 这篇论文值得反复读,不是因为它用了多复杂的技术,恰恰相反——它用的每一个组件都是成熟的、简单的、可解释的。RVQ 来自语音压缩,深度可分离卷积来自 MobileNet,小注意力来自 LIC,FFN Chunk 只是一个简单的分切操作。论文的价值不在于发明新组件,而在于把正确的组件组合到正确的位置,解决一个被忽视但非常重要的实际问题。
三个值得带走的设计原则:
第一,渐进式不是锦上添花,而是刚需。在弱网环境、卫星通信、边缘推理中,"先看个大概"比"等完整结果"重要得多。RVQ 天然提供这种能力,不需要任何额外设计。
第二,熵编码不是万能药。当 index 分布本身就接近均匀时,熵模型不但帮不上忙,反而可能因为训练目标冲突拖累主模型。做压缩研究的人往往条件反射地加熵模型,ProGIC 提醒我们:先看数据,再决定用不用工具。
第三,轻量化和高性能不矛盾。ProGIC-s 在手机 CPU 上秒级解码,同时 BD-rate 仍然优于所有对比方法。深度可分离卷积 + 小注意力 + FFN Chunk 这套组合拳已经被证明是高效的。