神经编码:从手工规则到端到端学习,视频压缩的范式革命

发布时间:2026/10/5 9:23:34
神经编码:从手工规则到端到端学习,视频压缩的范式革命
视频编码这个领域过去二十年基本是手工设计的天下。从H.264到H.265再到H.266每一代标准背后都是大量专家花几年时间打磨滤波器、变换矩阵、预测模式。但最近两年一个明显的变化正在发生编码器开始自己学了。神经编码Neural Codec不是简单地把AI塞进现有框架当个调参工具而是从底层重构了压缩这件事的逻辑。我接触这块内容有一段时间了从最初以为不就是用神经网络替代某个模块嘛到后来真正理解端到端学习对编码范式的冲击中间踩过不少认知上的坑。这篇内容想聊清楚三件事神经编码到底和传统编码的本质区别在哪、它凭什么能做得更好、以及如果你现在想上手这个方向该从哪些地方切入。不管你是做视频算法的工程师还是对下一代编码标准好奇的技术爱好者都能从中拿到一些实在的东西。1. 从人设计规则到机器学规则的范式切换1.1 传统编码器的本质一套精心设计的手工规则集要理解神经编码带来的变化得先把传统编码器到底在干什么说清楚。H.265也好H.266也好它们的核心流程可以拆成几个固定环节帧内预测、帧间预测、变换、量化、熵编码。每一个环节都是人类专家基于信号处理理论设计出来的。比如帧内预测H.265定义了35种预测模式每种模式对应一个固定的方向编码器去尝试这些模式选一个残差最小的。再比如变换用的是DCT及其变体因为DCT在能量集中性上有理论上的最优性证明。这套东西的问题在哪在于它是局部最优的堆叠。每个模块单独看都设计得很精巧但模块之间的配合是割裂的。帧内预测选了一个模式这个选择会影响后续变换的效果但预测模块在做决策时并不知道变换模块会怎么处理。整个编码器是一个手工拼接的流水线每个环节优化自己的目标全局最优性没有保证。更关键的是这些规则是静态的。H.265的35种帧内预测模式对所有视频内容一视同仁。但实际视频内容千差万别动画片的纹理分布和自然风景完全不同监控视频和电影大片的统计特性也差很远。用一套固定规则去应对所有内容必然在某些场景下效率不高。1.2 神经编码的核心主张让网络自己学出最优表示神经编码的思路完全不同。它不再手工设计预测模式、变换核而是用一个神经网络直接把原始像素映射到压缩表示再从压缩表示重建像素。整个过程的优化目标是端到端的率失真损失L D λR其中D是重建失真R是码率λ控制两者的权衡。网络在训练中自动学习怎么在有限码率下最小化失真。这个变化听起来简单但含义很深。传统编码器里那些预测模式变换核的概念在神经编码里都不存在了。网络学到的是一种隐式的、高维的表示方式它可能同时完成了预测、变换、量化等多个环节的功能而且这些功能是联合优化的。你可以把它理解成传统编码是分步骤手工做菜神经编码是端到端学出一道菜的完整做法。我一开始有个误解觉得神经编码无非是把某个模块换成网络比如用网络做帧内预测。但真正读了几篇代表性工作之后才明白端到端的意思是整个编码链路一起学不是替换某个零件。这个区别很关键因为只有端到端联合优化才能突破模块割裂带来的性能天花板。1.3 为什么现在才火三个前提条件同时成熟神经编码的想法其实不新十年前就有人尝试用自编码器做图像压缩。但为什么最近才真正受到重视我觉得是三个条件同时到位了。第一是算力。训练一个端到端视频编码网络需要处理大量视频序列计算量远超传统编码器的开发。GPU集群的普及让这件事变得可行。第二是网络架构的进步。早期的自编码器表达能力有限学不过手工设计的变换。后来卷积网络、注意力机制、可变形卷积等结构出现网络的表示能力大幅提升才开始在率失真性能上追平甚至超过传统方法。第三是可微量化技术的成熟。量化是压缩的核心但标准量化操作不可导没法直接反向传播。这几年软量化、加性噪声近似、直通估计器等技巧逐渐成熟才让端到端训练真正跑通。这三个条件缺一不可。算力不够训练不起来架构不行学不过手工设计量化不可导梯度传不下去。现在三者都具备了神经编码才从论文里的概念变成有实际竞争力的方案。2. 神经编码凭什么压缩得更狠率失真优化的底层逻辑2.1 率失真损失函数把压缩变成一个可优化的数学问题传统编码器也有率失真优化但它的优化是局部的、离散的。编码器在给定的量化参数下尝试不同的预测模式和块划分选一个代价最小的。这个过程的搜索空间是离散的而且每个决策点独立做选择。神经编码把率失真优化变成了一个连续的、全局的可微问题。损失函数L D λR里D通常是MSE或MS-SSIMR是码率的估计。训练时网络参数朝着降低这个联合损失的方向更新。这意味着网络学到的表示是在失真和码率之间找到了一个全局的平衡点而不是在每个局部环节各自妥协。这里有个细节值得说码率R怎么估计实际编码后的码率是离散的、不可导的。常见做法是用熵模型来估计比如假设隐变量服从某种分布用分布的对数似然作为码率的代理。训练时优化这个代理推理时再用实际的熵编码器编码。这个训练用代理、推理用真实的模式是神经编码能跑通的关键工程技巧之一。2.2 学习到的变换 vs 固定DCT能量集中性的代际差异DCT之所以被用了几十年是因为它对自然图像有很好的能量集中性——大部分能量集中在低频高频系数接近零量化掉也不影响太多。但DCT是固定的它对所有图像一视同仁。神经编码学到的变换是内容自适应的。网络可以根据输入内容调整变换的特性。对于纹理丰富的区域它可能学出一种更稀疏的表示对于平滑区域它可能学出另一种。这种自适应性带来的增益在低码率下尤其明显因为低码率下每个比特都很宝贵固定变换的浪费会被放大。我做过一个粗略的对比实验同样在低码率下传统编码器在一些复杂纹理区域会出现明显的块效应和模糊而神经编码方案在这些区域的重建质量更均匀。原因就是学习到的变换能更好地匹配内容的统计特性不会在固定变换不擅长的区域翻车。2.3 运动补偿的重新定义从块匹配到光流学习视频编码比图像编码多了一个维度时间。传统视频编码用块匹配做运动补偿把当前块在参考帧里找一个最相似的块只编码残差。块匹配的问题是它假设运动是平移的而且以块为单位遇到旋转、缩放、非刚性运动就力不从心。神经编码里运动补偿通常用光流来做。网络直接学出一个稠密的光流场描述每个像素的运动。光流可以表达更复杂的运动而且和后续的残差编码、变换是联合优化的。有些方案甚至不用显式光流直接让网络在特征空间做时间预测效果也不错。这个变化的意义在于运动补偿不再是先估计运动、再编码残差的两步走而是和整个编码链路一起学。网络学到的运动表示是为了最终的重建质量服务的不一定对应物理意义上的真实运动但压缩效率更高。2.4 端到端联合优化带来的涌现能力端到端训练最有意思的地方是网络会学出一些设计者没预料到的能力。比如有些神经编码网络在训练后隐变量的分布呈现出明显的层次结构低频信息和高频信息自然分离。还有些网络学会了根据内容复杂度动态分配比特复杂区域多给比特简单区域少给这个行为不是显式编程的是优化过程中自己涌现出来的。这种涌现能力是手工设计很难做到的。手工设计时你得先想到某个机制再把它实现出来。而端到端学习是让网络自己在高维空间里找最优解找到的解可能超出人类的设计直觉。这也是神经编码被认为有下一代潜力的核心原因——它不是把现有框架优化一点而是可能打开一个全新的设计空间。3. 落地路上的硬骨头神经编码当前的工程瓶颈3.1 计算复杂度解码端的算力账单神经编码在率失真性能上有优势但代价是计算复杂度。传统解码器是高度优化的H.265解码在手机上都能实时跑。神经编码的解码需要跑一个神经网络参数量动辄几百万到上亿算力需求高出一个数量级。这在服务器端可能不是问题但在移动端、嵌入式设备上就是硬伤。我见过一些方案尝试用轻量化网络来降低复杂度但轻量化之后性能优势会被压缩。怎么在性能和复杂度之间找平衡是目前工程落地的核心难题。有些团队在做专用硬件加速把神经解码的关键算子做成固定电路但这又牺牲了灵活性。3.2 标准化困境没有统一标准就没有生态传统编码有H.264、H.265、H.266这样的国际标准不同厂商的编码器和解码器可以互通。神经编码目前没有统一标准各家方案网络结构不同、训练方式不同编码后的码流互不兼容。这意味着你用一个方案编码的视频只能用同一个方案解码生态没法建立。标准化的难点在于神经编码的标准该定什么传统标准定的是比特流语法和 decoding 流程但神经编码的 decoding 流程就是一个网络推理网络结构千变万化很难用传统方式标准化。目前业界在探索的方向是标准化网络架构的某些部分或者定义一套接口让不同网络可以互操作但都还在早期。3.3 泛化能力训练集之外的内容怎么办神经编码网络是在特定训练集上训出来的。如果测试内容和训练集分布差异大性能可能下降。比如用自然图像训的网络遇到屏幕内容、医学图像、遥感图像效果可能不如传统编码器稳定。传统编码器虽然也是基于自然图像的统计特性设计的但它的规则是通用的不会因为内容分布偏移而崩溃。神经编码的泛化问题需要通过多样化的训练数据、领域自适应技术、或者在线微调来缓解。但这些都是工程上的额外成本增加了落地的复杂度。3.4 专利与许可绕不开的商业现实传统编码标准背后有大量专利使用要交许可费。神经编码目前专利格局还不清晰但可以预见核心的网络架构、训练方法、量化技术都可能被专利覆盖。对于想商用的团队来说这是一个必须提前考虑的风险。开源方案虽然能用但商用时的专利风险需要专业评估。4. 想上手神经编码从哪几个切入点开始4.1 先补基础率失真理论和可微量化的必备知识如果你之前没接触过压缩编码直接看神经编码的论文会很吃力。建议先补两块基础。一是率失真理论理解L D λR这个损失函数的来龙去脉知道λ怎么影响码率和失真的权衡。二是可微量化技术搞清楚软量化、加性噪声、直通估计器各自的原理和适用场景。这两块是神经编码的技术底座不补的话后面看论文只能看个热闹。我自己的学习路径是先读了几篇经典的图像压缩自编码器论文把端到端压缩的基本框架搞明白再去看视频方向的扩展。图像是视频的基础图像压缩搞懂了视频无非是多了一个时间维度的处理。4.2 动手复现从图像压缩自编码器开始看懂论文和跑通代码是两回事。建议找一个开源的图像压缩自编码器实现自己跑一遍训练和推理。重点关注几个地方损失函数怎么写的、量化怎么处理的、熵模型怎么估计码率的、训练时用了什么技巧稳定收敛。复现过程中最容易卡住的地方是训练不稳定。端到端压缩网络的损失函数里码率项和失真项的梯度尺度可能差很多训练容易震荡。常见做法是用梯度裁剪、调整λ的warmup策略、或者对码率项做归一化。这些技巧论文里不一定写但实际跑的时候必须处理。4.3 视频方向的扩展光流估计与时间建模图像压缩跑通之后往视频方向扩展。核心是加时间建模。最简单的做法是把前几帧的重建结果作为参考和当前帧一起送进网络让网络自己学时间预测。进阶做法是显式估计光流用光流做运动补偿再编码残差。光流估计本身就是一个成熟的研究方向有现成的网络和预训练模型可以用。但要注意神经编码里的光流不一定要追求准确而是要追求对压缩有利。有时候一个不太准但更平滑的光流场压缩效率反而更高。这个认知需要在实际实验中慢慢建立。4.4 评测与对比怎么公平地衡量神经编码的性能评测神经编码性能时最容易犯的错误是拿自己的方案和未优化的传统编码器比。传统编码器有大量工程优化比如码率控制、自适应量化、感知优化等。公平的对比应该用相同码率点、相同测试序列、相同失真度量。常用的失真度量有PSNR、MS-SSIM、VMAF。PSNR简单但对感知质量不敏感MS-SSIM和VMAF更贴近人眼感受。建议至少报告两个指标避免单一指标的误导。另外码率要报告实际编码后的比特数不能用估计值否则对比不公平。5. 神经编码与传统编码的实战对比几个关键维度的实测观察5.1 低码率场景神经编码的优势区间从公开的评测结果和我自己的实验来看神经编码在低码率下的优势最明显。低码率意味着每个比特都要精打细算传统编码的固定变换和块匹配在这个区间容易产生明显的块效应和模糊。神经编码的学习到的表示能更高效地利用有限的比特重建质量更均匀。具体来说在同等PSNR下神经编码方案通常能比H.265节省20%到40%的码率比H.266节省10%到20%。这个数字因方案和测试内容而异但趋势是一致的。低码率是神经编码最值得关注的落地场景比如视频会议、移动端短视频等带宽受限的应用。5.2 高码率场景优势收窄但仍有价值高码率下传统编码器的表现会好很多因为块效应和模糊在高码率下不明显。神经编码的优势会收窄但通常还是能保持一定的码率节省。高码率场景下神经编码的价值更多体现在感知质量上比如MS-SSIM和VMAF指标上的提升可能比PSNR更明显。高码率场景的另一个考量是计算成本。如果码率节省只有10%但解码算力增加十倍在很多应用里不划算。所以高码率场景是否用神经编码要结合具体应用的算力预算来定。5.3 不同内容类型的表现差异神经编码对不同内容类型的表现差异很大。自然图像和视频上神经编码优势明显。屏幕内容、动画这类合成内容上优势可能缩小甚至消失因为传统编码器针对这类内容有专门的优化模式。医学图像、遥感图像这类专业内容如果训练集里没有覆盖神经编码可能表现不佳。这个差异提醒我们神经编码不是万能药。选型时要看目标内容类型如果内容比较特殊要么用覆盖了这类内容的训练集重新训练要么老老实实用传统编码器。5.4 解码延迟与功耗移动端落地的现实约束移动端落地神经编码最大的约束是解码延迟和功耗。传统解码器在手机上解码1080p视频功耗通常在几百毫瓦级别。神经解码如果跑一个中等规模的网络功耗可能到几瓦延迟也可能从几毫秒增加到几十毫秒。对于实时应用这个延迟是不可接受的。目前的缓解方案有几种一是用轻量化网络牺牲一些性能换复杂度二是用硬件加速把网络的关键层做成专用电路三是分层解码先解一个低质量版本快速显示再逐步增强。这些方案各有取舍没有银弹。6. 神经编码的下一步几个值得关注的技术方向6.1 隐式神经表示与压缩的结合隐式神经表示INR是最近的一个热点。它的核心思想是用一个网络来表示信号网络的输入是坐标输出是对应的像素值或特征。把INR用于压缩就是把视频过拟合到一个网络里网络参数就是压缩表示。这种方式的压缩比潜力很大但解码需要跑网络推理复杂度高。目前还在研究阶段但方向很有意思。6.2 生成模型辅助的感知压缩传统压缩优化的是像素级失真但人眼对像素级误差不敏感对结构和语义更敏感。生成模型如扩散模型、GAN可以辅助压缩在低码率下生成感知上合理的细节而不是简单地模糊掉。这类方案在极低码率下能显著提升主观质量但生成的内容可能和原始内容有偏差需要谨慎使用。6.3 面向机器的压缩为下游任务优化传统压缩是为人看优化的目标是重建质量好。但在很多场景下视频是给机器看的比如自动驾驶、视频监控里的目标检测。面向机器的压缩不追求像素级重建质量而是追求下游任务的性能。这类压缩的率失真函数要重新定义优化目标变成在给定码率下最大化下游任务准确率。这是一个很有前景的方向因为机器视觉应用越来越多为机器优化的压缩有实际需求。6.4 标准化进展与产业动态标准化方面MPEG和JVET都在关注神经编码但目前还没有形成正式标准。产业界方面一些公司在做神经编码的硬件加速和产品化尝试但大规模商用还需要时间。我的判断是神经编码会先在特定场景如云游戏、视频会议落地再逐步扩展到更广泛的场景。标准化可能会以混合模式出现即传统编码和神经编码共存根据场景选择。7. 我在实操中踩过的几个坑和对应的解法7.1 训练不收敛码率项和失真项的梯度失衡第一次训端到端压缩网络时损失函数怎么都不收敛。排查后发现是码率项和失真项的梯度尺度差太多失真项的梯度主导了更新网络只顾着降失真码率飙高。解法是对码率项做归一化或者用λ的warmup策略先让网络学重建再逐步加大码率的权重。这个技巧在论文里往往一笔带过但实际跑的时候不处理就是训不起来。7.2 量化带来的训练推理不一致训练时用量化的近似比如加性噪声推理时用真实量化两者不一致会导致性能下降。这个问题的根源是近似量化和真实量化的统计特性不同。缓解办法是训练后期逐渐收紧近似让近似量化逼近真实量化或者用直通估计器让梯度直接穿过量化操作。我试过几种方案直通估计器实现简单效果也稳定推荐优先尝试。7.3 评测时的码率计算陷阱早期做对比实验时我用估计码率代替实际码率结果发现自己的方案看起来比传统编码器好很多但实际编码后发现优势没那么大。原因是熵模型估计的码率和实际熵编码后的码率有偏差。后来改成用实际编码后的比特数做对比结论才靠谱。这个坑提醒我评测一定要用真实数据不能用代理指标自欺欺人。7.4 泛化性不足训练集覆盖面的重要性有一次用自然图像训的网络去压缩屏幕内容效果惨不忍睹。屏幕内容有大片纯色区域和锐利边缘统计特性和自然图像差异很大。后来在训练集里加入屏幕内容数据效果才改善。这个经历让我意识到神经编码的泛化性高度依赖训练集覆盖面做产品时要根据目标内容类型准备训练数据不能指望一个网络打天下。8. 给不同阶段读者的上手建议8.1 学生和研究者从复现经典工作开始如果你是学生或研究者想进入这个方向建议从复现经典工作开始。选一篇有开源代码的神经编码论文把训练和推理跑通然后尝试改进某个模块看性能有没有变化。这个过程能帮你建立对端到端压缩的直觉。发论文的话目前感知压缩、面向机器的压缩、极低码率压缩都是比较活跃的方向。8.2 工程师关注工程约束和落地场景如果你是工程师想在实际产品里用神经编码建议先明确场景约束码率范围、算力预算、延迟要求、内容类型。然后找匹配的开源方案做原型验证。不要一上来就追求SOTA性能先跑通流程再逐步优化。工程落地里复杂度和延迟往往比率失真性能更关键。8.3 技术管理者评估技术成熟度和投入产出如果你做技术决策评估神经编码时要看三点一是你的场景是否在神经编码的优势区间低码率、自然内容二是你的算力预算是否支撑神经解码三是专利和标准化风险是否可控。神经编码目前还不是开箱即用的成熟技术投入前要做好长期准备。8.4 跨领域开发者从工具链和评测入手如果你是从其他领域转过来的开发者建议先从工具链和评测入手。熟悉常用的压缩工具、评测指标、测试序列理解率失真曲线的含义。然后找一个开源方案跑通建立感性认识。跨领域的优势是可能带来新的视角比如把其他领域的生成模型、表示学习技术引入压缩可能有意想不到的效果。神经编码这个方向我最大的体会是它不是AI调参数那么简单而是对压缩这件事的重新定义。传统编码是人在设计规则神经编码是机器在学习规则。这个范式切换带来的性能提升是实实在在的但工程落地的挑战也是实实在在的。如果你现在想切入建议从图像压缩自编码器入手把端到端训练跑通再往视频方向扩展。过程中会遇到训练不稳定、量化不一致、评测不公平这些坑但每填一个坑你对这个方向的理解就深一层。这个领域还在快速演进现在进去正好赶上从研究到落地的关键窗口期。