【视频编码】 Content Aware ABR技术(二)

上次我们回顾了Content Aware ABR的使用场景和基本原理,并梳理了Netflix的per-title和per-chunk技术相关研究进展。本文将主要介绍YouTube关于ABR的一些研究进展。

1. Multi-resolution ABR码率切换点的选取

ABR(Adaptive Bit Rate)技术使得视频流能够在不同的网络带宽环境下传输,目前广泛使用的ABR技术是通过动态调整视频流的分辨率来适应随时变化的网络状况。由于视频在不同的分辨率下具有不同的rate-quality关系,因此Multi-resolution ABR策略要比单一分辨率的ABR技术具有更好的性能。而Multi-resolution ABR技术其关键问题是如何确定各个分辨率所对应的最佳码率。

通常一个ABR流中会携带多个码率版本的视频切片。而在目前的通信网络中,数据吞吐率变化范围比较大。因此,ABR流应该覆盖较大的码率范围以保证用户端随时能切换到一个合适的码率。然而,在给定分辨率下,可达到的码率范围是有限的。例如,对于一个4K视频在保证图像质量的条件下码率不能编得太低。而对于一个360p的视频,即使用很高的码率也不会编出太好的质量,因为它不具备4K视频那样的空间频率。为了增大码率范围,Multi-resolution ABR技术得到广泛应用。具体而言,一个视频能在不同的码率下编成不同的分辨率版本。例如,YouTube提供的DASH流在不同码率下包含了多种分辨率:4K、2K、1080p、720p、480p、360p和240p。

Multi-resolution ABR的另一个重要优势是它的rate-quality关系。通常,高分辨率视频在较高的码率下具有较好的视觉质量,而低分辨视频在较低的码率下具有较好的视觉质量。如下图所示,使用Multi-resolution ABR技术之后,用户端可以根据网络带宽将视频流切换到有着更高质量的分辨率版本,而交叉点就是切换分辨率的最佳码率点。

因此关键的问题是如何得到切换分辨率时的最佳码率点。最直接的思路是得到不同分辨率下的RD结果曲线,然后求出各曲线的交叉点。也就是说,对于一个确定大小的分辨率,存在一个码率点使得在更低分辨率下编出来的视觉质量(之后上采样)要比原来分辨率下的好。为了能找到对于海量视频都适用的方案,YouTube进行了以下工作。首先选出7966个4K视频切片作为数据集,利用SSIM作为失真衡量指标,基于VP9 Codec得到所有视频切片不同分辨率下的交叉码率点。然后从视频集中选出9个代表性的视频切片做主观测试,来直接获得对应的rate-quality结果。最终发现使用SSIM的结果和主观测试的结果具有一致性。

第一步:客观分析

将选出的7966个4K视频(不超5min)在0.5Mbps到15.5Mbps中取10个码率点编成2K和4K。对于每一个编码后的视频,计算SSIM值以得到rate-SSIM曲线。利用这些曲线可以获得每个视频的2K/4K切换的码率切换点。下图给出了这些视频码率切换点的经验性累积分布。平均的码率切换点是4Mbps左右。70%视频的码率切换点低于4.5Mbps,这就意味着当码率高于4.5Mbps时编成更高的4K分辨率能够获得更高的SSIM质量。而且可以看到,70%视频的码率切换点高于2Mbps,因此当目标码率低于2Mbps时大多数视频应该编成2K的。由于上述的方案基于SSIM,可能在主观视觉方面会有变化。下面将设计主观测试来验证上述方案的合理性。

第二步:主观测试

这一步主要是从这么多视频的集合中选取代表性的视频,然后再在不同的码率点上编成2K和4K的分辨率,这次的质量评估通过double-stimuli continuous quality scale(DSCQS) 主观测试完成,最后得到这些视频2K/4K切换的码率点。

为了选出代表性的视频,首先分析与码率切换有关的视频特征,基于这些特征选取9种高质量的视频内容。由于低分辨的视频相比高分辨率视频而言具有较低的空间采样率,因此面临着更多的空间频率混叠。混叠程度取决于视频内容的复杂度,因为较高空间复杂度的视频有更多频率分量,更易于受混叠的影响。所以这是第一个考虑的特征。

视频失真的另一个重要来源是量化。编码的视频流中包含了运动矢量和预测残差。运动向量描述着像素运动的轨迹,因此是无损压缩。与运动矢量不同的是预测残差通过量化来压缩,因此会引入失真。假定一个4K视频和一个2K视频以相同的码率编码,4K视频因为有更多的编码块因此需要更多的比特来编码运动矢量,此时分配给残差系数的比特数就会比2K的少,因此4K视频会引入更多的量化失真。随着时域复杂度越高,失真会更明显,因为时域复杂度越高,需要编码的不可预知的运动信息以及预测残差就会越多,而最终的编码质量对于分配给残差的比特数会更加敏感。所以这是第二个考虑的特征。

下图展示了视频编成高分辨率版本和低分辨版本的rate-quality变化趋势。低码率情况下,编运动信息的比特数与编残差的比特数相当。若编成高分辨率,分配给残差的比特数会相对更少,因此量化失真会更严重。此时,高分辨率与低分辨率版本的质量差异主要取决于视频内容的时域复杂度。而在高码率情况下,分配给残差的比特数都比较高,质量差异主要来源于空间频率的混叠。因此,本实验选取的视频特征为视频内容的时空复杂度。

最简单的获取时空复杂度的方法是获取I帧和P帧的大小。但视频有更大的I帧时,P帧也会更大,因为较高的空间复杂度也会带来更大的预测残差。本实验要选出不同时空复杂度量级的视频,所以为了解耦I帧和P帧大小的相关性,通过P-size/I-size归一化作为时域复杂度因子。最后将3226个视频切片使用H.264(ffmpeg)编码,固定QP为28,得到的时空特征的联合分布如下图所示,可以看到I帧大小和归一化的P帧大小比较分散,耦合度较弱。

通过边缘分布将这个联合分布划分为9个区域,每个区域选了最靠近区域重心的20个视频切片,通过人工观察这个20个切片,选取其中质量最好的视频切片。此时,就选出了代表性的9个视频做主观测试。

每一个被选出的4K视频切片,转出对应的2K版本。所有的视频切片被编码成四个码率点:2Mbps、4Mbps、6Mpbs和11Mbps,这个范围基本上覆盖了客观测试的范围。现在就得到了9 x 4 = 36组视频,每组视频包含2K和4K两个版本。然后将2K视频使用bi-cubic插值算法插成4K,进行最后的DSCQS主观测试。

最终得到的rate-MOS曲线如下图所示,从曲线中可以看出2K/4K切换的最佳码率在5Mbps左右,要比基于SSIM的客观测试得到的码率切换点4Mbps稍微大一些。某种程度上讲,SSIM确实是一个估计大量视频码率切换点的较好的质量指标,虽然有时可能会过高过低估计,但在大范围视频上估计平均视频质量时,估计误差可忽略。另外,也可以从图中看出,在低码率下,低分辨率的2K视频质量要优于4K视频,而在高码率下,高分辨率视频的质量会更好一些,与前面的分析一致。

2. 基于机器学习的视频转码

YouTube非常注重用户的视频观看体验。每天有数百万的用户设备往视频服务器上传视频数据,视频内容的差异性非常大,因此要使得所有的视频播放能有较好的观看体验是一项严峻的挑战。YouTube一直致力于减少压缩失真以提高视频编码质量。但如果仅仅是简单地为每个视频文件增加编码的目标码率,那么很容易超出现有的网络带宽。另一种方法是在有限带宽和最低编码质量条件下使得视频编码的参数最优。因此在码率、质量和计算资源的限制下,如何使得编码器能自适应地为每一个上传的视频编出最好的质量仍是一个棘手的问题。

这个问题是视频编码和转码领域广泛存在的技术瓶颈,通常的解决方法是找到一个合适的最佳转码配置参数对于大多数的视频都能产生较好的效果。这个合适的配置有时需要遍历所有可能的参数集,例如Netflix之前提出的per-title编码优化方案。而目前YouTube的方案是基于机器学习来为每个视频适配编码参数集,这个方法已经开始在YouTube上使用。

YouTube每分钟会上传超过400小时的视频。每个上传的视频文件需要用不同的编解码器转成不同视频格式以支持目前绝大多数的播放设备。目前唯一的能赶上上传速度并快速完成转码的方法是对视频进行切片化(chunks),然后并行处理这些视频切片。在Google的云服务支持下,每一个视频会被独立并且同时地被CPU处理。切片和重组带来的额外消耗是不容忽视的。除了这方面的考虑,维持视频中每一个切片的质量也是一项重大挑战。为了能快速进行流水线处理,每个切片互不重叠,而且很短,通常只有几秒钟。并行处理的好处就是提高了编码速度减少了处理时延。但不好的地方就是编码时没有相邻切片的视频信息,当把这些切片重新组合时,很难控制相邻切片之间的质量没有明显的波动和差异。由于切片长度很短,编码器还没达到一个稳定的状态就已经编完了,因此每个编码器处理切片时都略有差异。但如果使切片之间能够交换信息,这又会大大增加整个系统的复杂度。

下图展示了使用H.264编码器编一个720p视频时其中两个切片的PSNR per frame波动图。可以明显看到,在切片的开始和结尾质量差异较为明显,除了整体质量下降之外,这种变化性会造成一个脉冲式的失真(pulsing artifact)。

由于视频切片长度比较短,所以至少在统计上希望每个切片能和其前一个和后一个表现相似。一个简单的方法是改变切片的边界使得切片边界上包含一些运动场景例如物体快速的运动或者场景切换。这样每个切片变得比较类似,因此编码结果会更一致一些。实验结果表明,这种方法确实能够带来一些改善,但达不到预期效果,而且不够鲁棒。

所以关键是要允许编码器能够多次处理每个切片,在每次迭代时能够学习到如何根据整个切片的内容调整编码参数,最终使得切片的起始和结束能有相近的编码质量。但是注意到,这可能需要多次迭代才能得到想要的结果。目前已经发现了迭代次数很大程度上受到首次迭代时CRF(Constant Rate Factor)值的影响。有时只需要一次迭代就能在目标码率下达到期望的编码质量。此外最优的编码配置因切片而异。所以比较理想的方法是为每一个切片找到最优的配置。

下图展示了在不同CRF值下编码同一个1080p切片得到实验结果。每次实验后记录实际码率值,图中的每个点就是一个CRF-bitrate组合。可以看到这两个值之间有一个明显的指数关系。如果知道这个切片对应的该曲线的参数,那么就知道编出5Mbps的码流其CRF值应取20。

目前要做的就是寻找一个方法通过低复杂度地获取输入视频切片的信息来预测拟合曲线所需要的参数。这是机器学习中一个比较经典问题。而这个预测可以由Google Brain完成。从输入视频切片获取的信息称作视频的特征。此问题的特征向量中包括bitrate、MV信息、分辨率以及帧率等。这个特征估计或提取可以通过快速的低质量的转码完成。由于这些特征和曲线参数之间的关系很难用一个确切的解析式描述。所以,此时可以借助于Google Brain用机器学习的方法完成,如下图所示。首先选取10000个视频切片,对每个切片遍历所有参数配置比如CRF,获取每个配置下的实际码率。这样就得到了10000条曲线以及对应的参数。在产生这些训练数据和特征集之后,该系统学习到了如何从特征中预测曲线参数。在实际中使用了一个简单的“回归”技术,并且表现出色。虽然训练Google Brain的过程相对复杂,计算量大,但训练得到的系统在使用时相对容易一些。

下图展示了不同的方案使用在10000个视频切片的编码测试结果。每个点的纵坐标表示编码结果达到横坐标指示的码率误差范围内的切片数量的百分比。蓝色的线表示通过穷举遍历为每个切片找到最优的CRF值,这是最理想的情况。因此越靠近蓝色的线,设计的系统就越好。在20%的码率误差下,绿色线表示使用旧的系统方案编码仅有15% 的合格率,而Brain系统(红色的线)能达到65%如果仅使用从上传的视频数据提取的特征,而如果使用快速低质量转码得到的特征的话合格率能超过80%(虚线)。

但实际效果如何呢?以下展示了某个720p视频切片的场景(汽车行驶时的镜头)。第一个和第三个图是原来旧的系统编码该切片时的起始和结尾,可以看到起始要比结尾的质量差。第二个和第四个是使用机器学习自适应系统编码的结果。两者的码率都是2.8Mbps。很明显第二个图的视觉质量有了明显的改善,而且其对应的结尾帧的质量也有些许改善。因此之前时域上的质量波动问题基本上得到了解决,并且切片整体的质量也得到了较好的改善。

1. 切片起始对比:

2. 切片末尾对比:

参考文献

1. A Subjective Study for the Design of Multi-resolution ABR Video Streams with the VP9 Codec,Chao Chen, Sasi Inguva, Andrew Rankin and Anil Kokaram, SPIE Electronic Imaging, Human Visual Perception, 2016, San Francisco

2. http://www.streamingmedia.com/Articles/Editorial/Featured-Articles/Conference-Research-Tests-Adaptive-Video-and-Quality-Benchmarks-109907.aspx

3. http://www.googblogs.com/machine-learning-for-video-transcoding/

4. Optimizing transcoder quality targets using a neural network with an embedded bitrate model, Michele Covell, Martin Arjovsky, Yao-Chung Lin and Anil Kokaram, Proceedings of the Conference on Visual Information Processing and Communications 2016, San Francisco

原文发布于微信公众号 - 媒矿工厂(media_tech)

原文发表时间:2017-11-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PPV课数据科学社区

只需七步就能掌握Python数据准备

摘要: 本文主要讲述了如何在python中用七步就能完成中数据准备。 上图为CRISP-DM模型中的数据准备   下面七个步骤涵盖了数据准备的概念,个别任务...

3057
来自专栏机器之心

入门 | 玩转词向量:用fastText预训练向量做个智能小程序

4569
来自专栏机器学习算法与Python学习

干货 | TF-IDF的大用处

关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第二 【Python】:排名第三 【算法】:排名第四 有一篇很长的文章,我要用计算机提取它...

3846
来自专栏人工智能

Hike:A Hybrid Human-Machine Method for Entity Alignment

Zhuang Y,Li G, Zhong Z, et al. Hike: A Hybrid Human-Machine Method for Entity Al...

2227
来自专栏机器之心

业界 | 谷歌发布自然语言框架语义解析器SLING

35310
来自专栏新智元

当我们和计算机交互时,它看到的是什么?

计算机虽然有了人工智能的程序支持,但事实上也不能将其机器学习的功能等同于像人类那样。至少,到目前还不是这样。那么,向Google的图片识别或者Facebook的...

3397
来自专栏小小挖掘机

推荐系统实战-基于用户的协同过滤

1、数据集简介 MovieLens数据集包含多个用户对多部电影的评级数据,也包括电影元数据信息和用户属性信息。 这个数据集经常用来做推荐系统,机器学习算法的测试...

4406
来自专栏智能算法

主宰这个世界的10大算法

出自linux中文社区 链接:https://linux.cn/article-3125-1.html 什么是算法? 简而言之,任何定义明确的计算步骤都可称为算...

3398
来自专栏量子位

苹果推出高精度手写识别系统,可准确识别3万字符集

安妮 编译自 苹果机器学习博客 量子位 出品 | 公众号 QbitAI 在手机、平板和可穿戴设备不断普及的今天,手写识别比以往任何时候都重要。但这并非易事,拿汉...

3527
来自专栏MyBlog

建立一个线上购物的面向任务的对话系统

该文给出了针对用于线上购物的面向任务的对话系统的一个一般的解决方案, 目标是协助用户完成多样化的购买相关任务, 比如搜索商品和回答问题, 如同正常人之间的对话....

552

扫码关注云+社区