WWDC 21 - 使用 AVQT 评估视频质量

REF: WWDC 2021 - Evaluate videos whith the Advanced Video Quality Tool

AVQTAdvanced Video Quality Tool 的缩写,是苹果在 WWDC 21 上推出的一款评估 ** 视频感知质量 ** 的工具。


一、背景介绍(非 WWDC 内容)

1.1 视频质量评估的现状

在正式开始之前,我想跟大家科普几个概念和行业现状,这些对理解本次的内容很有帮助。

视频质量评估是个老话题了,主流的分为下面几类:

  1. 主观评测,也就是人工评估,准确率高,但成本大,难规模化
  2. 客观评测,纯依靠算法,比如 PSNR(Peak Signal-to-Noise Ratio 峰值信噪比),SSIM(Structural SIMilarity 结构相似性),准确率低,成本小,容易规模化
  3. 感知质量评测,代表是 Netflix 的 VMAF,VMAF 是基于机器学习算法,根据人工的识别结果训练模型,目的是要模拟真人评测,结果上达到接近人工评估的准确度,这也是 “感知” 一词的含义。优点是准确率高,也容易规模化。我们今天要聊的 AVQT 也属于此类。

还有一种分类是有源评估无源评估,有源评估顾名思义,需要有参考源,比如有一个未压缩的超清 Raw 视频,它作为参考源,然后在进行处理编码之后,变成一个低分辨率、低码率的的视频,这个作为评估的对象,对比参考源视频,打出分数。感知质量评测的工具都属于有源评估范畴,即需要参考源来进行评估打分。

1.2 应用场景

那么视频质量评估有哪些应用场景呢?我了解到的有以下几类,供大家参考。

(1) 视频分发流程

在分发视频的时候,从用户体验和成本来考虑,希望在码率和清晰度之间,找到一个比较好的平衡点,那么清晰度这个就需要有个量化的标准,需要有工具能够得到一个相对可信的量化指标

(2) 编码器的研发

编码器算法的研发,也是要平衡清晰度、编码速度、编码效率(压缩率)等诸多因素,希望在清晰度一定,编码速度一定的情况下,编码效率(压缩率)尽可能高,也就是编出出来的码率尽可能低。所以它也需要有一个对视频清晰度进行量化的工具。


二、AVQT 是什么?

我们先来看一个视频分发流程:

  1. 采集到高质量原始视频
  2. 进行下采样(修改分辨率)和压缩(编码)
  3. 把得到的编码后的数据,通过 CDN 下发给终端用户

下采样和压缩过程会对损伤原视频画质,会造成类似马赛克的块或者模糊等伪像,如图:

为了提高用户体验,我们肯定不希望出现类似上述的问题,那么就需要一个工具,对展示给用户的视频进行评估。前面提到,人工评估的方式最准确,但是处理速度慢,成本高,而且无法自动化和规模化。

针对此问题,苹果推出了 AVQT,下面是 AVQT 的工作流程:

  1. AVQT 的输入是源视频,以及压缩后的视频
  2. 经过 AVQT 的处理,对压缩后的视频进行评估,输出打分(0-5)

AVQT 是:

  1. 一个 macOS 命令行工具,现在已经可以体验
  2. 模拟真人对视频质量进行打分
  3. AVQT 支持帧级别,以及段级别的打分(一段一般是 6 秒,可配置)
  4. 支持基于 AVFoundation 的所有视频格式,包括 SDR/HDR/HDR 10/HLG 以及 Dolby Vision

三、AVQT 的特点

特点1. 感知对齐,AVQT预测和人类主观评估高相关

AVQT 支持跨多种内容类型(动画、自然景观、运动场景),PSNR/SSIM 在这方面表现不佳

对比下面两张图片,第一个是高清的运动场景,PSNR 和 AVQT 的分数都很高。第二张人物场景,脸部轮廓细节缺失,AVQT 的分数降低到了 2.49,属于低质量,但是 PSNR 的分数还是 35.2。这里 AVQT 的分数更准确。(这里我没有放源图片)

为了测试准确性,针对公开的测试集,对视频的多种组合进行了测试,这些测试集包含源视频、压缩后的视频、人工的打分。下面是 Waterloo IVC 4K 以及 VQEG HD3 两个测试数据集:

为了客观地衡量视频质量指标的性能,我们使用了相关性和相似距离度量。

  1. PCC(Pearson Correlation Coeffiectent) 衡量线性相关度,也就是预测值和人工打分值的相关性,PCC 越高相关性越高,越高越好。
  2. RMSE(Root Mean Square Error) 均方根误差,衡量预测值和人工打分的差距。值越低说明预测的越准确。

横轴是人工打分,纵轴是 AVQT 的预测值,每个点代表一个压缩的视频打分,从图上来看,在 Waterloo IVC 4K 测试集上,AVQT 和人工打分非常的接近,PCC 高达 0.9,RMSE 低至 0.54

VQEG HD3 测试集上,AVQT 表现的更加优秀。

特点2. 计算速度快

高计算速度是可规模化的一个至关重要的条件,AVQT 的算法为 Metal 做了设计和优化,也就是说可以非常快地处理大量的视频。而且不需要额外处理,不需要解码,AVQT 会自动处理。

AVQT 可以每秒处理 175 帧 1080p 的视频,如果有一个 10 分钟的 1080p,24fps 的视频,不到 1 分半钟就能处理完。(狡猾的是,苹果没提测试设备的硬件配置)

特点3. 观察设置感知(Viewing setup aware)

观察设置是指观察者距离、显示器大小、显示分辨率等条件,这些对主观视频质量是有影响的。因此,AVQT 支持把这些条件的参数值作为输入,对感知视频质量进行预测。

比如,有两个场景,A 场景观看者距离显示器 1.5 倍屏高的距离观看 4K 视频,B 场景观看者距离 3 倍屏高的距离观看同样的 4K 视频, 那么很明显 B 场景下,因为距离远,一些躁点看不太清楚了,主观打分就更高。

AVQT 的表现也符合主观评测,距离越远,分数越高,最终会趋同。

1)安装 AVQT 命令行工具,下载地址

2)使用 AVQT 工具进行打分,提供参考源视频,以及压缩后的视频,输出打分,默认 csv 格式

1
AVQT --reference sample_ref.mov --test sample_compressed.mov --output sample_output.csv

这里我自己实验了一下。从这里下载 Waterloo IVC 4K Video 公开的测试数据集进行测试。这里我选择了 H264 这个数据集里名字为 20 的文件夹。
我们选择以下几个视频文件进行测试:

视频类型 视频名称 分辨率 码率 帧率
源 / 参考视频 3840x2160_4.mp4 3840x2160 4548 kbps 30
测试视频 1 960x540_1.mp4 960x540 359 kbps 30
测试视频 2 960x540_4.mp4 960x540 3798 kbps 30

960x540_1 抽帧截图:

960x540_4 抽帧截图:

从上表和上图能看到 960x540_4 码率是 960x540_1 码率的 10 倍,主观上也确实清晰很多。

我们使用 AVQT 以及 PSNR (使用 --metrics AVQT PSNR 参数) 都进行评估一下:

1
2
3
4
5
6
>  AVQT --reference 3840x2160_4.mp4 --test 960x540_1.mp4 --metrics AVQT PSNR --output 549p1_all.csv

Segment[1]: AVQT: 1.58, PSNR: 24.94
Segment[2]: AVQT: 1.67, PSNR: 25.18

Results file: 549p1_all.csv
1
2
3
4
5
6
> AVQT --reference 3840x2160_4.mp4 --test 960x540_4.mp4 --metrics AVQT PSNR --output 549p4_all.csv

Segment[1]: AVQT: 3.87, PSNR: 28.31
Segment[2]: AVQT: 3.86, PSNR: 28.39

Results file: 549p4_all.csv

结果:

视频 AVQT 平均分数 PSNR 平均分数
960x540_1.mp4 1.62 25.06
960x540_4.mp4 3.86 28.3

AVQT 的分数差了一倍多,和实际的观看类似,PSNR 只差了 3 分,也就是认为是接近的,误差挺大.

输出的 csv 里包含每一帧的打分,以及每一段的打分,一段默认是 6 秒:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
> cat 549p4_all.csv
Advanced Video Quality Tool (AVQT) - CLI
Version: 1.0.0
Test file: 960x540_4.mp4
Reference file: 3840x2160_4.mp4
Segment Duration: 6.0
Temporal Pooling: ArithmeticMean
Display Width: 1920
Display Height: 1080
Viewing Distance: 3.0
Frame Index,AVQT,PSNR
1,3.75,28.24
2,3.84,28.24
3,3.80,28.01
4,3.83,28.12
5,3.96,28.22
6,3.82,28.37
7,3.78,28.15
8,4.01,28.57
9,3.74,27.96
...
296,3.79,28.52
297,3.70,28.37
298,3.77,28.54
299,3.68,28.32
300,3.64,28.25
Segment Index,AVQT,PSNR
1,3.87,28.31
2,3.86,28.39

3)调整参数,自定义评估条件

比如:(更多的参数可以通过 AVQT -h 来查看)

  • metrics: 除了 AVQT,还支持输出 PSNR MSE 等预测值
  • segment-duration: 自定义段大小,默认是 6 秒
  • temporal-pooling: 聚合每帧打分的算法,默认算数平方值,支持 HarmonicMean, Worst10%, Worst90%, Best10%, Best90%
  • output-format: 输出格式,默认 CSV,支持 JSON
  • viewing-distance: 观察者距离,单位是屏幕高度,比如 1.5H, 3H, 4.5H, 6H,默认 3H,表示距离 3 * 屏幕高度的距离观看
  • display-resolution: 显示的分辨率,默认 1920x1080,支持: 6016x3384, 5120x2880, 3840x2160, 2560x1440, 1920x1080, 3384x6016, 2880x5120, 2160x3840, 1440x2560, 1080x1920

五、使用 AVQT 优化和选择码率

选择正确的码率很具挑战性,为了帮助选择合适的码率,苹果为 HLS 创作规范发布了一些码率的指南,作为对应分辨率下的码率初始值。

我们知道,不同的视频内容有着不同的编码复杂度,所以不同的内容所需的码率也是有差异的。苹果建议在此基础上,根据 AVQT 的打分作为反馈,不断对码率进行上调 / 下调。

六、回顾

  • 视频编码对视频质量会有牺牲,会产生一些伪影
  • 使用 AVQT 评估你们的视频感知质量
    • macOS 命令行工具
    • 计算速度快,支持查看设置感知
    • 支持基于 AVFoundation 的所有格式
  • 使用 AVQT 来优化 HLS 层的质量