在这篇博客文章中,我们介绍了一种新的基于计算视频多方法评估融合(VMAF)百分位数的视觉质量评估方法。
作者 / Adeel Abbas
原文链接 / https://blog.twitter.com/engineering/en_us/topics/infrastructure/2020/introducing-vmaf-percentiles-for-video-quality-measurements.html
在Twitter上,我们希望通过即时加载的、不会意外停止且始终看起来清晰的视频为客户提供一个令人愉悦的视频体验。在这篇博客文章中,我们介绍了一种新的基于计算视频多方法评估融合(VMAF)百分位数的视觉质量评估方法。使用VMAF百分位数,我们可以推断出编码技术如何在某些复杂的帧上执行的情况,并允许我们首先专注于提高它们的质量。此外,VMAF百分位数对于非视频工程师来说更易懂,并且可以提供对于编码算法对视频质量影响的另一种理解。
每天,成千上万的人来到Twitter观看和了解正在发生的事情,并对塑造我们时代的事件有新的认识和新的视角。大量广告商依靠我们来传达他们的信息,这有助于他们发展业务。视频是这种体验的核心部分。我们希望通过让观看视频变得无缝和愉快的方式来实现公众对话。为此,我们在各种设备和平台之间包括质量、响应能力、互操作性之间取得适当的平衡来达到这一目标。还有其他需要重要考虑的因素,例如,可以随时在世界的任何地方可靠地提供视频服务,并确保我们满足客户的隐私期望和要求。
最近几个月,Twitter上的视频消费量出现了前所未有的增长。再加上移动设备每年再更新出有着越来越大、更好的屏幕的这一事实,这些都清楚表明,对视频压缩技术的投资对于我们的长期战略来说至关重要。诸如HEVC,AV1和VVC之类的下一代编解码器已展示出比H.264令人印象深刻的编码效率改进。我们认为,对于编解码器而言,在编码效率和计算复杂度之间取得平衡是很重要的,这样才能实现硬件解码能力。这样可以节省电池寿命,并允许CPU执行其他重要任务。考虑到所有可用的编码选项和折衷之后,投资一种可靠的视频质量评估方法变得尤为重要,该方法可帮助我们快速做出决策并且在理解上的障碍是很小的。
为此,峰值信噪比(PSNR)仍然是视频编解码器标准化的事实上的行业标准。但是,视频编码行业的研究人员非常清楚其局限性。例如,它没有考虑压缩伪像的时间特性,也没有考虑到存在摄像机噪声的情况下,PSNR的提高与主观质量无关的事实。
VMAF是由Netflix,南加州大学和德克萨斯大学奥斯汀分校联合开发的目标(objective)度量标准。VMAF始终显示出比PSNR或任何其他客观指标更接近人类视觉感知的数值。它是使用机器学习模型融合的几个时空度量的组合。VMAF分数更容易理解,因为它在0到100的线性范围内运行,而PSNR是对数的。它考虑了缩放和压缩伪像,此外,还具有针对移动视频消费进行训练的模型。
作为移动优先平台,Twitter十分关注向小屏幕大规模提供高质量视频的问题。在我们之前的博客文章中,我们介绍了一种新的目标视觉质量评估方法,称为自适应配对比较。自适应配对比较是为移动视频消费量而设计的,并且比行业标准的“平均意见得分”和“双刺激MOS”更可靠地测量视觉质量。作为下一步,此博客介绍了一种目标的视频质量评估方法,该方法可以计算序列中所有帧的VMAF分数的百分位数。该方法非常适合移动视频消费,我们使用它来优化实时编码阶梯。我们认为它是比Bjontegaard Delta(BD)速率方法的一种有价值的替代方法。
客户端使用自适应比特率流传输算法来选择可最大程度提高视频质量的变体,同时避免回放重新缓冲的变体。但是,我们还希望在自适应比特率算法选择的任何比特率下最大化感知质量。编码器的速率控制旨在保持所有帧的质量一致,在可能的时候节省比特,并在需要时限制比特率。如果我们不限制比特率,几乎所有帧都将获得近乎完美的VMAF分数。当我们限制比特率时,视频质量下降尤其明显。
如在VMAF GitHub上讨论的那样,通过在整个序列上求平均值来汇总帧的VMAF分数可能会隐藏难以编码的帧的影响(如果这些帧不经常出现)。合并帧的最佳方法是一个未解决的问题。例如,VMAF工具已经可以汇总谐波平均值并输出一个百分位数。在此博客的上下文中,在计算了序列的所有帧的VMAF分数之后,我们计算了第1个,第5个,第10个,第25个和第50个百分位数。根据定义,第5个百分位数给了我们最差的5%帧的VMAF分数,而第50个百分位数是中值。这里的直觉是,我们不是平等地衡量所有的帧并得到一个分数,我们根据它们的复杂程度对帧进行排名,然后看看一个特定的编码器设置如何在这些不同的排名中执行。我们想按照帧的VMAF分数从最低到最高的顺序优先提高帧的质量。拥有高VMAF分数的框架看起来已经很不错了,因此改善它们的质量也不太重要了。
实验设置:测试管道
我们从xiphd网站上选择了4个时长1分钟的1080p/60fps视频片段。测试管道如下图所示:
测试管道设置
为了提供以自适应比特率格式来传输视频文件,将摄取的输入视频分为多个小段。此过程称为分段分割。分段使玩家能够随着网络条件的变化而优雅地更改比特率和分辨率。输入是一个RTMP摄取,该摄取被细分为几个三秒的传输流片段。下采样过程中会将视频从输入转换为目标变体分辨率,例如从1080p转换为720p。最后,我们将缩小后的视频馈送到x264编码器中。并使用以下FFmpeg命令执行下采样和编码:
代码语言:javascript复制ffmpeg -i input.ts -vf scale=1280:720 -c:v libx264 -tune psnr -x264-params
vbv-maxrate=2500:vbv-bufsize=2500 output.ts
上面的命令使用默认的双三次算法将源采样为720p分辨率。然后该命令通过使用x264进行编码,并通过默认CRF值为23的恒定速率因子(CRF)速率控制来进行编码。CRF是实时流的一个很好的实用设置,因为它可以在前瞻性有限下的帧窗口上工作,不需要中间文件,并在内容很方便时保存位(例如,静态帧)。
如果内容难以编码,则我们不能让编码器花费无限的比特数。因此,我们需要通过设置vbv-maxrate和vbv-bufsize参数来限制数据速率。在这方面,只要我们达到数据速率上限,就会发生视觉质量损失。这通常是因为内容很困难,并且编码器面临着将比特率控制在预算范围内的挑战。
tune psnr参数禁用了x264中的心理视觉优化。这是因为尽管这些优化可改善感知质量,但它们会增加源视频和压缩视频之间的差异,从而降低PSNR(和VMAF)得分。
为了根据原始输入来测量VMAF分数,必须对编码视频进行解码,上采样和组合装配在一起。最后,针对每个视频帧,针对摄取的输入流计算组合视频的VMAF。如前所述,我们对为手机观看量身定制的VMAF训练模型感兴趣,也就是说,即是观看距离超过视频高度的3倍时。
实验设置:VMAF百分位图
当我们对上面提到的四个序列运行x264时,计算平均百分位数并绘制它们,我们得到一个VMAF Centile图(VMAF- cp),看起来像这样:
VMAF centiles为x264medium预设
乍一看,VMAF-CP看起来类似于标准开发中广泛使用的速率失真图。这是因为随着VMAF百分数沿x轴增加,分数也会单调增加。但是,这两者之间存在着明显的区别。通常,速率失真图是通过在恒定的量化参数设置下运行四个或更多个编码,测量所有帧的PSNR或VMAF并将平均值用作质量度量来获得的。在此设置中,速率控制通常是关闭的。这对于开发编码工具的标准开发是有意义的,但是,我们的首选是使用我们在生产中使用的CRF速率控制算法来评估视觉质量。
对于上面显示的数据,所有帧的平均VMAF为97.7(100是可达到的最高得分)。因此,使用序列帧的平均VMAF作为视频质量指标会使我们误以为总体视频质量非常好。但是,如果我们看一下第1个,第5个和第10个百分点,我们可以看到有机会提高性能最差的帧的质量。
例子:选择x264预设
举例来说,假设我们要为转码堆栈选择一个x264预设。x264中的预设对编码工具进行了分类,以便人们可以选择编码器速度以达到一定的压缩质量。在上面的FFmpeg命令中,我们没有指定预设,因此使用了默认medium的预设。接下来,我们将使用非常快,更快,快,中等,慢和慢的预设值对x264进行编码,并在下图中绘制VMAF百分位数:
VMAF centiles为x264预设
不出所料,“very fast”预设产生的质量最低,并且从“very fast“到“faster“的质量跳变最陡。随着我们从faster转向fast,质量仍然有不错的提升。fast和medium的预设达到相似的质量,因为曲线彼此非常接近。slow和slower预设可进一步提高质量。另一方面,如果仅查看平均VMAF得分(如下所示),则很难评估不同预设对质量的影响,因为数字几乎相同。
veryfast | faster | fast | medium | slow | slower |
---|---|---|---|---|---|
96.47 | 97.68 | 97.68 | 97.70 | 97.86 | 98.01 |
为了大规模运行满足实际约束的编码,我们必须注意每次编码所花费的CPU。我们的目标是在给定的CPU预算下达到最高的视觉质量,而不要花费大量的时间在编码工具上,而这些编码工具不会以有效的方式促进这种改进。在下表中,我们列出了相对于具有3.1GHz Quad Core i7 CPU的计算机上的``very fast”'预设的每个预设所花费的CPU时间。编码x264中等预设需要大约13%的计算量,并且质量改进是不合理的(最后两行显示相对于左列的预设,每个预设的VMAF分别增加了10%和25%)。因此,在这种情况下,fast预设是首选设置。
veryfast | faster | fast | medium | slow | slower | |
---|---|---|---|---|---|---|
CPU Cost (vs veryfast) | 1.0x | 1.8x | 2.2x | 2.5x | 3.6x | 7.2x |
Incremental CPU Cost | - | 80% | 22% | 13% | 44% | 100% |
Incremental VMAF Score (10 th Percentile) | - | 2.18 | 0.82 | 0.03 | 0.28 | 0.52 |
Incremental VMAF Score (25 th Percentile) | - | 1.47 | 0.12 | 0.02 | 0.46 | 0.20 |
下面是一个示例帧,显示grand_theft_auto序列的veryfast(左)和fast(右)预置的视觉质量:
very fast(左)和fast(右)预置之间的质量差异
通过这个小例子,我们希望说明VMAF-CP plot是一种鲁棒方法,可以调优编解码器参数,以获得移动视频消费所需的视觉质量。
例子:编码ladder
设计编码梯形图的一种方法是使用``凸优化(CHO)'',由此我们可以为每个不同的分辨率绘制速率失真曲线,并选择使速率保持在速率失真曲线包络线上的比特率。CHO是一种经过充分研究的技术,但它通常依赖于在序列帧上平均的速率失真曲线的绘制。当CHO与CRF速率控制一起使用时,对序列帧上的PSNR或VMAF分数求平均值会产生错误,因为大多数帧的质量通常比较低百分位数高得多。假设可以在CRF模式下扫描速率失真曲线,但是我们的实验表明,在实际速率点下,序列序列中的平均VMAF得分无法区分质量改进。
VMAF百分位数可以在这里提供帮助。仅需五种编码,我们就可以快速了解现有梯子ladder在视觉质量方面的表现。让我们以前面部分中的720p at 2.5Mbps变体为例,选择快速预设,因为它看起来是一个合理的折衷点,并假设其他变体如下:
Resolution / Frame Rate | 224p30 | 320p30 | 480p30 | 720p30 | 1080p30 |
---|---|---|---|---|---|
Average Bitrate | 300kbps | 600kbps | 1.25Mbps | 2.50Mbps | 5Mbps |
vbv-maxrate | 300 | 600 | 1250 | 2500 | 5000 |
vbv-bufsize | 300 | 600 | 1250 | 2500 | 5000 |
该梯子的VMAF-CP如下图所示:
full ladder的VMAF曲线图
在上面的图中,随着ladder的上升,我们可以看到质量会有规律的跳跃。这是可取的,因为我们希望看到每个变体的质量都有有意义的提高。我们不希望看到变体曲线彼此接近,因为这表明表现不佳的变体。我们的最高变体在第25个百分点中获得98 VMAF得分。这表示如果视频播放器能够升级到此变体,则对于75%的帧来说,该视频的视觉质量几乎完美。为了简洁起见,我们选择使用快速预设对这些变体进行编码,尽管只有少量的附加编码,但您可以为每个变体选择最佳的预设。进一步的可能性可能是尝试其他CRF值,图片结构组或其他x264设置。
我们还可以使用上述方法为更高的帧速率变体设计比特率。例如,假设我们要以720p / 30fps变体的视觉质量在上述ladder中提供720p / 60fps变体。由于编码器编码的帧数是原来的两倍,因此如果我们在与720p / 30fps相同的比特率约束下提供720p / 60fps变体,则视觉质量将不如30fps。为了确定增加多少比特率以达到与720p / 30fps变体相似的质量,让我们进行一个实验,以以下比特率对720p / 60fps变体进行编码,并测量每个数据点的VMAF百分位数:
Average Bitrate | 2.5Mbps | 2.8Mbps | 3.2Mbps | 3.6Mbps |
---|---|---|---|---|
vbv-maxrate | 2500 | 2800 | 3200 | 3600 |
vbv-bufsize | 2500 | 2800 | 3200 | 3600 |
在下面的图中,我们绘制了以上四个率点的VMAF百分位数,并与我们之前选择的720p/30fps变体进行比较。我们可以看到,为了满足30fps版本的质量,720p/60fps版本的比特率需要提高到大约3.6Mbps。否则,60fps变种可能遭受压缩伪影比30fps变种更多。
不同设置下的VMAF曲线图为720p60,而不是720p30
总结和未来展望
由于开源代码社区的存在,VMAFu作为一种视觉质量指标,它比PSNR更接近人类视觉的感知并且正在不断提高。它最初是根据广播质量的内容用例设计的,并且可以与诸如BD-rate和Convex Hull Optimization之类的现有速率失真优化技术配合使用。VMAF百分位数通过提供有关编码技术在某些最差帧上的性能表现的数据,而不仅仅是在所有帧上求平均值,从而使我们能够做出更好,更快速的与压缩效率的决策。而且,对于非视频工程师而言,该计算更容易理解。该计算仅涉及计算所有帧的VMAF分数,计算百分位数,并从最低到最高绘制或制表。
确定VMAF百分位数与人类视觉的相关性还需要做更多的工作。在这方面,我们可以测量VMAF百分位数与平均意见得分之间的关系,并与现有技术进行比较,例如使用平均值进行速率失真优化。这篇博客的重点是调整优化x264编码器,但是,我们也可以比较下一代的编解码器。这可能会为它们在实际应用中的性能提供新的视角。