← 返回教程合集

来源:papers/iVc/DVC_专题01_DVC方法训练与实验.md · 原始 Markdown

DVC|DVC 方法、训练与实验(原请求为精读)

用户问题:精读论文

来源:本聊天 01a13ae4-6cb2-7f23-b09c-942490bf8387,公开回复记录第 280 行,2026-10-15 00:14:40 +08:00。

可核实定位:主文第1—5节的专题讲解;图2—8、表1;补充图3、表1。

整理时核对发现 · 勘误 K01: 原回复使用“精读”或“讲完”的措辞;其实际形式是专题讲解,未按原文逐段提供英文摘录、翻译与讲解,不代表全文精读完成。下文保留历史原话。

原进度消息中的实质性补充(记录第 270 行)

图 2 有一个关键约束:运动补偿必须使用“压缩后再解码的光流”,这样接收端才能生成相同的预测。补充实验还显示,DVC 的优势随指标和视频内容变化,并不是每个序列都优于 H.264。

我们精读的是 DVC: An End-to-end Deep Video Compression Framework(CVPR 2019)。这次重点看清三件事:每个模块为什么存在、最终损失如何影响它们,以及实验究竟证明了什么。

主文:DVC 主论文

补充材料:DVC 补充材料

  1. 读 Introduction,要抓住“运动也需要付出编码成本”这个问题。

作者先回顾传统视频编码:根据参考帧预测当前帧,再编码运动信息和预测残差。你已经学过这条流程。

深度图像压缩可以用网络学习变换,那么视频压缩能否也采用神经网络?难点在于,视频多了一种需要传输的信息:运动。

光流能够描述逐像素运动,但一张 H\times W 的光流图有 2HW 个数值。如果直接传输,可能把预测节省的比特又花掉。

因此,作者提出的核心问题是:

如何学习一种运动表示,使它既有助于预测,又容易压缩,并与残差编码共同获得好的率失真表现?

精读时要纠正一个容易产生的误解:传统编码器已经使用率失真优化。DVC 的新意在于,把多个可学习模块放进同一个率失真训练目标。

Related Work 中的对比也围绕这一点展开:一些已有方法只替换传统编码器的某个模块;作者特别强调,DVC 同时学习运动估计、运动压缩、运动补偿和残差压缩。

  1. 进入第 3 节,先把符号分清,否则图 2 会越看越乱。
符号 含义
x_t 当前原始帧
\hat x_{t-1} 上一帧的重建结果,作为参考
v_t,\hat v_t 估计光流、压缩后解码得到的光流
m_t,\hat m_t 运动潜变量、量化后的运动潜变量
\bar x_t 根据参考帧和解码光流生成的预测帧
r_t,\hat r_t 原始残差、解码残差
y_t,\hat y_t 残差潜变量、量化后的残差潜变量
\hat x_t 最终重建的当前帧

这里有两组必须区分:

光流 v_t 描述运动;潜变量 m_t 是网络为压缩运动而生成的表示。

残差 r_t 是像素域的预测误差;潜变量 y_t 是网络变换后的残差表示。

帽子通常表示量化或重建结果;横线表示预测结果。

  1. 图 2 的运动分支,可以拆成“估计→编码→量化→解码”。
![主文图 2:传统预测编码与 DVC 架构;主论文 PDF 第4页,印刷页11009](DVC_讲解资源/figures/main-figure-2.png)
【整理时补入原图】主文图 2:传统预测编码与 DVC 架构。主论文 PDF 第4页,印刷页11009;图像直接从原 PDF 截取,保留原图注。来源:主文,对应页面。

为了说明流程,下面用 F,E_m,D_m 分别表示光流网络、运动编码器和运动解码器。这些函数名是我为讲解添加的记号。

v_t=F(x_t,\hat x_{t-1})

光流网络观察当前原始帧与上一帧重建结果,估计两者之间的运动。该模块使用论文引用的空间金字塔光流网络作为基础,并用预训练权重初始化。

随后:

m_t=E_m(v_t),\qquad \hat m_t=Q(m_t),\qquad \hat v_t=D_m(\hat m_t)

运动补偿使用的是 \hat v_t,即压缩后再解码的光流。

这是整个框架中的重要约束。接收端只能从码流恢复 \hat m_t,再得到 \hat v_t。编码端必须用同样的光流生成预测,才能与解码端保持一致。

图 3 给出了运动编码器的具体结构:四层步长为 2 的卷积,将空间尺寸连续缩小,并使用 GDN 非线性变换。其尺寸变化为:

H\times W\times2 \rightarrow \frac H{16}\times\frac W{16}\times128

例如,输入光流为 256\times256\times2,运动潜变量为 16\times16\times128。

![主文图 3:运动编码器与解码器;主论文 PDF 第4页,印刷页11009](DVC_讲解资源/figures/main-figure-3.png)
【整理时补入原图】主文图 3:运动编码器与解码器。主论文 PDF 第4页,印刷页11009;图像直接从原 PDF 截取,保留原图注。来源:主文,对应页面。

空间尺寸缩小,通道数增加,是把运动信息重新组织到特征空间中。实际节省多少比特,还取决于量化结果和符号概率,不能只看张量尺寸。 图 3 中黑白格子的特征图也只是示意,不表示每个潜变量只有一位。

  1. 第 3.4 节的运动补偿有两步:先变形,再修正。

首先,按照解码光流对参考帧进行变形:

\tilde x_t=w(\hat x_{t-1},\hat v_t)

可以把它理解为:对当前画面中的每个位置,按照光流指定的位置,到参考帧中取像素。

但变形结果仍可能存在伪影。预测问题本身就可能遇到遮挡、新露出的区域和插值误差,光流压缩还会带来额外误差。

作者因此把三种信息拼接后送入修正网络:

\bar x_t= C\!\left( \operatorname{concat} [\,\tilde x_t,\hat x_{t-1},\hat v_t\,] \right)

在 RGB 情况下,输入包含变形图像的 3 个通道、参考图像的 3 个通道,以及光流的 2 个通道,共 8 个通道。

补充材料图 3 展示了这个网络:它使用残差块、两次下采样和两次上采样,并连接不同尺度的特征。

![主文图 4:运动补偿流程;主论文 PDF 第5页,印刷页11010](DVC_讲解资源/figures/main-figure-4.png)
【整理时补入原图】主文图 4:运动补偿流程。主论文 PDF 第5页,印刷页11010;图像直接从原 PDF 截取,保留原图注。来源:主文,对应页面。
![补充材料图 3:运动补偿网络内部结构;补充材料 PDF 第3页](DVC_讲解资源/figures/supp-figure-3.png)
【整理时补入原图】补充材料图 3:运动补偿网络内部结构。补充材料 PDF 第3页;图像直接从原 PDF 截取,保留原图注。来源:补充材料,对应页面。

读这一节时,注意修正网络没有输入当前原始帧 x_t。这些输入在解码端都能获得,所以解码端能够生成相同的预测。

  1. 第 3.5 节的残差分支,负责补上预测没有解释好的内容。

先计算:

r_t=x_t-\bar x_t

再经过残差编码、量化和解码:

y_t=E_r(r_t),\qquad \hat y_t=Q(y_t),\qquad \hat r_t=D_r(\hat y_t)

最后:

\hat x_t=\bar x_t+\hat r_t

作者采用已有深度图像压缩工作中的非线性网络来处理残差。它承担了传统变换编码中“把残差转到适合压缩的表示”的作用。

一个教学例子:当前像素为 120,预测为 115,原始残差为 5。如果残差解码后变成 4,最终重建就是 119。

这里有一个重要推论:预测不必完美,残差可以补偿预测误差;但补偿需要花比特。

省略熵编码的内部细节,解码端的主体过程可以写成:

```text 从运动码流恢复量化运动潜变量 从残差码流恢复量化残差潜变量

解码光流 = 运动解码器(量化运动潜变量) 变形图像 = warp(上一帧重建结果, 解码光流) 预测帧 = 运动补偿网络(变形图像, 参考帧, 解码光流)

解码残差 = 残差解码器(量化残差潜变量) 当前重建帧 = 预测帧 + 解码残差

保存当前重建帧,作为后续参考 ```

解码端无需重新估计光流,也无需看到当前原始帧。

  1. 公式(1)是论文最重要的部分:三个成本一起优化。

L= \lambda\,d(x_t,\hat x_t) +H(\hat m_t) +H(\hat y_t)

第一项是最终重建失真,论文使用 MSE;后两项分别表示运动和残差的编码成本。

这个目标要求网络同时考虑:

  • 最终图像是否准确。
  • 描述运动是否昂贵。
  • 修正预测误差是否昂贵。

所以,光流网络不能只追求预测准确。它还要考虑自己生成的运动是否容易编码,以及这个运动会留下怎样的残差。

用一个自设例子理解:某种运动表示多花了 0.01 bpp,却使残差少花 0.03 bpp,且最终失真相同,那么总码率减少了 0.02 bpp,这种变化值得采用。

这就是模块之间的协作。

论文在这个损失中没有加入真实光流的监督项。光流网络经过初始化之后,服务于最终的视频压缩目标。

同时注意,\lambda 乘在失真上:它越大,训练通常越重视画质。作者分别训练了 \lambda=256,512,1024,2048 的四个模型,得到不同的率失真工作点。

  1. 第 3.6 节还要解决两个训练障碍:量化和码率如何参与反向传播。

普通取整几乎处处梯度为零,无法直接提供有效的训练信号。作者在训练时,用添加均匀噪声来替代取整:

\tilde y_t=y_t+\eta

给定采样噪声后,这个表达式对 y_t 的导数为 1,梯度能够传回编码器。推理时则使用:

\hat y_t=\operatorname{round}(y_t)

运动潜变量采用相同思路。这里我用波浪号区分训练时的连续近似,避免把它与实际整数符号混淆。

对码率,作者通过概率估计网络建模潜变量分布。一个符号 s 的理想码长估计为:

\ell(s)\approx-\log_2p(s)

例如,概率为 1/2 时对应约 1 bit;概率为 1/8 时对应约 3 bits。因此可以把编码成本理解为:

R_m\approx\sum_i-\log_2p_m(\hat m_{t,i})

残差编码成本同理。

网络学习的不只是“怎样重建”,还包括“怎样生成容易被概率模型编码的符号”。

这里的端到端训练使用量化和码率的可微近似。 实际推理仍需要离散量化与熵编码。图 8(a) 比较了估计码率和算术编码得到的实际码率,两者相近,为训练中的码率估计提供了支持。

  1. 缓存重建帧,是作者为训练效率做的一项具体设计。

当前帧依赖 \hat x_{t-1},而它又依赖更早的重建帧。如果每次都从前面重新编码,训练会增加计算和显存开销,也不利于一个批次包含多样样本。

作者采用在线缓存:编码完一帧后保存其重建结果,以后编码后续帧时读取缓存,并在训练中不断更新。

这既减轻了计算负担,也让训练能够接触已经带有压缩误差的参考图像。

作者还比较了另一种训练方式:直接使用上一帧原始图像作为参考。缓存重建帧的方案在相同 bpp 下约有 0.2 dB 优势。

我的解读是,这个实验支持训练时使用接近实际解码条件的参考图像。论文没有据此证明整段长视频经过展开、跨所有历史帧反向传播;精读时应区分当前帧网络的联合训练与长序列优化。

  1. 看图 5 和补充表 1,要同时看指标、基线和序列差异。
![主文图 5:率失真曲线;主论文 PDF 第6页,印刷页11011](DVC_讲解资源/figures/main-figure-5.png)
【整理时补入原图】主文图 5:率失真曲线。主论文 PDF 第6页,印刷页11011;图像直接从原 PDF 截取,保留原图注。来源:主文,对应页面。
![补充材料表 1:16 个 HEVC 序列的 BD 指标;补充材料 PDF 第1页](DVC_讲解资源/figures/supp-table-1.png)
【整理时补入原图】补充材料表 1:16 个 HEVC 序列的 BD 指标。补充材料 PDF 第1页;图像直接从原 PDF 截取,保留原图注。来源:补充材料,对应页面。

实验采用 Vimeo-90k 训练,在 UVG 和 HEVC Class B/C/D/E 上评估。训练裁剪为 256\times256,批次大小为 4,使用 Adam,初始学习率为 10^{-4}。

横轴 bpp 表示每像素所需比特数,越小越省;纵轴 PSNR 或 MS-SSIM 越高,表示对应指标下重建越好。比较曲线时,应在相同码率下比较质量,或者在相同质量下比较码率。

补充表 1 给出了所列 16 个 HEVC 序列的平均 BD-BR:

相对 H.264 的 BD-BR DVC H.265
以 PSNR 衡量质量 −19.22% −25.06%
以 MS-SSIM 衡量质量 −29.32% −21.73%

负数代表相对基线节省码率。因此,平均结果支持:

DVC 优于论文配置下的 H.264;与 H.265 相比,PSNR 结果仍有差距,MS-SSIM 结果更有竞争力。

29.32% 的基线是 H.264,不能把它读成“相对 H.265 节省 29.32%”。

而且,平均优势不代表每个序列都胜出。例如 BQMall 的 PSNR BD-BR 为 +26.13%,说明该序列上 DVC 相对 H.264 需要更多码率。

传统编码器使用 FFmpeg 的 veryfast 配置,所以性能结论需要与这些设置一起理解。论文对 Wu 等人方法的比较还涉及不同预测结构:DVC 使用一个过去的参考帧,而对方使用两个邻近参考帧。

  1. 图 6、表 1、图 7 的消融,比“网络更强”更能解释论文贡献。
![主文图 6:消融实验;主论文 PDF 第7页,印刷页11012](DVC_讲解资源/figures/main-figure-6.png)
【整理时补入原图】主文图 6:消融实验。主论文 PDF 第7页,印刷页11012;图像直接从原 PDF 截取,保留原图注。来源:主文,对应页面。
![主文表 1:光流码率与变形图像 PSNR;主论文 PDF 第7页,印刷页11012](DVC_讲解资源/figures/main-table-1.png)
【整理时补入原图】主文表 1:光流码率与变形图像 PSNR。主论文 PDF 第7页,印刷页11012;图像直接从原 PDF 截取,保留原图注。来源:主文,对应页面。
| 改动 | 论文报告的影响 |
|---|---|
| 冻结光流网络,不参与联合训练 | 压缩性能下降 |
| 去掉运动补偿修正网络 | 相同 bpp 下 PSNR 约下降 1 dB |
| 去掉运动编码器、解码器 | PSNR 下降超过 2 dB |
| 不使用运动,每帧独立处理 | PSNR 下降超过 2 dB |
| 训练参考改用上一帧原始图像 | PSNR 约下降 0.2 dB |

主文表 1 尤其值得看:

| 方案 | 光流编码成本 | 变形图像 PSNR |
|---|---:|---:|
| 冻结光流网络 | 0.044 bpp | 27.33 dB |
| 联合训练 | 0.029 bpp | 28.17 dB |

联合训练后,运动编码成本约减少了 34%,变形图像的 PSNR 还提高了 0.84 dB。

这里的 PSNR 衡量的是**变形图像**,不是最终加上残差后的重建帧。两者不能混用。

图 7 则提供了机制上的线索:联合训练后的重建光流出现更多零运动区域。对一些纹理均匀的区域,运动值即使偏离真实运动,采样得到的像素仍可能很接近。
![主文图 7:光流可视化与运动幅度统计;主论文 PDF 第7页,印刷页11012](DVC_讲解资源/figures/main-figure-7.png)
【整理时补入原图】主文图 7:光流可视化与运动幅度统计。主论文 PDF 第7页,印刷页11012;图像直接从原 PDF 截取,保留原图注。来源:主文,对应页面。
**这组结果说明,用于压缩的运动表示可以优先保留对预测有价值、又容易编码的信息。** 但“零光流更多”只是可压缩性的一个解释,实际码率仍由潜变量与概率模型决定。

图 8(b) 还显示,随着 \lambda 增大,总码率上升,运动信息所占比例从 38.8% 降至 26.9%。比例下降并不等于运动的绝对码率下降,要同时看分母如何变化。
![主文图 8:估计与实际码率、运动码率占比;主论文 PDF 第8页,印刷页11013](DVC_讲解资源/figures/main-figure-8.png)
【整理时补入原图】主文图 8:估计与实际码率、运动码率占比。主论文 PDF 第8页,印刷页11013;图像直接从原 PDF 截取,保留原图注。来源:主文,对应页面。
  1. 最后评估论文贡献与边界,避免把实验结论扩大。

    我的判断是,DVC 最有价值的贡献是:把可学习的运动表示及其编码成本,纳入运动补偿和残差编码共同参与的率失真优化。 光流、压缩变换和概率建模都有已有工作的基础,作者的重要工作在于把它们组成有效的视频压缩系统。

    论文还留下几个值得继续研究的问题:

    • 时间信息利用有限。 主网络只使用一个过去的重建参考帧,多参考帧和双向预测仍有扩展空间。
    • 码率调节依赖多个模型。 四个 \lambda 对应分别训练的模型,论文没有由此建立一个完整的连续码率控制机制。
    • 首帧与完整码流细节没有在主网络图中展开。 复现完整视频编码系统时,还需要明确首帧编码、必要附加信息和总比特统计方式。
    • 运行速度具有具体实验条件。 论文在 352\times288 视频上报告约 24.5 fps 编码、41 fps 解码,不能直接据此推断高分辨率实时表现。

    回到图 2,最值得你亲自追踪的一条依赖关系是:

    \boxed{ \text{光流} \rightarrow\text{运动潜变量} \rightarrow\text{解码光流} \rightarrow\text{预测} \rightarrow\text{残差} \rightarrow\text{最终重建} }

    改变前面的光流,不仅改变运动码率,还会改变残差码率和最终失真。公式(1)把这三个后果一起反馈给网络,这就是理解整篇 DVC 的关键。