视频转码过程中涉及方方面面的视频图像算法,如何将算法有机地结合起来,打造成为行业领先的视频转码算法产品?通过多年的业务场景打磨和积累,快手音视频走出了一条自己的产品化之路。LiveVideoStackCon 2022北京站邀请到了快手视频图像算法引擎负责人陈宇聪,为我们介绍视频图像引擎Atlas和智能转码算法框架CAPE的发展历程,以及「质臻影音」「质臻轻流」等转码产品的推出和应用。

文/陈宇聪

编辑/LiveVideoStack

大家好,2018年我加⼊快⼿,主导了快⼿⾃研编解码算法KVC 1.0的预研、开发及上线。2020年,我开始负责视频图像算法引擎Atlas的架构研发和智能转码算法框架CAPE的设计迭代,以及StreamLake视频转码相关算法的产品化工作。

我将从以下三方面来介绍:一. 为什么要做算法产品化;二. 快手智能处理与编码算法产品化方案;三. StreamLake转码产品介绍及其应用。

-01-

为什么要做算法产品化

在探讨算法产品化的原因之前,我们先来了解一下音视频算法在业务场景中的需求。对于不同的业务场景,例如短视频、长视频、直播等,或者不同的方向,例如商业化、海外、toB客户等,这些所面临的场景都不相同,因此对算法功能及其特性的要求也不同。

就清晰度方面,点播与直播就有所差异。点播是一个头部十分聚集但对延时要求不太高的场景,可以采用异步转码,进行更加极致的压缩处理。我们可以二次甚至三次压缩非常热门的产品,以提高压缩率,并使其在下发过程中享受到算法所带来的便利。而直播则是端到端的实时场景,对算法的实时性和延迟有着苛刻的要求。

不同功能的算法在部署和迭代上也各不相同。传统的解码相关的算法主要使用CPU的运行资源,在部署时会采用规模较大的容器化方式进行部署。但在AI推理方面的算法,则会使用到GPU或者推理卡等。此外,不同业务方所能承受的成本也不同。不同场景所需要的带宽成本、资源成本以及其他成本所占比重都有所区别。

在需求明确后,接下来进行算法研发和赋能业务。为了提高压缩率,可以通过实验室指标来不断优化编解码算法。然而,如果只优化算法并不一定能提升业务体验,或者说在业务场景上获得实际收益。编解码算法从算法的指标到离线的主观验证,再到线上的AB实验存在两个gap。不仅编解码算法存在这样的gap问题,各种各样的算法包括视频图像处理和质量分析评价都会存在实验室指标和线上业务场景收益的差距。

当然一味满足业务需求也会存在问题。业务指标是非常明确的,一方面希望图像质量更好,另一方面希望码率成本和带宽成本更低。客户对整个优化路径不清楚,没办法提出具体的优化细节。

我们现在做的就是架起一座桥梁,来做算法产品化。这件事情有两个明显的好处,一方面,算法团队可以更明确地了解业务需求和场景,并通过对各个部件进行优化并计算衡量其收益,最终实现收益最大化。同时,在了解如何衡量收益之后,每个算法的优化路径以及研发方向就会非常明确。业务方也会获得完整的解决方案,而不是零散的算法。在实际业务场景中,业务方可以更好地使用算法来满足需求。同时,产品也可以基于业务进行持续打磨。

近几年,快手一直在基于产品化思路进行算法研发及迭代,在内部业务上进行持续打磨,在取得明显的收益后,团队相信这些算法能够为行业内带来更多价值,因此toB也变成了一件自然而然的事情。

-02-

快手智能处理与编解码算法产品化方案

下面具体来介绍快手智能处理与编码算法产品化方案。

第一部分是Atlas算法引擎,主要针对工程架构方向,使算法从实验室到线上,实现从“0”到“1”的过程。另一部分是CAPE,旨在形成一个完整的框架,使算法体系更加统一和完善,从而将产品化的解决方案成功复制到更广泛的应用领域,实现从“1”到“100”。

2019年10月,快手正式启动Atlas1.0,这标志着快手智能处理与编码算法产品化的开始。

2020年初,我们上线了第一个AI增强算法,Atlas架构⽀撑的第⼀个AI修复增强+转码算法上线,为AI算法落地转码场景打开了局⾯。

2021年,我们将视频分析、处理与增强、编解码等算法融合为智能转码产品化⽅案,并在业务场景中落地应用。2021年底,我们将快手视频质量评估(Kuaishou Visual Quality, KVQ)加入到整体方案中。至此,主要算法⼯作流建设完成,并具备了对外输出产品化方案的能力。

2022年1月,CAPE 产品化⽅案开始服务海外业务,以整体算法产品⽅案提供服务,解决了海外短视频⻓期以来的带宽和体验问题。2022年8月,快⼿发布toB技术品牌StreamLake,“质臻轻流”“质臻影⾳”等转码产品正式面向市场,服务于外部客户。

在2020年LVS大会上,我们也分享过Atlas算法引擎,当时是2.0版本。逻辑类似一个金字塔,塔尖面向业务方,是服务接口层,服务方可以使用统一的调用方式驱动算法框架,从而满足业务需求;底端是单独的算法能力,包括视频、音频的编解码算法,还有一些图像传统处理方法、深度网络AI推理模型等;中间层加入了Capella,用于分析及逻辑决定,形成可以实际执行的“菜谱”配置,将业务方的实际需求进行拆解和映射,来驱动下一层的算法完成全部功能。

一开始的算法框架比较简单,但加入AI推理后,整个框架就变得饱满起来。主要分为如下几层。蓝色部分是服务层,通过Atlas提供点播转码、直播转码以及AI算法服务。虚线框内是整个Atlas架构:第一层是引擎层,包括视频图像分析、评价引擎、视频离线、直播转码引擎、单点算法引擎等典型的算法场景。能力层包含算法团队研发的各种算法,如视频图像分析算法、视频质量评价算法、视频修复增强算法、视频编解码算法、视频智能⽣产算法等,涵盖了所有视频图像算法类别。

为提高算法运行效率,我们引入了非常多计算加速组件,如CPU计算加速、GPU计算加速、AI推理、编解码器等。最底层是硬件层,包括CPU、GPU、推理加速卡、编解码卡和自研芯片等。我们在图像分析和评价引擎做了非常多的优化工作,如只解码抽帧等。在解码过程中,采用智能流水组合,从而整体提升架构的性能。最后会通过统一的服务集成方案,去无缝对接和集成。

在解决了从0到1的问题后,我们需要更进一步将产品组合得更好,以应用到更广泛的场景中,这就需要解决从1到100的难题。我们开发了CAPE(Content Aware Processing and Encoding)即内容自适应处理编码来实现这一目标。算法优化一定有对应的性能曲线,曲线最高的极值点可以看作是一个“角”,我们希望在性能优化上达到这个最高点,所以取名CAPE,也带有“好望角”的寓意。

CAPE基于视频场景、运动、纹理等内容进⾏智能分析,实现⾃适应决策视频处理增强⽅式和编码参数,达到联合优化视频主观质量和码率的⽬标。它主要包含视频分析理解、算法决策、视频增强修复、视频编码和视频质量评价模块。

视频分析理解主要有两个方面的应用。一方面是进行基础特征的分析,另一方面则是基于场景内容的理解。前者有助于识别上传视频的画质问题和业务场景,从而帮助后续算法的决策。后者则更偏向于辅助后续的编码决策分析,具有一定的抽象性。

基础特征和内容理解都与人眼感觉特征相关,涵盖了模糊检测、块效应检测、镜头脏污、噪声检测、交错检测、大光圈检测、横竖屏检测、三段式检测、无意义检测和场景识别。模糊检测、块效应检测、镜头脏污、噪声检测和交错检测都是画质问题的识别。而大光圈检测、横竖屏检测、三段式检测、无意义检测和场景识别则偏向于场景检测。

第二部分是对一些抽象特征的分析,主要包括复杂度和视觉特征。其目的是建立一个码率与质量的模型,通过编码和视觉分析来预测视频在不同分辨率下的的码率-质量模型。根据预测结果,可以自适应决策视频的前处理和转码参数,以达到联合优化转码质量和降低码率的目标。

我们对一个视频进行预编码,并分析其空间和时间的复杂度,以推断码率和失真的关系。此外,我们还使用CNN的视觉模型进行特征抽取,机器提取需要的Embedding特征,以推算失真与主观质量之间的关系。码率失真是传统编解码所研究的对象。失真是物理意义上的特征,人眼难以直接观察,因此需要进一步进行视觉分析,来推断失真和主观质量之间的联系。有了这两部分特征,我们就可以预测不同码率下的指标。RD曲线的纵轴是KVQ,这更接近人眼主观无参考质量的标定。在不同的分辨率下,曲线也不同,可以为自适应决定视频分辨率参数提供参考。

这张图里列出了视频增强修复功能的算法,例如超分、插帧、HDR等。在处理视频之前,我们已经对视频进行分析并获得了它的特征和一些特点。基于这些信息,共有如下三类算法。首先是修复类算法,对视频进行去噪、去划痕,闪烁等操作,以提高视频质量。然后进行时空域的增强,例如超分或者去模糊,以提升视频清晰度等。如有需求,可以再对其进行颜色调整,如色彩增强、SDR转HDR或者对比度增强。最后,我们会对视频的清晰度和流畅度进行主客观评价。

这张图片展示了低质量视频超分辨率的效果。对于低质量视频内容,快手研发了带有修复能⼒的超分辨算法SR-LQ。该算法不仅提升视频分辨率,同时,还可以重点突出视频中纹理和边缘,避免常规SR容易出现的“过度平滑”问题。

在上图对比中,可以清晰地看到右图相比左图,在经过SR4K处理后,视频的细节纹理更加丰富。

针对高质量视频,我们将使用更为极致的提升方式。由于受拍摄设备的限制,一些影视剧的分辨率只有1080p。在这个追求2k、4k的时代,我们需要对其进行增强处理。处理后,视频的边缘和纹理更加突出,避免出现过度平滑问题。同时,我们还将进行去模糊处理,如图中所示,会将面部、文字的边缘处理得更好。

上图展示了进行色彩增强的案例。针对风景或物体的视频,我们会微调色彩,同时输出HDR/SDR+版本,适配不同显示能⼒的⼿机设备。

在标准制定上, 快⼿是VVC技术主要贡献公司之⼀,提交了过百件JVET技术提案 ,数⼗件技术提案获采纳进⼊VVC标准,技术提案采纳数国内前五、国际前⼗。针对AVS3的标准制定,快手也积极参与并且贡献突出。

快手自2019年起上线了自研K265编解码器,相比X265 Veryslow码率降低28%。自2020年起,快手的主要方向是迭代KVC,相比X265Veryslow码率降低从最初的35%提高至今年年底的60%。目前,快手的线上效率已经达到了50%左右,压缩率相比X265提升了一倍。

左图表呈现的是压缩率的提升情况。在提升压缩率的同时,我们还需考虑移动端的部署和覆盖率的问题。虽然VVC标准已制定,但其硬件解码的芯片还未广泛应用于所有手机上。若要使用VVC标准,需先进行软件解码。然而,目前VVC软件解码的耗时和功耗仍较高,比开源的K265解码器要高出50-60%。如果要在线上大规模应用编解码标准,必须让其功耗在一个可控的合理范围内,才能对更多的用户打开解码功能。

快手自研的KVC3.0在快手主流设备上比开源的H265节省46%。KVC软解码器经过多项优化,取得显著进展。

图中所示是快手首款自研智能视频处理芯片StreamLake - 200(简称SL200芯片),结合快⼿先进的图像与AI推理技术能⼒,最⼤限度节省带宽和提升视频⾳画质量, 编码质量和编码效率均国际领先。

一个完整的算法框架是需要反馈的,如何衡量算法的好坏是一项比较困难的任务。编码压缩不需要完全保留图像的原始信息,只需尽可能和原来保持一致即可。经过增强和修复后,视频会和原始数据源产生差异,因此不适于用保真度来衡量。因此,我们研发了质量评价算法来解决这一问题。

依托快手大量线上数据,在不同场景下进行适配和训练,整体性能与SOTA相比具有显著提升。同时,针对不同编码器的标准,相比公开的VMAF评价指标,在性能上有很大的提升。

在模型训练方面,我们采用最新的大模型,即采用时间、空间注意⼒的Transformer⽹络结构,在公开数据集上大幅度领先SOTA。相关⼯作成果已被CVPR2023接收。

中间的算法决策模块是基于CAPE算法框架构建的训练模块。通过前向链路加上KVQ反馈模块,构成了可训练的模式。先进行一次前向的推理,之后通过KVQ反馈决策采取何种策略。这一训练过程可以持续进行优化和迭代,面对不同的业务场景,可以通过长期训练达到更好的效果。

在这里进行一个小结。Atlas算法引擎解决了算法落地和上线的问题,实现了从“0”到“1”,算法迭代效率得到提升,能够更好地应用到业务场景,构建体系化的⽅案。CAPE算法框架解决了算法产品化问题,实现了从“1”到“100”,算法融合优化,在同⼀个⽬标下能使业务价值最⼤化,明确算法迭代⽅向。我们从业务中来,再到业务中去,通过内部业务持续打磨产品,输出给外部客户。而外部客户需求的也加快了⽅案的迭代。

-03-

StreamLake转码产品介绍及应用

如下蓝色区域是StreamLake产品中和转码算法相关的部分——媒体处理。这里包含之前提到的转码算法、增强算法、修复算法等。

我们将这些算法打包成两个产品——质臻轻流和质臻影音。质臻轻流主打压缩率,在相同的画质下压缩更多码率,不更改视频特征参数。

另一个产品是质臻影音,通过使用各种各样的增强和修复算法,提升视频画质。在提升分辨率的同时,色彩、流畅度和音频都会进行相应的提升和优化。

快手内部已上线质臻影⾳服务,在快手App放映厅中,用户使用质臻影音档位后,视听体验大幅提升。

StreamLake转码部署⽅式主要有四种,分别是公有云、算法镜像、分布式转码服务和硬件编码器。公有云通过公有云的OpenAPI和控制台提供媒体处理服务。镜像算法提供转码算法(FFmpeg)镜像,包含前处理算法filter和 K264、K265编码器,用户可以进行一定的自助开发。分布式是在算法镜像基础上,提供易部署和易运维、可弹性伸缩的的分布式转码服务。

这是快手自研的硬件编码器,集成了SL200编码卡及质臻影⾳算法,利⽤快⼿领先的视频编解码及增强和修复算法,帮助客户提升多媒体处理环节的质量与效率。只需要简单的部署,即可一站式交付,开箱即用。

以上是我的分享,谢谢大家。



LiveVideoStackCon 2023上海讲师招募中

LiveVideoStackCon是每个人的舞台,如果你在团队、公司中独当一面,在某一领域或技术拥有多年实践,并热衷于技术交流,欢迎申请成为LiveVideoStackCon的讲师。请提交演讲内容至邮箱:speaker@livevideostack.com。

快手智能处理与编码算法产品化之路相关推荐

  1. 快手智能视频图像编码处理服务架构

    正文字数:9639  阅读时长:14分钟 本文来自于快手视频算法工程师团队负责人闻兴在LiveVideoStackCon2020北京站上的精彩分享.凭借本主题演讲,闻兴老师荣获此次大会评选的优秀讲师称 ...

  2. 4种最常问的编码算法面试问题,你会吗?

    导语:面试是测查和评价人员能力素质的一种考试活动.最常问的编码算法面试问题你知道多少呢? 作者 | Rahul Sabnis 译者 | 苏本如,编辑 | 刘静 来源 | CSDN(ID:CSDNnew ...

  3. huffman java_详解Huffman编码算法之Java实现

    Huffman编码介绍 Huffman编码处理的是字符以及字符对应的二进制的编码配对问题,分为编码和解码,目的是压缩字符对应的二进制数据长度.我们知道字符存贮和传输的时候都是二进制的(计算机只认识0/ ...

  4. Elias-Fano编码算法——倒排索引压缩用,本质上就是桶排序数据结构思路

    Elias-Fano编码过程如下:把一组整数的最低l位连接在一起,同时把高位以严格单调增的排序划分为桶. Example: 2, 3, 5, 7, 11, 13, 24 Count in unary ...

  5. Stanford UFLDL教程 微调多层自编码算法

    微调多层自编码算法 Contents [hide] 1介绍 2一般策略 3使用反向传播法进行微调 4中英文对照 5中文译者 介绍 微调是深度学习中的常用策略,可以大幅提升一个栈式自编码神经网络的性能表 ...

  6. Stanford UFLDL教程 栈式自编码算法

    栈式自编码算法 Contents [hide] 1概述 2训练 3具体实例 4讨论 5中英文对照 6中文译者 概述 逐层贪婪训练法依次训练网络的每一层,进而预训练整个深度神经网络.在本节中,我们将会学 ...

  7. Stanford UFLDL教程 自编码算法与稀疏性

    自编码算法与稀疏性 目前为止,我们已经讨论了神经网络在有监督学习中的应用.在有监督学习中,训练样本是有类别标签的.现在假设我们只有一个没有带类别标签的训练样本集合 ,其中 .自编码神经网络是一种无监督 ...

  8. 浅谈Base64编码算法

    一.什么是编码解码 编码:利用特定的算法,对原始内容进行处理,生成运算后的内容,形成另一种数据的表现形式,可以根据算法,再还原回来,这种操作称之为编码. 解码:利用编码使用的算法的逆运算,对经过编码的 ...

  9. Base64编码算法

    转载:http://www.cnblogs.com/xqxacm/p/4886299.html 一.什么是编码解码 编码:利用特定的算法,对原始内容进行处理,生成运算后的内容,形成另一种数据的表现形式 ...

最新文章

  1. 【错误记录】Android Studio 4.2.1 编译报错 ( Kotlin 版本推荐设置 1.5.0 )
  2. python五种调试或排错的方法
  3. grub配置文件丢失的情况下修复
  4. 课堂笔记——Data Mining(1)
  5. web漏洞扫描工具_如何使用Arachni扫描web漏洞
  6. mqttnet 详解_MQTT协议详解
  7. 操作系统笔记(三)进程管理之管理
  8. 使用HttpClient连接池进行https单双向验证
  9. lvm硬盘管理及LVM扩容
  10. 早期关节炎患者延迟就诊风湿专科的长期影响
  11. android绘制矢量图地图,Android 高级 UI 进阶之路 (七) SVG 基础使用 + 绘制中国地图...
  12. 20191117 四川大学新生赛划水总结 --__- ...
  13. 几何平均详解,及其与算术平均、调和平均、均方根的关系
  14. [Pytorch系列-26]:神经网络基础 - 多个带激活函数的神经元实现非线性回归
  15. python对Excel合并单元格拆分
  16. 苹果手机怎么看生产日期?参考方法在这!
  17. php读取pdf文件乱码_PHP读取文件,解决中文乱码UTF-8的方法分析
  18. html简洁风格的个人博客网站模板(源码)
  19. AVI 文件格式解析
  20. ITE Super IO入门篇

热门文章

  1. 7-32 寻找250 (10分)
  2. 程序员能力模型与沟通技巧(一)
  3. Java为什么卷?好找工作吗?
  4. 阿里影业的稳健业绩来源:科技+内容塑造韧性,应对市场变化
  5. 关于Unity中新版动画系统的使用
  6. 程序猿修仙之路--数据结构之设计高性能访客记录系统
  7. 陈天桥与杨澜的一席经典对话
  8. 真正影响光辉的是灯里的油
  9. 最好用的数据库生成工具
  10. incorrect integer value for column 问题解决