ICIP2017报告系列之一——Netflix/Google/Youtbe都在做什么:画质、动态优化、新标准、深度学习压缩、VR-阿里云开发者社区

开发者社区> 人工智能> 正文

ICIP2017报告系列之一——Netflix/Google/Youtbe都在做什么:画质、动态优化、新标准、深度学习压缩、VR

简介: ICIP(IEEE International Conference on Image Processing)是由IEEE主办的老牌图像处理大会,今年在北京举行。从图像类顶会的角度,CVPR、ICCV等人工智能类的会议从原本的很受关注进化到现在的极受关注。

ICIP(IEEE International Conference on Image Processing)是由IEEE主办的老牌图像处理大会,今年在北京举行。

从图像类顶会的角度,CVPR、ICCV等人工智能类的会议从原本的很受关注进化到现在的极受关注。相比之下,传统的图像处理大会如ICIP、ICME、ICASSP等的关注度和引用率都有所降低,不过规模依然够大,也作为某些细分领域的大本营,依然能够反映出图像技术研究的整体趋势。

大门.jpg
会场.jpg

本系列至少分三篇,第一篇分享工业界workshop的内容也即本篇,第二篇是分析图像处理尤其是传统图像处理技术在深度学习的潮流之下的技术趋势,第三篇是针对一些有趣的paper内容进行分享。

本篇分6小部分,包括Netflix的质量评估、编码器动态优化、编码器测评3小块、Google的AV1编码标准、基于神经网络的图像压缩两小块、Youtube的VR。

一、Netflix的Workshop

Netflix在ICIP上讲了三个工作,分别是质量评估标准VMAF、编码器动态优化、开源编码器评测。

1.1 质量评估标准VMAF

net1-title.jpg

VMAF是Netflix自己提出的视频质量评估标准,现在是开源的并放在github上了。

背景

视频和图像的质量评估一直是非常困难且热点的问题,难就难在这些基于公式生成的客观质量评估方式很难准确地匹配人眼的主观感受。最常用也最古老的评估视频图像质量的指标是PSNR(峰值信噪比),它将经过劣化之后的单幅图像逐像素地与劣化前的图像进行比较,计算这两幅图的差异作为劣化程度的衡量标准,以此来表示图像的质量。在计算视频的质量时,将每一帧作为一幅独立图片进行计算。PSNR计算简便,结果凑合能用,但至少有三个非常大的直接问题:其一是它只能衡量其与参考图的差异也即相对质量,不能计算绝对质量;其二是它孤立地计算每一帧,无法利用视频中相邻帧的相关性和运动信息;其三是PSNR值的计算法过于straight-forward,结果跟人眼的主观感受并不总能匹配。

2004年提出的SSIM是相对PSNR的一个重要进步,它从计算孤立的每一个像素进化到利用图像结构化信息,得到了更接近人眼主观感受的指标。但它仍然没有脱出有参考质量评估的范畴,和PSNR一样只能计算相对质量、无法利用视频的时域信息。

之前的工业界用会更工程化的方法。例如老牌检测仪器设备商Tektronics出品的质量分析仪PQA(Picture Quality Analyzer)就用人眼视觉模型中的各种效应如亮光遮蔽效应、运动不敏感效应等进行建模,用handcraft的方法拟合公式,来逼近ground truth的实测MOS、DMOS、JND等指标数据。这种方法对内容分析的依赖更强,也用到了视频的运动信息,但依旧需要参考帧。

所以从上面可以看出,总是需要参考帧这种反人类的前提一直是质量评估中非常明显的痛点,半参考和无参考质量评估也一直都是热点研究课题,不过若说结果如何,多年来的研究成果总结起来只有4个字:不提也罢。

而且很遗憾地,VMAF也仍然是一种全参考质量评估算法。

VMAF原理

VMAF是Video Multimethod Assessment Fusion的缩写,看名字这就是一种多方法融合的算法,主要使用了3种指标:visual quality fidelity(VIF)、detail loss measure(DLM)、temporal information(TI)。其中VIF和DLM是空间域的也即一帧画面之内的特征,TI是时间域的也即多帧画面之间相关性的特征。这些特性之间融合计算总分的过程使用了训练好的SVM来预测。
所以总结下来VMAF的整体流程如下图:

net2-vmaf.jpg

先在每帧中逐像素地计算VIF、DLM、TI,以及再在全帧的范围内做pooling得到全帧指标,再用训练好的SVM做融合,然后得到每一帧的分数。再在时域上做pooling得到全序列的分数。总计算复杂度是PSNR的约10倍,也即是稍大于SSIM,算是比较低,完全可实时,作为附加的额外计算量也用起来不太心疼的程度。

VMAF目前最大的局限性在于其结果没有通用性,目前的VMAF只适用于在明亮的室内通过电视观看1080p视频时的质量评估。不过手机上的模型也在做了,而且关于手机上的主观质量,netflix秀了一个很有意思的曲线:

net9-phone.jpg

“同一个视频,在手机上看显得更清楚”这个结论似乎理所当然,但上线这个曲线回答了“多清楚的视频在手机上就足够清楚了”的问题。对于我们评估小屏上视频质量对于用户感受的影响,指出了一个可能的评估思路。

分析

个人觉得,VMAF最有意义的地方在于其多特征融合+学习的计算框架开源之后的开放性和可扩展性。我直接想到的我们能自主做VMAF的算法提升的方向至少有以下3点:

(1)VMAF的开源代码中包括Netflix训练好的一些参数,我们后续可以基于我们自己的视频内容训练我们自己的参数。无论是国产古装剧品味独特的后期风格,还是某些卫视浮夸的舞美,还是UGC内容的特点,甚至淘宝直播的画面特点等等,跟netflix的场景都不一样;使用我们自己的训练集,训练出符合我们自己的直接业务需求的参数集,供我们自己的业务使用。
(2)我们可以提出自己想用的新的时域或空域特征,把它融入VMAF的指标中。在提了新的指标之后,也不需要考虑专门的公式跟原有的特征做融合,只需要继续放在SVM的框架中,由原来的数据集来重新训练一下SVM就行了。
(3)对于4K、HDR、60P,甚至3D、VR等含有高指标或新特性的视频,如果VMAF能一直保持良好势头的话可能本身就会逐渐支持,如果不支持的话我们也可以自己训练数据来做,如果有标注好的数据集就更好了。

如果说上面说的对算法进行改造的事情还是显得稍微有点远的话,如果我们信任VMAF指标本身,优酷眼前可以干的质量、带宽整治的事情包括:
(1)基于VMAF略微修正当前选择的各档位码率、分辨率组合的合理性。
(2)把VMAF做进我们自己的编码器,实时评价编码质量,取代原有的PSNR和SSIM指标。甚至,从编码器算法优化的角度,把VMAF指标作为模式选择中率失真优化(RDO)的目标函数,修改RDO模型,使模式选择的结果更能提高VMAF指标,而非使用传统的基于MSE的RDO模型来提高PSNR指标。

1.2 编码算法的动态优化

net3-title.jpg

DO方法及结果

动态优化的动机是为了给不同的视频赋予不同的参数,以达到最优的效果。

其中“不同的视频”的概念包括但不限于:不同的视频类别,同一个视频里的不同段,netflix号称自己的视频内容中每一个大分类现在都应用着完全不一样的编码参数;“不同的参数”的概念包括但不限于:IBP帧类型、量化参数QP、分辨率。

用的方法框架倒是很土,就是穷举的trellis方法——然后很自然地,工作的难度就在于如何在trellis的基础框架上用算法手段和工程手段做简化了。

Trellis分很多个维度,第一个是trellis QP,即每一帧穷举地尝试所有的QP。第二个维度是分辨率,即每一帧尝试用不同的分辨率进行编码,然后在码率也即QP的约束之下,寻找在某一个特定的码率条件下最优的分辨率是什么。会上只分享了这两个维度,但我感觉应该还有更多的维度,不然后面的结果有点过于好了。整体trellis的框架如下:

net4-do.jpg

哪怕只trellis QP和分辨率,每帧都能独立变换的话45分钟的电视剧就是45min 60sec 25fps 51QP 7resolution帧的穷举编码——这有点太过分了吧!确实,所以稍微做一个简化,别每帧都独立地试了,按镜头做分段,假设每一个镜头里面的内容是一致的,也就应该保持参数的一致,那45分钟的电视剧按300个镜头算,穷举次数就是300镜头51QP7resolution,好像相对靠谱一点点了……

Netflix展示的应用的动态优化之后的结果是这样的:

net5-doresult.jpg

对于264和265,相同质量下都节省了1/3左右的码率。简直给跪了。另外值得注意的是用VMAF和PSNR作为评价指标时,码率节省的比例基本一致,或许说明我们如果只是想评价编码器水平的话,PSNR就挺好?

分析

从做DO的思路来看,netflix希望能从更整体的角度来考虑质量和成本:

(1)动态地在不同板块间调整质量和成本。比如室内访谈类节目画面静态,易于编码,用较小的码率即能达到比较好的画质;而体育类节目画面大幅运动,难于编码,需要较大的码率才能达到比较好的画质;所以如果这两类节目的码率都设置成一样的话,就会造成访谈类节目对带宽有浪费、而体育类节目码率仍不够高的情况。所以合理的方式是对不同的节目类别应用不同的尤其是带宽和码率相关的参数,类似于广电常用的在固定带宽信道中传输多路实时流节目的统计复用(Statistical Multiplexing)方法的离线版本。
(2)不片面地追求分辨率,而以实际感受画质为优先。Netflix无论使用VMAF还是PSNR评价画质时,都是用scale的方法进行计算,也即始终不对分辨率有预先假设。更高的分辨率虽然带来了提高了该分辨率下能达到的画质的上限,但在带宽限制在较低水平时对编码器本身也是严重的负担。10Mbps的1080p肯定比10Mbps的360p更清晰,但500kbps的1080p的马赛克会重到不能忍,而500kbps的360p则看起来舒服得多,所以对于500kbps的带宽约束而言,500kbps是比1080p更清晰的(不配图了,应该可以想象出吧?)。所以netflix的动态优化将分辨率作为参数之一,带宽作为约束条件,优化目标函数则被设定为scale之后的画质最优,是很先进的思路,值得我们学习。
(3)最最重要的是,以上这些调整规则不是人为基于经验指定的,而是基于一套完整的算法和机制动态计算出的最优解。人的经验有穷尽、有滞后,而算法和公式则会不断完善,从机制上保证了以后再冒出来什么新的内容类型,都能第一时间放到这个算法公式里获得最优化值。

1.3 开源编码器评测

net6-title.jpg

演讲者一上来就吐槽说这个工作的最主要意义是监督本团队视频算法工程师的成果产出……好吧,所谓作茧自缚也不过如此。

netflix自己的评测也是每年都会做,做得比近两年炒得火热的莫斯科大学的视频编码器竞赛要简单一些,就比了4个东西,264的最主要开源库x264、265的最主要开源库x265、VP9的唯一开源库libvpx、AV1的唯一开源库aomenc。AV1是互联网标准化组织AOM刚推出的新一代视频编码标准,Google的分享里说得多,我在下面再详细说,总之就是个免专利费的小众编码标准啦。(VP9:那我呢那我呢?“乖,说你小众都抬举了好吗?”)参数配置方面,都是最慢参数,充分释放算法库自身能力的。
值得看的结果就下面这一页(还有一页VMAF结果的,数据非常像):

net7-compare.jpg

X264被当靶子,基本结论就是AV1 > VP9 > x265 >> x264——跟原本大家以为的一样。分辨率越大,x265、VP9、AV1相比x264的优势就越大——跟原本大家以为的一样。不过,哪怕在最小的270p上,x265也能获得30%的码率节省,——比我原本以为的要大哎,抓紧优酷全站上265吧……

1.4 Netflix总结

用了以上种种技术以后,netflix让手机观看视频的最常用带宽从600kbps降到270kbps,并维持了大致相当的画质。嗯,大赞,撒花。

捎带一句,Netflix的Video Algorithm团队一共9个人,其中有个好萌好萌的深肤色妹子,感兴趣的可以钉钉我要照片……

再捎带一句,Netflix目前覆盖全球的区域如下图中红色部分……不过最大的那块白似乎也快被友商解决了?

net8-range.jpg

二、Google的Workshop

Google讲得干货满满啊,几乎要路人转粉!Google讲的两个题目,一个是AV1视频编码标准,一个是用神经网络做图像压缩的综述。

2.1 AV1视频编码标准

goo1-title.jpg

背景

我们最常用的视频编码标准从MPEG-2算起,到H.264、H.265,都是要付专利费的,当然主要的压力都施加给了终端芯片厂商。为了应对专利风险,Google做过自己的视频编码标准VP8、VP9,其中VP8放进Webrtc里形成了一定的使用量;中国也早在2004年成立了自己的标准组织AVS并推出了AVS、AVS+、AVS2三代视频编码标准,其中AVS+这一代还成功地在广电行业实现了产业化,做了整条产业链的产品,形成了几十亿级别的市场规模。但从总体规模上看这些非H.26x的标准还都是在敲边鼓,大家基本默认还都在用264和265。

但从H.265开始,专利条款愈发苛刻、价格越来越高,大家就越来越坐不住了。Google也感觉自己势单力薄,于是召集一票大佬Amazon、ARM、Cisco、Intel、Microsoft、Mozilla、Netflix、NVidia等等一起成立了开放媒体联盟(Alliance for Open Media,AOM)做免费编解码标准,做的第一代就是AV1,面向互联网应用,计划2017年12月就要release第一个正式版本了。

从推出的时间来看,AV1从压缩性能上相当于H.265.5,会显著优于H.265但又形不成代差。相比于正在提案的H.266也即当前的JVET而言,显著的优势就是保持了解码端的低复杂度,以此保持了解码的低成本,对于硬解方案来讲意味着更低的芯片价格,对于软解方案来讲意味着相同的CPU能解码更高的分辨率和帧率。当然,维持解码端低复杂度也代价不菲,很多JVET里提案的新特性比如仿射变换、浮点QP等都无法应用,导致AV1新特性整体看来依然是在H.265和VP9的基础上提出了更多的奇葩mode、使用更多穷举来获取更高的压缩率。这从当前时间点落地来讲当然是必然的,解码端低复杂度也是极好的,但我个人认为这并不代表视频压缩技术的发展方向,从思路上相比JVET也没什么先进性。

AV1中的编码工具

AV1里面使用的编码工具分为预测工具、变换工具、环路滤波工具3大类,以下是被我非常主观地挑了重点之后的详细内容点评:

(1)预测工具即利用图像时间、空间相关性的帧间和帧内预测部分,是算法优化、计算量占比和画质影响绝对的重头。AV1的特性主要包括:
块划分像265一样略微超过四叉树的划分,多了少许诸如1x4比例的预测块;
帧内预测分主方向和精细方向两级,主方向和264类似有8个,精细方向多至56个,超过了265。而且这些模式有些相当奇葩的,不光有带非线性权重的smooth mode、用于编屏幕信息有奇效的Palette mode,甚至还有一个利用了arg min函数的预测模式Peath Mode,做汇编优化的同学估计会怨念满满,如下图自行体会像素P的预测值是如何根据相邻块中参考点T、L、TL的值求得的:

goo2-intra.jpg

运动向量(MV)参考方面是基于VP9的MV参考模式的改进;
运动估计模式方面,可使用与265类似的多个MV可指向同一个参考帧的模式;新引入了处理物体扭曲时运动估计的局部和全局warp模式,功能与仿射变换类似;
运动补偿方面,AV1炒冷饭地使用了H.263里曾经用过的OBMC,靠融合相邻块的多个预测值来提高物体边缘处的预测精度;
在亚像素插值方面,在VP9可自由设置普通滤波器、文艺滤波器、二逼……哦不对,是普通滤波器、锐利滤波器、平滑滤波器三种不同的滤波抽头的基础上,增加了横向和纵向可使用不同滤波器的能力,所以总的滤波器形态扩大到3x3=9种;感觉又是个坑选择障碍症患者的特性,真用的话估计大家99%还是都默认用横纵都是普通……

最后重点分析有一个值得一提的亮点:支持了同一个块中混合帧内和帧间预测,即interinter mode和interintra mode。这个模式是为了解决如下图的问题的:

goo3-target.jpg

即有些方的或长方的预测块里的实际画面被分割成多个物体,如何准确分别表示它们的运动方式的问题。H.264里反正只有16x8/8x16/8x8/8x4等那几种标准的块划分,匹配不上真实物体位置就只有认了,匹配不准就导致预测残差变大、码率变大、画质变差;到了H.265里分块形状更多了、一个PU能使用多个同向MV了,形式就好转了很多,但还是没有质变。AV1里用了如下图这么大的codebook来覆盖可能出现的同一个块里多个独立运动物体的分割情况:

goo4-mode.jpg

我本以为这个需要花5bits来编码的codebook放在一个真实使用的标准里已经很丧病了,没想到在inter和intra两种模式之间,这个mask的边缘还能是渐变的……好吧,如下图:

goo5-smooth.jpg

(2)变换工具的特性见下图:

goo6-trans.jpg

总体就是3个方面的排列组合:首先是四种变换DCT、ADST、FlipADST、无变换自由搭配,其次是变换块形状支持多种正方形和长方形,最后是每一个变换块可以继续往小了拆。为了获取最优的压缩性能,感觉RDO-T算法已经再一次跃跃欲试了。

(3)环路滤波工具是将deblocking、CDEF、LR三个filter以cascade的方式连起来。

CDEF和LR是新提出的环路滤波工具,在264、265都有的deblocking filter去除块效应之余,CDEF用于去除振铃效应,LR(loop-restoration)的作用类似265里的SAO,用于在最后一步把解码图像和原始视频源硬凑得更接近一点。
这段就不展开了,唯独吐槽一下凑出CDEF(Constrained Directional Enhancement Filter)这个名字的同学真是辛苦了。

AV1总结

总之拜以上种种nb特性所赐,AV1目前号称压缩率超过265 25%,今年底的版本的目标是超过265 30%。

从个人观点而言,看好AV1作为专利博弈工具的价值,也看好基于AV1刷paper的价值,谈实际业务为时尚早。

2.2 基于神经网络的图像压缩

goo7-title.jpg

这正是我最近准备当做中长期目标研究一下的方向,瞌睡送枕头,正好有大牛帮我survey一下。其实我更关注的是基于深度学习做视频压缩,今年文章也开始多起来了,不过还远不如图像压缩这么成熟,一步一步来吧。

概述

用神经网络做图像压缩的历史出乎意料地长,早在1989年Cottrell就用当年的BP神经网络做过图像压缩,而且,就当年那个框架的顶层架构一直用到今天,也即把图像压缩与解压缩的过程直接映射为一个自编码器架构。

不过现在的工作在细节之处跟当年的工作比还是变化很大的,包括用卷积层代替了当年的全连接层,使用的网络更深了,优化算法大幅升级,把熵编码部分也包进来进行端到端的训练,用循环结构处理多压缩率问题,以及无论是训练数据还是计算资源都有指数级的增加。

从顶层架构上来看,最主要的两个问题就是给这个自编码器选择目标函数和网络结构:

goo8-top.jpg

目标函数是这样的:

goo9-func.jpg

这是一个RD模型,其中第一项是Rate损失函数,第二项是Distortion损失函数,中间的beta作为trade-off的参数,作用类似于视频编码的RDO里的lambda。显然地,Rate损失函数是对编码函数f(x)的量化损失进行建模,而Distortion损失函数则要通过比较源图片x与先编码后解码的g(f(x))来计算。

一年之内的重要论文见下,感兴趣的同学自己找来看吧,抱歉没有文字版,同时感谢arXiv。

goo10-paper.jpg

挑战

用深度学习做图像压缩目前面临的挑战被归纳为5方面:

(1)架构与训练的细节
这方面是关于神经网络的通用问题,网络结构啊、层数啊、激活函数怎么选啊、卷积大小啊,唯多试而已。
据说在频域训练比直接在像素域训练效果好很多。
据说循环模型效果很好,尤其在码率分配方面,但最大的问题就是太慢:

(2)量化码的反向传播
量化的函数是不可微的,因为它是折线,梯度不是0就是无穷大。目前的标准解决方式,或者在正向流程里加噪,或者在反向流程里用其他函数替换掉量化函数,总之让它可微就好。

(3)控制熵
有三种主要的方式,一是通过设置一个瓶颈能力比如0.125bpp并将优化目标设置为distortion最小,二是用一个可微的熵模型来做端到端的训练,三是用一个带proxy损失的不可微熵模型。目前的结果是第三种效果最好。

(4)直接的比特分配
基于RD模型的码率控制已经得到还不错的比特分配了,如果想进一步获得提升,基于图像复杂度进行直接的比特分配或许是条路。

(5)确定并评估损失函数
这还是压缩出来的图像怎么算好的问题的另外一种说法,还是要主观图像质量评估,他们也想训练出一套主观质量标准。唔,你要不要试试VMAF……

当前结果

目前用神经网络做图像压缩的压缩率结果是这样的:

goo12-result.jpg

也即是说跟JPEG2000的压缩率有得一拼了,说明这条路至少是可以继续往下走的。至于编解码的复杂度,就还是那四个字:不提也罢。

三、Youtube的Workshop

Youtube分享的是VR业务的视频和音频技术。

3.1 VR视频

you1-title.jpg

在视频方面,VR视频如何提升画质,基本就是三条路:一是直接调编码器,纯服务端内部优化,系统改动最小;二是调映射方式,系统和客户端需要微调;三是调流媒体,后台、播放链路、客户端改造都大。

you2-way.jpg

在编码器内部,youtube与epfl合作搞了两个东西,一是修改量化表,可以使VR视频中斜向的线条更流畅;二是在球面映射上做的的运动估计,即做运动估计时认为物体存在球形畸变。都是很不错的思路,可惜跟265不兼容,我们等266见了。

you4-quant.jpg
you5-me.jpg

在映射方面,youtube做了件挺有意思的事,即分析怎么样的映射是好映射,基于的假设是,如果映射后的图像上的一个像素所代表的面积,和映射前的图像上一个像素所代表的面积越接近,则这个映射越好。基于这个思路,youtube列出了地球仪映射和cubemap两种最常用的映射,课件地球仪映射的顶部和底部都是很多个映射后的像素对应一个映射前的像素,而赤道位置则相反,cubemap好一点但也不太匀,而youtube自己提出的ECM映射最匀,所以ECM映射最好。从知其然也要知其所以然的角度,我们优化映射方法时,也可以用这种方法算一下,看看PSNR的提升或降低是不是讲道理的。

you3-proj.jpg

道理我懂,但实验数据也是要看的。youtube在如下图的三种视角模式下进行了质量测试,对照上面那个映射面积图我们也基本上能直接猜出来了,1、3视角模式应该是ECM优,2视角模式估计是差一点或者差不多。从测试结果上看确实如此,在第1个视角模式下稳定地略微好0.3~0.5dB的PSNR,算是个不错的结果了,而且在最差的第2个视角模式下也能跟cubemap打平。

you6-res1.jpg
you7-res2.jpg

3.2 VR音频

you8-title.jpg

优酷VR在音频上面下的功夫还不太够,做法上比较简单。实际上全景声的准确表达是很复杂的,需要通过n阶分解来表达,例如下图左侧的全景声声场,如果只按1阶表达的话只能获得下图中间的声场,需要至少3阶才能表达出如下图右侧的声场效果。

you9-sf.jpg

对于音频的压缩,也需要特殊的压缩格式来减小全景声的损失。直接用aac压缩的话如下图,红色部分损失是比较大的。

you10-res1.jpg

用传统OPUS进行压缩,好像更差一点,如下图。

you11-res2.jpg

用全景声OPUS,都是384kbps,就好得多了。不过这个似乎需要特定的元数据支持才可以用。

you12-res3.jpg

对于沉浸式的体验而言,声场是很重要的,后续在音频方面还得多下些功夫。

那么本期就到这里,敬请期待遥遥无期的ICIP2017报告系列之二……

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
人工智能
使用钉钉扫一扫加入圈子
+ 订阅

了解行业+人工智能最先进的技术和实践,参与行业+人工智能实践项目

其他文章