写点什么

机器学习在视频编解码中的探索(一)

  • 2019-11-30
  • 本文字数:2058 字

    阅读完需:约 7 分钟

机器学习在视频编解码中的探索(一)

在 RTC 2018 实时互联网大会上,Visionular Inc 联合创始人兼首席科学家 Zoe Liu 进行了主题演讲,与大家一起分享了一场视频编解码的前沿探索。

1 Why Video Codec Matters?

大家都知道,从技术复杂度来讲,视频的编码和解码并不对称,编码器要比解码器复杂很多。那么,机器学习对编码可以做哪些优化呢?


大家目前讨论的比较多的是 3 个编码标准:一个是 MPEG 组织的,一个是从 VP9 到 AV1 的开源、免除版权税的,另外一个是我们自己在国内研发的从 AVS 到 AVS2、AVS3 系列。


编码的标准日新月异,一直在向前发展。而大家都会问,为什么视频编码那么重要?


以 JPEG 为例,它是一个图像标准,经历了几十年的发展。那么为什么几十年来 JPEG 没有被打败,反而被广为应用呢?很大程度上受益于它的广泛的商业用途和易实现性。接下来,我希望通过下图,和大家解释为什么视频编解码这么重要。


2013 年时,为了取代 H.264 编码器,谷歌推出了 VP9。海外用户看 YouTube,一般是两类手机,Android 上看到的是 VP9 的码流。由于 Apple 不支持 VP9 硬件解码,因此 iPhone 用户看到的是 H.264 码流。


谷歌曾做过一个统计,对比了世界范围内(不包含中国), VP9 和 H.264 的播放时长。从上图中我们可以看到,在印度、非洲等网络带宽不佳的市场,由于 VP9 的应用,大大优化了用户体验,首屏时间大幅缩短,并且卡顿大幅减少。


与此同时,采用新一代 codec 的应用,带来了用户体验的提升和新业务推进的可能性,这正印证了 Video codec 的重要性。


在编码器中,不论是 HEVC 或 AV1,都有 partition 的概念。熟悉编码的朋友都知道,HEVC 和 AV1 中都有一个四叉树的 partition。


比如,它的 superblock 在 AV1 中的大小是 128128,它可以继续向下做四叉树的划分,每个 128128 的图像块可以分成 4 个 6464,每个 6464 又可以分成 4 个 3232。以此类推,例如在 AV1 中可以分解到最小为 44 的图像块。


对于图像宏块而言,要做出一个 partition 的 map。统计表明,Video encoder 端 partition RDO 评估的计算会占到编码器复杂度的 80% 以上。


那么此时如何利用机器学习来尝试做优化呢?


如上图所示,第一行四张图是帧内压缩,第二行四张图是帧间压缩的实例。它展示了对于不同的图像块需要有不同的 partition。


原因就在于,每个图像块内容不同。对于帧内压缩,细节、纹理越多的地方,分块就越细致。对于帧间压缩,主要是对残差分块,主要是要看帧间的预测是如何进行的。从这个角度来讲,分块本身是由内容和预测模式决定的。


那么,对任一图像块,我们可以在内容上提取一定的 feature。大家都知道,当 QP 取值比较大时,即失真度比较高时,整块的内容就趋于平滑,那就会选择比较大一些的分块。QP 比较小时,会选择比较细致的分块。从这些方面可以看出,从块的角度,在 partition 的情况下,可以从内容、编码模式中提取相应的 feature,通过离线训练可以从机器学习中获得决策结果。


上图中这篇论文是北航的徐迈老师与他的学生们所做的一项工作。他们基于神经网(这里主要用卷积神经网)做出的对 partition 的基本分类。


在真正做 partition 时,一般的做法是分级进行的,比如块的大小是 6464,此时需决策是否要往下走,做 4 个 3232,到 32 再往下做决策是否继续划分,即决策是一层一层向下推进的。


这篇论文做了一个初步的尝试,经过神经网的训练学习,输出的是图像块最终的完整的划分结果,将多级的决策结果一次性输出为最终的划分图。这种方法的优势在于,能够最大限度地降低神经网本身带来的复杂度,一次性导出结果。


另外,它在采用卷积神经网络决策的过程中,包含了 early termination 的决策。因为当网路深度和每层节点数增加的情况下,神经网本身也会引入一些新的复杂度。这篇论文的结果是跟 HM 比对的,在 encoder 端的速度大约提升了 50%。


AV1 是开放的标准,是一个开源的 codec。我们和谷歌合作一起贡献了 libaom 开源代码。上图是我们的截屏。由于采用了机器学习的方法,使得 encoder 进一步优化。


从图中可以看到,这个 CL 中不是深度学习,而是采用了一个非常简捷的神经网。一般 CL 中的神经网构造是一层到两层,每一层的节点在 128 个左右。所以这里并不是深度学习,是采用了一个比较简捷的网络结构。


以往在优化编码器时,常常采用 empirical 的想法,即做 partition 时,从一级、二级到三级,可以提取当前 block 层的方差,也可以将当前的 block 一分为四,提取每一个 subblock 的方差,对其进行一些分析,然后做出决策,给出 hard-coded 阈值。当块参数的大小低于某个阈值或高于某个阈值时,继续往下做 partition。所有这些决策可以用神经网代替,因为此时可以通过积累大量数据对一个简单的网络进行训练,同时再用这个网络生成决策,判断是否需要四叉树继续下分。


从上图可以看出,用一个简单的神经网就可以把 encoder 速度提升 10 - 20%。所以,我们在采用机器学习的方法时,不一定是深度学习,因为神经网的概念已经存在很久了,主要是用大数据做训练,从数据集中设计网络,对相对复杂的非线性关系建模,从而使得 encoder 的速度以及编码效率进一步提升。


2019-11-30 22:461157

评论

发布
暂无评论
发现更多内容

dMSA 滥用 (BadSuccessor) 导致权限升级:使用 ADAudit Plus 监控关键属性更改

运维有小邓

日志审计 AD域审计

无监督训练在NLP中的价值体现

qife122

自然语言处理 词元化

深度剖析银狐APT攻击链,最终载荷竟是致命远控

塞讯科技

网络安全 信息技术 APT攻击 安全验证

家用机器人指令跟随训练新数据集发布

qife122

人工智能 数据集

北京市十一学校×火山引擎:全球AI少年齐聚北京,以代码会友

新消费日报

YashanDB UNISTR函数

YashanDB

数据库

Pixi vs Conda:7 个让我切换到 Pixi 的理由

肩塔didi

人工智能 机器学习 GitHub

华为阅读独家首发《金字塔在中国:古埃及文明大展炼成记》精品书

最新动态

科研环境配置太麻烦?Pixi 一站式帮你搞定!

肩塔didi

人工智能 rust cuda 包管理 科研

用 Pixi 管理 Python 项目:打通Conda 和 PyPI 的边界

肩塔didi

机器学习 开源 rust pip conda

通过模糊测试发现燃料虚拟机中定价错误的操作码

qife122

模糊测试 燃料虚拟机

SIEM解决方案怎么选?企业必看的7大核心功能解析

运维有小邓

日志分析 日志管理 SIEM

【架构革命】LinkedIn也无法拯救的Kafka:Pulsar 的存算分离成了终极答案?

AscentStream

kafka pulsar linkedin

YashanDB TRIM函数

YashanDB

数据库

蒸馏大型语言模型并超越其性能

qife122

机器学习 模型蒸馏

GPT-5多模态与情境感知AI技术解析

qife122

人工智能 企业应用

🔥Grok 4 永久免费!深度测评:优势短板一次说清

GPU算力

马斯克 openai grok gpt-5 xAI

行业热点丨智能仿真时代:电子工程多物理场解决方案创新实践

Altair RapidMiner

AI 仿真 PCB CAE 电子工程

迈向 AI 驱动的数据平台新时代

Databend

YashanDB TRUNC函数

YashanDB

数据库

Milvus + n8n:通过分析GitHub文档打造垂直领域的智能问答

阿里云大数据AI技术

GitHub Milvus n8n 智能问答

算力不开放,智能难平权:万亿参数时代,谁为开源模型托底?

脑极体

AI

MySQL事务原理:从ACID到隔离级别的全解析

秃头小帅oi

行星文化上线华为音乐,沉浸遨游张杰的音乐宇宙

最新动态

防止NLP模型更新中的性能回退技术解析

qife122

机器学习 模型优化

YashanDB TYPEOF函数

YashanDB

数据库

ROPE 阅读苏神博客有感

antonio

优化DeepSpeed ZeRO在低成本硬件上的运行效率

qife122

分布式训练 GPU加速

YashanDB TREAT函数

YashanDB

数据库

工程师团队如何打造4K流媒体设备的创新技术

qife122

无线系统设计 天线创新

Awesome Claude Code 资源大全

qife122

开发工具 Claude-Code

机器学习在视频编解码中的探索(一)_文化 & 方法_声网_InfoQ精选文章