压缩线学习路线(大一暑假版)
目标不是一次学完所有理论,而是用 8 周建立一条能进组交流的完整链路:
原始图像/视频 → 变换表示 → 量化 → 概率建模 → 熵编码 → 重建 → 率失真评价
建议每天 2~3 小时,每周 5 天。每学一个概念,都要做到三件事:能用自己的话解释、能写出核心公式、能用小实验验证。
一、这些概念到底要学到什么程度
1. 信息熵、交叉熵、互信息
- 熵:
H(X) = -Σ p(x) log₂ p(x),表示信源平均不确定性,也是理想无损编码平均码长的下界。 - 交叉熵:
H(p,q) = -Σ p(x) log₂ q(x)。真实分布是 p、熵模型预测 q 时,多出来的码长就是KL(p||q)。 - 互信息:
I(X;Y) = H(X)-H(X|Y),表示知道 Y 后能减少多少关于 X 的不确定性。 - 在学习式压缩中,码率常用
R ≈ E[-log₂ p(ŷ)]估计。熵模型预测越准,实际码流通常越短。
达标任务:手算一个四符号信源的熵;用 Python 统计一张灰度图直方图的熵;故意用错误概率分布编码,观察交叉熵变大。
2. 率失真理论与 L = R + λD
- R 是码率,常用 bpp(bits per pixel)。
- D 是失真,例如 MSE、
1-MS-SSIM或感知损失。 - λ 控制取舍:在
R + λD约定下,λ 越大越重视质量,通常码率也越高。 - 有些代码写成
D + λR,此时 λ 的含义反过来;先看公式,不要死记参数趋势。 - 单个模型只对应率失真曲线上的一个工作点;多个 λ 才能得到完整 RD 曲线。
达标任务:用 JPEG 的不同质量参数压缩 Kodak/自选图片,画 bpp—PSNR 曲线,并解释为什么不能只报一个 PSNR。
3. 标量量化与向量量化
- 标量量化(SQ):每个潜变量单独取整或映射到标量码字,简单、快速,但忽略维度间联合结构。
- 向量量化(VQ):把一组数整体映射到一个码字,更有可能获得好的率失真性能,但码本搜索和训练更难。
- 训练时取整不可导,常见处理是加均匀噪声、STE 或软量化。
- NVTC 的核心问题正是:怎样在可控复杂度下发挥 VQ 优势。
达标任务:对二维高斯点分别做逐维 SQ 和 K-means VQ,对比相同码字预算下的 MSE。
4. Hyperprior、上下文熵模型、算术编码
- 主潜变量 ŷ 保存图像内容;Hyperprior 再发送少量侧信息 ẑ,用它预测 ŷ 的均值、尺度等分布参数。
- 上下文模型利用已解码符号预测当前符号,例如
p(ŷᵢ | ŷ<ᵢ, ẑ);预测更准,但串行依赖可能让解码变慢。 - 算术编码/ANS 不负责“猜概率”,它把熵模型给出的概率真正变成比特流。概率模型和熵编码器两端必须完全一致。
- 推荐先读 Ballé 2018 Hyperprior,再读 Minnen 2018 Hyperprior + Autoregressive,之后读本文件夹第 03 篇。
达标任务:用 CompressAI 预训练模型调用 compress()/decompress(),比较估计 bpp 和实际文件 bpp;画出是否加入上下文模型时的速度—码率差异。
5. PSNR、MS-SSIM、LPIPS、BD-rate
- PSNR:由 MSE 推出,越高越好;易计算,但不完全符合人眼感受。
- MS-SSIM:比较多尺度结构相似性,越接近 1 越好。
- LPIPS:用深度特征衡量感知距离,通常越低越好;更关注感知相似性,但也不是绝对的人类评分。
- BD-rate:比较两条 RD 曲线的平均码率差;负值通常表示在相近质量下更省码率。至少需要多个可靠工作点,并明确锚点编码器和质量指标。
- 生成式压缩不能只看 PSNR:纹理可能更真实,却不等于逐像素更准确,需要同时讨论 rate、distortion 和 perception。
达标任务:同一组重建图同时计算 PSNR、MS-SSIM、LPIPS,找出三个指标排序不一致的例子。
6. H.264/HEVC/VVC 框架
先掌握共同主线,不必一开始啃完整标准:
- 帧内/帧间预测消除空间和时间冗余;
- 对预测残差做块变换;
- 量化控制码率和失真;
- 熵编码生成码流;
- 编码器内部必须重建参考帧,保证与解码端一致;
- 环路滤波减少块效应并改善后续预测。
VVC 比 HEVC 增加了更灵活的块划分和预测/变换工具,但学习时先用一张框图把共同骨架讲清楚。达标任务:用 FFmpeg 对同一视频改变 CRF/QP,记录文件大小、PSNR 和编码时间。
二、8 周顺序
第 1 周:概率与信息论
完成熵、交叉熵、KL、互信息的手算和小实验。重点理解 -log₂ p 为什么既是训练损失又近似码长。
第 2 周:传统编码骨架
学习预测—残差—变换—量化—熵编码;做 JPEG/FFmpeg 小实验。暂时不追求标准细节。
第 3 周:学习式图像压缩基线
读 Ballé 的 factorized prior 和 scale hyperprior;运行 CompressAI 预训练模型,得到真实码流和 RD 点。
第 4 周:评价方法
实现 PSNR、MS-SSIM、LPIPS;理解 BD-rate 的输入是两条曲线而不是两个点。整理一页实验表。
第 5 周:读 01 综述 + 02 视频压缩
- 01 综述先读摘要、图 1/分类框架、总结,再按 VAE→GAN→自回归→Flow→Diffusion 回填概念。
- 02 重点画出 PMCNN、运动预测、残差和重建参考帧的数据流,理解它与传统帧间编码的对应关系。
第 6 周:读 03 Causal Contextual Prediction
重点回答:它的概率分解是什么?空间、通道和全局上下文分别提供什么信息?为什么性能提升可能伴随串行解码开销?
第 7 周:读 04 NVTC
先完成二维 SQ/VQ 实验,再读多阶段量化、非线性向量变换和 entropy-constrained VQ。可运行官方仓库的测试/预训练流程,不建议一开始从零训练大模型。
第 8 周:读 05 Diff-ICMH + 汇报
重点区分 human vision 与 machine vision 的目标,梳理生成先验怎样改变传统 R-D 优化。最终做 8~10 页汇报:问题、方法、实验、你没看懂的三点、一个可做的小课题。
三、五篇论文的阅读顺序和产出
- 2024 生成式视觉编码综述:建立地图;产出一张技术树。
- Learning for Video Compression:理解学习式视频预测;产出一张端到端数据流图。
- Causal Contextual Prediction:理解上下文熵模型;产出概率分解和复杂度分析。
- NVTC:理解 SQ→VQ 的动机;复现或运行官方测试,产出一张 RD 对比图。
- Diff-ICMH:进入生成式、人眼/机器联合压缩;产出一页研究问题与可验证假设。
每篇只做一页笔记,固定回答:解决什么问题、核心假设、输入输出、损失函数、码率怎样计算、与谁比较、最重要消融、速度代价、局限、能否复现。
四、推荐入口
- 综述:https://arxiv.org/abs/2405.14221
- Ballé Hyperprior:https://arxiv.org/abs/1802.01436
- Minnen Hyperprior + Autoregressive:https://arxiv.org/abs/1809.02736
- CompressAI 自定义模型教程:https://interdigitalinc.github.io/CompressAI/tutorials/tutorial_custom.html
- CompressAI 训练与真实熵编码:https://interdigitalinc.github.io/CompressAI/tutorials/tutorial_train.html
- NVTC 官方代码:https://github.com/USTC-IMCL/NVTC
五、进组前的最低成果包
不用等“全学会”再联系老师。做到以下四项就足够证明执行力:
- 五篇论文各一页笔记;
- 一张学习式压缩结构图;
- 一个 CompressAI 预训练模型的真实编解码实验;
- 一张包含至少 4 个工作点的 RD 曲线,并报告 PSNR、MS-SSIM、实际 bpp 和速度。
联系组内学长时可以直接说:我已经读完综述和两篇基础论文,跑通了 CompressAI 编解码并画了 RD 曲线,希望从复现实验或数据评测开始做。