Token导航 LogoToken导航

AI 资讯 · 科技行者

视频压缩画质评分与人眼感受为何不一致

更新 2026-10-20科技行者正文 7398字阅读约 24分钟

先问你一个问题:你有没有遇到过这种情况,一段视频压缩之后,软件告诉你画质分数很高,可是你自己看着就是觉得哪里怪怪的,人脸糊了、边缘发虚,但仪表盘上的数字明明说"很好"?

这不是软件骗你,而是它压根没打算讨好你的眼睛。

绝大多数视频编码器,从最早的 H.264 到现在的 VVC,内部优化时用的标尺都是一个叫 SSE 的东西。

SSE

全称 sum of squared errors,即误差平方和,简单说就是把压缩前后每个像素的差值平方后加起来,数值越小说明画面"看起来"越接近原图。

这个标尺简单粗暴,但它有个致命问题:像素级别的数学接近,不等于人眼感知上的接近。你盯着一张脸看,眼睛和嘴角哪怕误差不大,你也会立刻觉得"这人脸崩了";但背景里一片树叶的像素误差大一点,你根本不会注意到。SSE 不知道这些,它一视同仁。

于是学术界这些年造出了一批更懂人眼的指标,比如 SSIM、MS-SSIM、LPIPS,这些指标在评价图像质量的时候,比 SSE 准得多,跟人的主观感受贴合度更高。问题是,这些高级指标有个共同的毛病:它们必须拿着一整张解码完成的图片才能算分,没法像 SSE 那样拆成一块一块单独计算。

这就带来一个很尴尬的局面。视频编码器在工作的时候,是把整幅画面切成一个个小方块,一块一块地决定怎么编码最划算,这个过程叫码率失真优化。

RDO

rate-distortion optimization 的缩写,编码器在压缩每一块画面时,要在"用多少比特"和"失真多大"之间找一个性价比最高的平衡点,这个找平衡点的过程就是 RDO。

SSE 天生适合这套流程,因为整张图的 SSE 恰好等于每个小块 SSE 加起来的总和,所以编码器可以只管自己那一块,不用管全局。但 SSIM、LPIPS 这类指标偏偏不满足这个"可拆分"的性质,它们要看完整张图才能给分,你没法让编码器一边切块一边实时用它们打分。

如果编码器想用这些更懂人眼的指标做优化,唯一的笨办法是把整个视频编码、解码、算分这套流程反复跑很多遍,去试探哪种参数组合分数最高。这在实际产品里几乎不可行,太慢了。

这就是这篇论文要啃的骨头:能不能想个办法,让编码器在切块工作的时候,用上这些更懂人眼的指标,而不用像现在这样"闭眼摸黑"只认 SSE?

已有的补救方案,为什么都不够用

在这篇论文之前,其实已经有人尝试过打补丁。

比如针对 SSIM 专门设计过一套 RDO 方法,能直接把 SSIM 用到编码决策里,但这套方法只认 SSIM 这一个指标,换成 LPIPS 就不灵了。还有一种叫 PerceptQPA 的方法,思路更取巧:它不去碰编码器内部那套复杂的分块决策逻辑,只是给每个块的量化参数(也就是压缩力度)做个微调,让压缩力度分配得更符合一种叫 WPSNR 的感知加权指标。但这个方法只能调整"压缩力度"这一个旋钮,编码器里划分块、选预测模式、选变换方式这些核心决策,用的依然是老掉牙的 SSE。

打个比方,这就像你想让一家餐厅做出更符合你口味的菜,但你能做的只有饭后往菜里撒盐调味,厨师炒菜的整个过程你根本插不上手。撒盐能救一点场面,但炒糊了的菜终究还是糊的。

还有一种更晚近的思路,来自 Yang 和 Bajic 2025 年的一篇工作,他们训练了一个专门针对某个目标指标优化过的神经网络编码器,拿这个网络编码器给出的比特分配方案,转换成传统编码器能用的量化参数地图。这个思路能兼容任意指标,听起来很美,但代价是你得先训练一个神经网络编码器,然后拿这个编码器去跑一遍你要压缩的每一张图片,才能"抄"出一份参数表,计算成本相当高,而且换个目标指标可能就要重新训练。

这几种方案摆在一起,会发现它们要么指标固定死了,要么只能碰量化参数这一个环节,没有一个能让编码器把任意一个感知指标,真正当成从头到尾的优化目标来用。

用二次函数"伪装"复杂指标

这篇论文的解法,思路上有点像做菜前先把复杂的菜谱简化成一份"傻瓜版操作手册"。

SSIM、LPIPS 这些复杂指标本身是非线性的、拆不了块的,直接硬啃行不通。但论文借用了一个数学上很老的技巧:泰勒展开。

任何一个足够光滑的函数,在某个点附近,都可以用一个二次函数去近似它,误差随着距离缩小而快速缩小。放到这里的意思是:只要压缩后的图片和原图差别不算太离谱(也就是高码率、画质损失不大的场景),复杂的感知指标在原图这一点附近,行为就可以用一个二次函数去模仿。

这个二次函数长什么样?论文管它叫 IDQD。

IDQD

input-dependent quadratic distortion 的缩写,意思是"依赖于输入内容的二次失真"。它本质上是一个加权版的 SSE:普通 SSE 是把每个像素误差平方后直接加起来权重都一样,IDQD 则是先给每个像素(或像素组合)算出一个重要性权重,再加权求和。这个权重矩阵来自对目标指标求二阶导数,也就是数学上的 Hessian 矩阵。

Hessian 矩阵这个名字听着吓人,其实可以理解成一张"敏感度地图":它告诉你,如果某个像素稍微改变一点,目标指标的得分会剧烈波动还是几乎不动。SSIM 这类指标对人脸五官区域特别敏感,对天空这种平坦区域不那么敏感,Hessian 矩阵把这种"哪里敏感、哪里不敏感"用数字精确记录了下来。

这个设计的巧妙之处在于,它把"用复杂指标做优化"这件事,转化成了"用一个加权版 SSE 做优化"。而加权版 SSE 依然是可以拆分成块的,只要权重矩阵也能按块拆开,编码器就能继续用它熟悉的那套分块优化流程,只是从"所有像素误差一视同仁"变成了"重要的像素误差算得更重"。

这就好比你本来要看着一本外语原版书做批注,读不懂没法下笔,现在有人先把这本书翻译成了你熟悉的语言,虽然翻译版本不是百分百精确还原原文的每一个细微语感,但足够让你正常读下去、正常做批注了。如果没有这一步"翻译",编码器压根没法直接跟 SSIM、LPIPS 这些指标打交道,只能像前面提到的那些补丁方案一样,绕着走或者只能碰边角。

Hessian 矩阵太大了,怎么办

这里出现一个新麻烦:Hessian 矩阵虽然理论上很好用,但它实在太大了。

一张图有多少像素,Hessian 矩阵理论上就有像素数的平方那么多个数字。一张普通的高清图片动辄几百万像素,平方之后是天文数字,别说实时计算,就是存下来都存不下。而且即便算出来了,这个矩阵默认是"全连接"的,任意两个像素之间都有一个权重,这种全连接结构照样没法按块拆分,等于白算。

论文的应对办法是做两层简化。

第一层简化,论文观察到一个规律:像 SSIM、MS-SSIM 这些指标,本质上是在比较图像局部区域的统计特征,比如某个小窗口内的均值、方差这些"局部矩",天然就只关心相邻像素之间的关系,离得远的像素之间几乎没有耦合。既然如此,与其保留 Hessian 矩阵里所有像素两两之间的关系,不如只保留同一个小块内部像素之间的关系,块与块之间直接忽略。这就是论文提出的"块对角近似",把一个天文数字大小的矩阵,砍成一堆很小的、每个只管自己那一块像素的小矩阵。

第二层简化更激进,干脆连块内部像素之间的关系也不要了,只留每个像素自己对自己的那个权重,相当于给每个像素单独算一个重要性分数,这就是"对角近似"。

论文做了个很实在的验证:随机挑几个 8×8 的小块,把 Hessian 矩阵里属于这个块的那部分能量占比算出来看看。结果发现 SSIM 和 MS-SSIM 高达 99% 的能量都集中在块内部,说明块对角近似对这两个指标几乎不掉信息;WD(Wasserstein Distortion)能保住 63%,也还不错;但 LPIPS 只有 18%,DISTS 更是只有 0.3%,说明这两个基于神经网络特征的指标,像素之间的耦合范围要宽得多,块对角近似对它们来说损失就比较明显了。

这其实是意料之中的结果。SSIM 这类传统指标本来就是靠局部窗口算出来的,局部性写在它的定义里;而 LPIPS、DISTS 是拿一个训练好的神经网络提取特征再比较,神经网络里的卷积层层层叠加,感受野越往深越大,一个像素可能影响到很远的区域,局部近似自然会打折扣。

这就好比你想用"周边邻居互相打分"的办法来估算一整个城市的社会关系网。如果这个城市里大家基本上只跟隔壁邻居来往,这个估算就很准;但如果城市里有一群人是通过某个跨城市的社交网络紧密联系在一起的,你光看物理上的邻居关系,就会严重低估他们之间的联系强度。SSIM 就是"邻里社会",LPIPS、DISTS 更像是"跨城社交网络"。

不过论文也补了一句挺重要的观察:就算块对角近似对 LPIPS、DISTS 不算精确,用这个近似算出来的指标依然能带来实实在在的提升,原因是量化误差本身在不同像素之间往往是不太相关的,这在一定程度上抵消了忽略远距离耦合造成的偏差。

怎么把 Hessian 矩阵估出来

砍小了矩阵的规模只是第一步,接下来还得解决怎么把这个矩阵的数值算出来的问题,因为直接对复杂指标求二阶导数依然很贵。

论文用的办法叫随机估计,思路是不直接算出整个矩阵,而是用蒙特卡洛采样的方式去"猜"。具体做法是往图片上加一些随机噪声向量(专业说法叫探针),看这些噪声向量经过 Hessian 矩阵变换之后变成什么样,重复很多次采样,用统计平均去逼近真实的 Hessian 矩阵。

这背后用到的计算工具,叫 Hessian-vector product,通过自动微分技术,可以用一次前向计算加两次反向传播,直接算出"Hessian 矩阵乘以某个向量"的结果,而不需要先把整个 Hessian 矩阵老老实实地构建出来再做乘法,这样省掉了绝大部分不必要的计算和存储开销。

对于 LPIPS、DISTS、WD 这类指标,论文还发现了一个更省力的捷径。这几个指标本质上都是在算"两个特征向量之间的距离的平方",这种数学形式有个专门的处理方法叫 Gauss-Newton 近似,可以直接用神经网络的雅可比矩阵(描述输入怎么影响输出特征的矩阵)来快速构造出一个总是合法(专业说法是半正定)的 Hessian 近似,而且这种方式算出来的估计方差更小,估得更准。

这里还有个技术细节挺有意思。神经网络的梯度这个东西,是出了名的"神经质":输入稍微抖一点点,梯度可能就变得面目全非,附近几个相似的输入点算出来的梯度可能几乎不相关。这意味着单纯在原图这一个点上算出来的 Hessian,很可能只是一次不靠谱的"抽样",运气不好可能完全偏离真实情况。论文借鉴了之前用于给梯度去噪的一种技术,叫平滑处理,做法是不只在原图这一个点上算,而是在原图周围随机撒一圈带噪声的点,每个点都算一次,最后把结果平均起来,这样算出来的 Hessian 估计更稳,不容易被某一次抽样的运气坏账带偏。

这有点像你想知道一片山地的平均海拔,如果只在山顶某一个具体的点上测一次,很容易因为脚下正好站在一块突出的岩石上而得出偏高的结论;但如果你在山顶附近撒开测量十几个点,取平均值,这个估计就靠谱多了。如果不做这个平滑处理,神经网络类指标算出来的重要性地图很可能噪声很大,指哪打哪的效果就会打折扣。

算出重要性地图之后要怎么用

拿到了每个像素(或每个块)的重要性权重之后,接下来的事情就顺理成章了:把编码器里原本用来做分块决策、预测模式选择、变换选择这些环节里的 SSE,替换成加权版的 SSE,也就是前面说的 IDQD。

论文特别强调,这套方法是标准兼容的,意思是只需要改动编码器(也就是压缩视频的那一端)的内部决策逻辑,解码器(播放视频那一端,也就是你手机、电视里解压缩视频的那部分)完全不用动。这一点很关键,因为如果连解码器都要跟着改,那全世界数十亿台已经在用的播放设备都得升级,这在现实中基本不可能推行。而只改编码器意味着视频平台或者制作方可以悄悄升级自己的压缩流程,用户那端播放视频的软件和硬件完全无感。

论文还处理了一个容易被忽略的细节:怎么控制"追求感知质量"和"追求传统 PSNR 分数"之间的平衡。这两者有时候会打架,你为了讨好 LPIPS 这个指标做出的调整,未必对传统的像素误差友好。论文引入了一个可调参数,往权重矩阵里加了一个可调的基础值,数值调大一点,行为就更接近传统 SSE;调小一点,就更偏向感知指标的判断,用这个旋钮去平衡两边。

另外,编码器内部除了要决定"哪里重要哪里不重要",还有一个环节叫码率控制,需要知道该给多大的压缩力度、花多少比特预算。论文推导了一个公式,证明只要用新的重要性权重矩阵的迹(矩阵对角线元素之和)去调整传统 SSE 用的那套公式,就能得到跟新指标匹配的码率控制参数,不需要另起炉灰重新设计一套码率控制系统。

实测效果:省下多少码率

理论说得再漂亮,最终还是要看实际效果。论文在两个常用的图片测试集上做了实验,一个是经典的 Kodak 数据集(24 张标准测试图),一个是 CLIC 专业验证集(41 张图片,用来验证方法是否能推广到没见过的数据上)。编码器用的是 VVC 的官方参考软件 VTM,对比的基准是传统的 SSE 优化流程。

衡量效果的指标叫 BD-rate。

BD-rate

一种衡量视频编码效率提升的通用指标,意思是在保持相同画质水平的前提下,新方法相比旧方法能省下百分之多少的码率(也就是文件大小)。数值是负的,说明新方法更省码率,效果更好;负得越多,省得越多。

实验结果显示,针对每个具体的目标指标去优化时,块对角版本的 IDQD 方法在 Kodak 数据集上能带来 15.5% 到 23.6% 的码率节省,在 CLIC 数据集上是 14.2% 到 36.7%,比 PerceptQPA 那种只调量化参数的方法最多能多省 21 个百分点。跟前面提到的 Yang 和 Bajic 那篇需要训练专属神经网络编码器的方法比,这篇论文在对方设定的实验环境下重新测试,结果同样是全面胜出,比如以 MS-SSIM 为优化目标时,这篇论文的方法能省 17.53%,对方是 11.88%;以 LPIPS 为优化目标时更悬殊,这篇论文能省 17.63%,对方只有 8.33%。

一个挺有意思的观察是,SSIM 和 DISTS 这两个指标的重要性地图互相并不兼容,用 SSIM 的地图去优化 DISTS,或者反过来,效果反而会变差。论文推测这是因为这两个指标关注的图像属性本质上不太一样,一个更看重局部结构的相似度,一个更看重纹理统计特征,两者对"什么样的失真是可以接受的"这件事有着不同的判断标准。这提醒我们,感知指标之间看似都在讲"人眼感受",实际上各自的关注点可能相差很远,不能简单地互相替代。

代价方面,论文也算得很清楚:只用对角近似(不管块内像素间关系)几乎不增加编码时间;用块对角近似会增加 10% 到 30% 的编码耗时,具体多少取决于用的是哪个指标。单独估计一次 Hessian 矩阵,大概需要 1 到 10 秒钟,具体时间随采样次数线性增长。论文还测试过用更少的采样次数是否也够用,发现只用 64 次采样(原本默认用 256 次),就已经能保住至少 83% 的提升效果,只花四分之一的估计时间,算是给追求速度的场景留了一条折中路线。

至于要不要花力气去精细计算,论文的消融实验(也就是把方法拆开一块一块测试哪部分贡献大)显示,对 LPIPS、DISTS、WD 这几个基于神经网络的指标,用前面提到的 Gauss-Newton 近似加上平滑处理,效果明显比单纯用普通的 Hessian-vector product 方式要好,说明这两个技巧不是可有可无的点缀,而是针对神经网络指标"梯度不稳定"这个特点专门对症下药的设计。

写在后面

读完这篇论文,最让我意外的一点,其实是那个 SSIM 和 DISTS 重要性地图互相拖后腿的实验结果。

一般人的直觉是,既然都叫"感知质量指标",那它们衡量的应该是同一件事的不同侧面,用一个指标的经验去指导另一个指标,多少应该有点正向作用。但实验数据摆在那里:用 SSIM 地图去优化 DISTS,DISTS 的分数反而变差了,最多能差出 17 个百分点。这说明"感知质量"这个说法本身就是一个筐,SSIM 关心的是局部亮度、对比度、结构的统计相似性,DISTS 关心的是纹理层面的统计特征,两者在数学上关注的对象根本不是一回事,只是都被翻译成了中文里同一个模糊的词。这提醒我,以后再看到某篇论文说"我们的方法在感知质量上更好",得先问一句,用的是哪个指标测的,因为不同指标之间的分歧可能比想象中大得多。

另外一个值得记一笔的细节,是这篇论文对神经网络梯度"不稳定"这个问题的处理方式。深度学习里有个广为人知的现象,叫梯度爆炸或梯度消失,大家平时讨论得比较多的是训练阶段的梯度问题。但这篇论文提醒我,即便是训练好之后拿网络去做推理、去算一个固定输入点附近的敏感度,梯度依然可能是一个"抖动很大的场",附近几个点测出来的结果可能天差地别。这跟统计学里"抽样误差"的问题本质上是一回事,只是发生的场景从传统统计推断变成了神经网络的几何结构分析,用平均多次采样去对冲这种不稳定性,是一个跨领域都通用的老办法,只是需要有人把它用对地方。

这篇论文没有解决的问题也很明显:块对角近似对 LPIPS、DISTS 这类基于神经网络特征的指标损失偏大,只保住了 18% 和 0.3% 的能量,剩下的信息哪去了,能不能用更聪明的稀疏结构(而不是简单粗暴的分块)去捕捉住这些跨块的长程关联,这大概是接下来值得琢磨的方向。毕竟随着大家用神经网络指标衡量画质的场景越来越多,这个"局部近似打折扣"的问题只会越来越突出,不会自己消失。

Q&A

Q1:IDQD是什么,它解决了视频编码里的什么问题?

A:IDQD 全称 input-dependent quadratic distortion,是论文提出的一种加权版误差平方和,用来近似 SSIM、LPIPS 这类复杂但无法按块拆分的感知质量指标,让编码器能像用传统 SSE 一样,把这些更懂人眼的指标用到分块编码决策里。

Q2:这篇论文提出的方法相比传统 SSE 优化能省多少码率?

A:在 Kodak 数据集上能省 15.5% 到 23.6%,在 CLIC 数据集上能省 14.2% 到 36.7%,具体取决于优化的目标指标,同时只需要增加 10% 到 30% 的编码时间,解码端完全不用改动。

Q3:Hessian 矩阵在这篇论文里起什么作用,为什么要做块对角近似?

A:Hessian 矩阵相当于一张像素重要性敏感度地图,告诉编码器画面里哪些区域对目标指标影响最大。但完整矩阵太大算不动,论文发现 SSIM 等指标本质上依赖局部窗口计算,于是只保留每个小块内部的关系,忽略块间关联,从而让矩阵变得可以按块并行计算。

文章标签AI资讯

资讯来源:由AI资讯编辑整理自互联网公开内容,版权归原作者所有,未经许可,不得转载。