Netflix 极为看重视频质量,我们也非常重视在大规模环境中精确衡量视频质量的方法。为了反应观众在欣赏视频流播服务时获得的画面质量,我们采用了一种名为 Video Multimethod Assessment Fusion(VMAF)的方法。目前该工具已开源,我们邀请广大研究人员就这个重要项目展开合作。
对高质量视频的不断探索
我们致力于为会员提供最佳观赏体验:流畅的视频播放过程,赏心悦目的画质。为了实现这一目标,我们的一个主要方式是不断努力通过各种成果完善自身服务,为不同网络带宽下使用各种设备的会员提供尽可能出色的观赏质量。
我们在视频编码领域进行了大量创新。为了以合理的码率进行流播,流媒体视频需要通过标准化的格式进行压缩,例如 H.264/AVC、HEVC 以及 VP9。如果视频过度压缩或压缩参数不当,这些技术将导致画面质量受损,也就是很多人常说的压缩失真。专家通常会将这种现象称之为“方块效应(Blocking)”、“波纹缺陷(Ringing)”或“蚊式噪声(Mosquito noise)”,但是就普通观众来说,只会感觉视频看起来怪怪的。因此我们会定期对不同编码器供应商的压缩效率、稳定性以及性能进行对比,并根据结果选用业界最佳解决方案。我们会研究不同视频编码标准,以确保始终使用最先进的视频压缩技术。例如,我们会对 H.264/AVC、HEVC 和 VP9 进行比较,而不远的将来还打算针对 Alliance for Open Media (AOM)和 Joint Video Exploration Team (JVET)开发的下一代编码器开展相关实验。就算成熟的标准,为了能更充分地运用现有工具,我们也会继续尝试使用不同的配置选项(可参阅每视频编码优化项目)和速率分配算法。
我们会使用一种分布式的云端媒体管线对Netflix 视频流进行编码,这样即可通过伸缩满足业务需求。为了将错误的源交付、软件Bug,以及云实例的不可预见性(临时出错)等问题的影响降至最低,我们在整个管线的多个点位部署了自动化的质量监控机制。通过这样的监控即可在从原始素材进入系统到管线中传输过程的每一点检测出视频质量问题。
随着Netflix 生态体系的中诸多领域(例如自适应流播或内容交付网络算法)的不断迭代以及 A/B 测试的进行,我们会尽力完善整个系统以维持并改善视频质量。例如,自适应流播算法中的一项改进可降低视频开始播放前的缓冲时间,同时确保了流播过程中重新缓冲不会导致视频整体质量降级。
上述所有努力都立足于一个最基本的前提:我们可以精确高效地衡量大规模环境中流播视频质量的观感。以往在视频编码器的开发和研究领域主要使用两种方法衡量视频质量:1) 视觉主观测试,以及 2) 对 PSNR 以及最新提出的 SSIM [1] 等简单指标进行计算。
毫无疑问,以我们生产环境的吞吐率、A/B 测试监控、以及编码技术研究实验等工作来说,以人工方式进行视觉检查无论在可行性或经济性方面都是不现实的。图像质量的衡量是个老问题,对此人们提出过很多简单可行的解决方案。例如均方误差(Mean-squared-error,MSE)、峰值信噪比(Peak-signal-to-noise-ratio,PSNR)以及结构相似性指数(Structural Similarity Index,SSIM),这些指标最初都是被设计用于衡量图像质量的,随后被扩展到视频领域。这些指标通常会用在编码器(“循环”)内部,可用于对编码决策进行优化并估算最终编码后视频的质量。虽然这一领域的研究人员和工程师都很清楚PSNR 无法始终如一地反应出人的观感,但这一指标依然成为编码器对比和编码器标准化工作中约定俗成的标准。
构建Netflix 所需的数据集
在评估视频质量评价算法的过程中我们使用了一种数据驱动的方法。第一步需要收集与我们的具体用例密切相关的数据集。虽然针对视频质量指标的设计和测试已经有可以公开使用的数据库,但这些数据库的内容缺乏多样性,而多样性正是Netflix 这种流媒体服务的最大特点。很多数据库在源素材和编码后结果的质量方面也不是最先进的,例如其中还包含标清分辨率(SD)内容或只涵盖一些比较老的压缩标准。由于视频质量的评估远不仅仅是压缩失真的评估,现有数据库会试图考虑更广范围的画质损失,不仅有压缩导致的损失,还有传输过程中的损失、随机噪声,以及几何变形等情况。例如实时传输的监控视频通常是黑白画面的低分辨率视频(640x480),观看这些内容时的体验与坐在客厅欣赏喜爱的Netflix 节目时的体验就截然不同。
在设计能精确反应流播视频质量观感的指标过程中,Netflix 的流播服务为我们造成了一系列独特挑战和机遇,例如:
视频源的特征。Netflix 提供了适合各类人群观看的大量影视内容,例如儿童内容、动漫、快节奏动作片、包含原始视频的纪录片等。另外这些内容还呈现出多样化的底层源素材特征,例如胶片颗粒、传感器噪声、计算机生成的材质、始终暗淡的场景或非常明亮的色彩等。过去制定的很多质量指标并未充分考虑到不同类型的源内容。例如,很多现有数据库中缺乏动漫内容,大部分数据库并未考虑胶片颗粒,而在专业娱乐内容中这些都是非常普遍的信号特征。
失真的来源。Netflix 流播视频是通过强壮的传输控制协议(TCP)传输的,丢包和误码绝对不会导致视觉损失。这就使得编码过程中的两类失真最终影响到观众所感受到的体验质量(QoE):压缩失真(由于压缩导致的数据损失)以及缩放失真(为了降低码率,压缩前会对视频降低采样,随后又会在观众的设备上提高采样)。通过专门针对压缩和缩放失真制定质量指标,牺牲普遍性换来精确性,即可获得在效果上超越通用指标的精确度。
为了针对Netflix 的用例构建更有针对性的数据集,我们选择了34 个源短片作为样本(也叫做参考视频),每个短片长度6 秒,主要来自Netflix 提供的流行电视剧和电影,并将其与一系列公开发布的短片相结合。源短片包含具备各种高级特征的内容(动漫、室内/ 室外、镜头摇移、面部拉近、人物、水面、显著的物体、多个物体)以及各种底层特性(胶片噪声、亮度、对比度、材质、活动、颜色变化、色泽浓郁度、锐度)。我们将这些源短片编码为H.264/AVC 格式的视频流,分辨率介于384x288 到1920x1080 之间,码率介于375kbps 到20,000kbps 之间,最终获得了大约300 个畸变(Distorted)视频。这些视频涵盖了很大范围的视频码率和分辨率,足以反映Netflix 会员多种多样的网络环境。
随后我们通过主观测试确定非专业观察者对于源短片编码后视频画质损失的评价。在标准化的主观测试中,我们使用了一种叫做双刺激损伤评价法(Double Stimulus Impairment Scale,DSIS)的方法论。参考视频和畸变视频将按顺序显示在家用级别的电视机上,并且我们对电视机周围的环境光线进行了控制(按照ITU-R BT.500-13 [2] 的建议进行)。如果畸变视频编码后的分辨率小于参考视频,则会首先放大至源分辨率随后才显示在电视上。观察者坐在类似客厅的房间沙发上,需要针对画质损失给出 1(非常恼人)到 5(完全不可察觉)分的评价。将所有观察者针对每个畸变视频的分数汇总在一起计算出微分平均意见分数(Differential Mean Opinion Score)即DMOS,并换算成 0-100 的标准分,其中 100 分是指参考视频的分数。本文会将参考视频、畸变视频,以及观察者给出的 DMOS 分数作为整体称之为NFLX 视频数据集。
传统的视频质量指标
传统的,已经被广泛使用的视频质量指标与 NFLX 视频数据集中所包含的“人工校正”后的 DMOS 分数之间有什么关联?
一个直观的例子
上图可以看到从 4 个不同畸变视频截取出的静态画面的局部内容,上方两个视频检测出其 PSNR 值为大约 31dB,下方两个的 PSNR 值约为 34dB。人们很难察觉“人群”视频有何差异,但两个“狐狸”视频的差异就很明显了。人类观察者针对两个“人群”视频给出的 DMOS 分数分别为 82(上方)和 96(下方),而两个“狐狸”视频的 DMOS 分数分别为 27 和 58。
详细结果
下图显示的散点图中 X 轴对应了观察者给出的 DMOS 分数,Y 轴对应了不同质量指标预测的分数。这些散点图是从 NFLX 视频数据集中挑选部分信息创建的,我们将其标注为 NFLX-TEST(详情见下节)。每个点代表一个畸变视频。我们为下列四个指标绘制了散点图:
有关 SSIM、Multiscale FastSSIM 以及 PSNR-HVS 的详细信息请参阅脚注部分列出的参考文献。对于这三个指标我们使用了 Daala 代码基 [6] 中的实现,因此下文图表的标题将添加“Daala”作为前缀。
注意:相同颜色的点对应了畸变视频和相应参考视频的结果。由于个体差异和参考视频需要换算成标准化的 100 分成绩,一些 DMOS 分数可能会超过 100。
从图中可以看出,这些指标的分数与观察者给出的 DMOS 分数并非始终一致。以左上角的 PSNR 图为例,PSNR 值约为 35dB,而“人工校正”的 DMOS 值的范围介于 10(存在恼人的画质损失)到 100(画质损失几乎不可察觉)之间。SSIM 和 Multiscale FastSSIM 指标也存在类似情况,接近 0.90 的分数对应的 DMOS 值介于 10 到 100 之间。在上述每个散点图中,我们发现每个指标的斯皮尔曼等级相关系数(Spearman’s rank correlation coefficient,SRCC)、皮尔森积差相关系数(Pearson product-moment correlation coefficient,PCC)以及均方根误差(Root-mean-squared-error,RMSE)数值经过非线性逻辑拟合(Non-linear logistic fitting)计算后的结果符合ITU-R BT.500-13 [7] 标准中 3.1 条款的概括。我们希望 SRCC 和 PCC 值接近 1.0,RMSE 值接近 0。在这四个指标中,PSNR-HVS 的 SRCC、PCC 和 RMSE 值是最理想的,但依然缺乏预测精度。
为了针对不同种类的内容实现一套有意义的评价标准,所用指标必须能呈现出较为理想的相对质量分数,例如指标中的增量(Delta)应该能体现出观感质量的增量。下图中我们选择了三个典型的参考视频:一个高噪声视频,一个 CG 动漫,以及一个电视剧,并用每个视频的不同畸变版本的预测分数与 DMOS 分数创建散点图。为了获得有效的相对质量分数,我们希望不同视频短片在质量曲线的相同范围内可以实现一致的斜率(Slope)。例如在下方的 PSNR 散点图中,在 34dB 到 36dB 的范围内,电视剧 PSNR 数值大约 2dB 的变化对应的 DMOS 数值变化约为 50(50 到 100),但 CG 动漫同样范围内类似的 2dB 数值变化对应的 DMOS 数值变化低于 20(40 到 60)。虽然 CG 动漫和电视剧短片的 SSIM 和 FastSSIM 体现出更为一致的斜率但表现依然不够理想。
简单总结来说,我们认为传统指标不适合我们的内容。为了解决这一问题,我们使用了一种基于机器学习的模型设计能真实反映人对视频质量感知情况的指标。下文将介绍这一指标。
我们的方法:Video Multimethod Assessment Fusion(VMAF)
通过与美国南加州大学 [8] [9] 的 C.-C. J. Kuo 教授以及他的团队合作,我们研究开发了视频多方法评估融合(Video Multimethod Assessment Fusion,VMAF),这种方式可以将多种基本的质量指标结合在一起预测主观质量。这种方法的基本想法在于,面对不同特征的源内容、失真类型,以及扭曲程度,每个基本指标各有优劣。通过使用机器学习算法(我们在本例中使用了支持向量机(Support Vector Machine,SVM)回归因子)将基本指标“融合”为一个最终指标,可以为每个基本指标分配一定的权重,这样最终得到的指标就可以保留每个基本指标的所有优势,借此可得出更精确的最终分数。我们还使用主观实验(本例中使用了 NFLX 视频数据集)中获得的意见分数对这个机器学习模型进行训练和测试。
VMAF 算法和模型的最新版本(VMAF 0.3.1)已包含在 VMAF 开发包中并以开源软件的形式发布,可在支持向量机(SVM)回归因子中使用下列基本指标进行融合 [10] :
- 视觉信息保真度(Visual Information Fidelity,VIF) [11] 。VIF 是一种获得广泛使用的图像质量指标,该指标基于这样一种前提:质量与衡量信息保真度丢失情况的措施是互补的。在最初的形式中,VIF 分数是通过将四个尺度(Scale)下保真度的丢失情况结合在一起衡量的。在 VMAF 中我们使用了一种改进版的 VIF,将每个尺度下保真度的丢失看作一种基本指标。
- 细节丢失指标(Detail Loss Metric,DLM) [12] 。DLM 是一种图像质量指标,其基本原理在于:分别衡量可能影响到内容可见性的细节丢失情况,以及可能分散观众注意力的不必要损失。这个指标最初会将 DLM 和 Additive Impairment Measure(AIM)结合在一起算出最终分数。在 VMAF 中我们只使用 DLM 作为基本指标,但也对一些特殊情况采取了必要的措施,例如会导致原始公式中的数值计算失效的黑帧。
VIF 和 DLM 都是衡量图片质量的指标。考虑到视频的时域特性(Temporal characteristic),我们还进一步引入了下列这些特性: - 移动。这是一种衡量相邻帧之间时域差分的有效措施。计算像素亮度分量的均值反差即可得到该值。
经过多次测试和验证作为迭代,我们最终选择了使用这些基本指标和特性。
我们将 VMAF 与上文提到的其他几个质量指标的精确度进行了对比。为保持公平,避免将 VMAF 过拟合(Overfitting)到数据集,我们首先将 NFLX 数据集拆分为两个子集,分别名为 NFLX-TRAIN 和 NFLX-TEST。这两个子集不包含相同的参考短片。随后使用 SVM 回归因子通过 NFLX-TRAIN 数据集进行训练,并针对 NFLX-TEST 进行测试。下列散点图是使用 NFLX-TEST 数据集对所选参考短片(高噪声视频、CG 动漫、电视剧)得出的 VMAF 指标分数。为了方便对比,我们也附上了上文提到的结果最理想的 PSNR-HVS 指标散点图。无疑 VMAF 的效果更好。
我们还将 VMAF 与该领域内目前公认最先进的具有可变帧延迟的视频质量模型(Video Quality Model with Variable Frame Delay,VQM-VFD) [13] 进行了对比。VQM-VFD 是一种使用神经网络模型将底层特性融合得到最终指标的算法。思路方面该方法与 VMAF 类似,但这种方式更偏重空间和时间坡度等更底层的特性。
毫无疑问,在 NFLX-TEST 数据集的测试中,VQM-VFD 的效果非常接近 VMAF。由于 VMAF 方法可以更容易地将新增的基本指标纳入框架中,VQM-VFD 也可以直接成为 VMAF 的一个基本指标。
下表列出了针对 NFLX-TEST 数据集,将不同基本指标结合在一起通过 VMAF 模型获得的 SRCC、PCC 和 RMSE 数值,以及 VMAF 0.3.1 的最终分数。另外我们还列出了通过 VQM-VFD 增强后的 VMAF 效果。结果证明了我们最初的设想:将能够提供最佳表现的质量指标以智能的方式融合在一起,能够得到更接近于人类观感的效果。
NFLX-TEST 数据集
结果总结
下表中我们总结了上文讨论的不同指标针对 NLFX-TEST,以及 VQEG HD(仅 vqeghd3 集) [14] 、LIVE Video Database [15] ,和 LIVE Mobile Video Database [16] 这三个流行的公开数据集最终得到的 SRCC、PCC、RMSE 值。结果证明 VMAF 0.3.1 在 LIVE 数据集之外其他数据集的测试中效果都好于别的指标,就算在 LIVE 数据集中与效果最好的 VQM-VFD 也没有太大差距。由于 VQM-VFD 在四个数据集中效果都很不错,目前我们考虑通过实验将 VQM-VFD 作为基本指标纳入 VMAF,不过该指标并未包含在目前已经开源发布的 VMAF 0.3.1 中,可能会包含在后续发布的新版中。
NFLX-TEST 数据集
LIVE 数据集 *
* 仅对比压缩损失(H.264/AVC 和 MPEG-2 视频)
VQEGHD3 数据集 *
* 仅使用 SRC01-SRC09 的源内容以及与流播有关的损失 HRC04、HRC07 和 HRC16-HRC21。
LIVE Mobile 数据集
VMAF 开发包(VDK)开源程序包
为了通过互联网提供高质量视频,我们认为整个行业需要更实用的视频质量指标,这些指标不仅要易用,而且要方便大规模部署。针对这些需求我们开发了 VMAF,并通过 Apache License Version 2.0 许可将 VMAF 开发包(VDK 1.0.0)程序包开源到 GitHub 。通过将 VDK 开源,我们希望大家能一起完善这一技术,进而提高视频质量的衡量手段。
VDK 核心中特性的提取(包括基本指标的计算)任务是一种计算密集型操作,为了提高效率我们使用 C 语言编写这部分内容。为了能快速创建原型,控制代码部分是使用 Python 编写的。
该程序包提供了一个简单的命令行界面,可供用户以单模式(run_vmaf 命令)或批处理模式(run_vmaf_in_batch 命令,可选支持并行执行)运行 VMAF。另外由于特性的提取是开销最大的操作,用户也可以将特性提取的结果存储起来以供重复使用。
该程序包还提供了针对下列因素对 VMAF 模型进行进一步定制所需的框架:
- 训练所用的视频数据集
- 要使用的基本指标和其他特性
- 回归因子及其超参数(Hyper-parameter)
run_training 命令可以接受三个配置文件:包含训练数据集所需信息的数据集文件,特性参数文件,以及回归因子模型参数文件(包含回归因子的超参数)。下列代码示例定义了一个数据集,一系列所要使用的特性,以及回归因子及其超参数。
##### define a dataset ##### dataset_name = 'example' uv_fmt = 'yuv420p' width = 1920 height = 1080 ref_videos = [ {'content_id':0, 'path':'checkerboard.yuv'}, {'content_id':1, 'path':'flat.yuv'}, ] dis_videos = [ {'content_id':0, 'asset_id': 0, 'dmos':100, 'path':'checkerboard.yuv'}, # ref {'content_id':0, 'asset_id': 1, 'dmos':50, 'path':'checkerboard_dis.yuv'}, {'content_id':1, 'asset_id': 2, 'dmos':100, 'path':'flat.yuv'}, # ref {'content_id':1, 'asset_id': 3, 'dmos':80, 'path':'flat_dis.yuv'}, ] ##### define features ##### feature_dict = { # VMAF_feature/Moment_feature are the aggregate features # motion, adm2, dis1st are the atom features 'VMAF_feature':['motion', 'adm2'], 'Moment_feature':['dis1st'], # 1st moment on dis video } ##### define regressor and hyper-parameters ##### model_type = "LIBSVMNUSVR" # libsvm NuSVR regressor model_param_dict = { # ==== preprocess: normalize each feature ==== # 'norm_type':'clip_0to1', # rescale to within [0, 1] # ==== postprocess: clip final quality score ==== # 'score_clip':[0.0, 100.0], # clip to within [0, 100] # ==== libsvmnusvr parameters ==== # 'gamma':0.85, # selected 'C':1.0, # default 'nu':0.5, # default 'cache_size':200 # default }
最后,还可通过扩展 FeatureExtractor 基类(Base class)的方式开发自定义的 VMAF 算法。为此可使用其他可用基本指标和特性进行实验,或创建新的指标。同理还可以通过扩展 TrainTestModel 基类测试其他回归模型,详情请参阅 CONTRIBUTING.md 。用户还可以使用现有的开源 Python 库使用其他机器学习算法进行实验,例如可以使用 scikit-learn [17] 、cvxopt [18] ,或 tensorflow [19] 。程序包中还提供了一个与 scikit-learn 的随机森林回归因子(Random forest regressor)进行集成的示例。
VDK 程序包提供了 VMAF 0.3.1 算法和精心挑选的特性,以及使用 NFLX 视频数据集收集的主观分数进行训练的 SVM 模型。我们想邀请整个社区使用该软件包为视频质量观感的评估开发更完备的特性和回归因子。另外我们也鼓励用户使用其他数据集测试 VMAF 0.3.1,针对我们的用例以及更多其他使用场景继续进行完善和提高。
有关质量评估的未决问题
观赏条件。Netflix 支持从智能电视、游戏主机、机顶盒、计算机、平板,到智能手机等数千种主流设备,会员会在各种不同条件下观赏内容。观赏环境和显示设备也会对视频质量的观感产生影响。例如在 60 英寸 4K 电视上观看 1Mbps 码率的 720p 电影,所获得的观感与 5 英寸智能手机上观看同一部电影的体验就截然不同。目前 NFLX 视频数据集只涵盖在标准距离下通过电视观看这一种观赏条件。为了进一步完善 VMAF,我们正在进行其他条件下的主观测试。有了更多数据后,即可创建出更为通用的算法,将观赏条件(显示设备尺寸、屏幕距离等)纳入回归因子。
时序累加(Temporal pooling)。目前的 VMAF 实现会分别针对每一帧画面计算质量分数。在很多用例中,需要对这些分数进行时序累加以获得一个值并将其作为一个时间段的总值。例如可能需要得出某个场景的分数,某个特定时间段的分数,或整部电影的分数。目前我们使用了一种简单的时序累加方式对每一帧的值求得算术平均值。然而这种方法有可能让我们“忽略”某些质量较差的帧。能够为较低分数提供更高权重的累加算法也许能得到更接近人类观感的结果。如果要使用汇总分数对比编码后不同帧的质量波动或将其用作优化编码或流播过程的目标指标,此时高质量的累加算法尤为重要。为 VMAF 和其他质量指标提供更接近实际观感的时序累加机制依然是一个有待研究并充满挑战的问题。
一致的指标。由于包含完整的参考基本指标,VMAF 高度依赖参考内容的质量。然而不幸的是 Netflix 所提供内容的源视频质量并不统一。我们系统中存储的源内容分辨率从标清到 4K 五花八门,就算用相同分辨率播放,最高质量的源内容也可能存在某种程度的视频质量损失。因此对不同内容的 VMAF 分数进行对比(或汇总)无法获得精确的结果。例如当一个标清分辨率源内容生成的视频流获得 99 分(满分 100)的 VMAF 分数,与相同得分,但使用高清分辨率源内容生成的视频流的质量完全不可同日而语。为了进行质量监控,我们亟需针对不同来源的内容计算出一个绝对质量分。毕竟当观众欣赏 Netflix 的节目时除了从屏幕上看到的画面,并没有参考视频可供对照。希望通过某种自动化方式预测观众对于所看到视频画面质量的观感,并充分考虑可能对视频在屏幕上最终呈现效果产生影响的各种因素。
总结
为了向会员提供最佳质量的视频流播服务,我们开发了 VMAF 0.3.1 和 VDK 1.0.0 软件包。在不懈追求更高质量服务的过程中,我们的团队每天会使用这些工具评估视频编解码参数和策略。为了改善自动化的质量控制机制,我们已将 VMAF 和其他几个指标集成在编码管线中。在监控整个系统的 A/B 测试过程中使用 VMAF 作为客户端指标之一,我们才刚刚迈出了第一步。
改善视频压缩标准,以更智能的方式确定最实用的编码系统,这些要求在当今的互联网大环境中十分重要。我们认为,使用传统的指标(这些指标不一定能精确反映出人的观感)会妨碍到视频编码技术领域的技术进步,然而单纯依赖人工视觉测试在很多情况下并不可行。因此我们希望 VMAF 能解决这一问题,使用来自我们内容中的样本帮助大家设计和验证算法。正如业界会通过合作的方式一起制定新的视频标准,我们也邀请整个社区密切合作共同改善视频质量的衡量机制,而最终目标是更高效地利用网络带宽,让每个人都能看到赏心悦目的视频。
致谢
感谢下列人员对 VMAF 项目的帮助:Joe Yuchieh Lin、Eddy Chi-Hao Wu、C.-C Jay Kuo 教授(美国南加州大学)、Patrick Le Callet 教授(法国南特大学),以及 Todd Goodall。
作者:Zhi Li、Anne Aaron、Ioannis Katsavounidis、Anush Moorthy,以及 Megha Manohara。
阅读英文原文: Toward A Practical Perceptual Video Quality Metric
感谢陈兴璐对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们。
评论