AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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

  • 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:461083

评论

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

机器学习模型验证:被低估的重要一环

澳鹏Appen

人工智能 机器学习 模型开发 模型开发训练 模型验证

一次由groovy引起的fullGC问题排查

转转技术团队

超大模型工程化实践打磨,百度智能云发布云原生 AI 2.0 方案

Baidu AICLOUD

资源调度 异构计算 AI加速 GPU容器虚拟化 云原生AI

2022-Java后端工程师面试指南-(计算机网络)

自然

网络 watt network 8月月更

Kubernetes 计算CPU 使用率

CTO技术共享

开源 签约计划第三季 8月月更

What's new in dubbo-go-pixiu 0.5.1

apache/dubbo-go

dubbogo Dubbo3 Dubbo网关

API服务网关

阿泽🧸

API网关 8月月更

开源一夏 | 提高代码可重用性,减少重复劳动--手把手带你实现Python自定义模块并上传到pypi,贡献自己创造的轮子为所有人使用,让Python开发更加简单

迷彩

Python 开源 签约计划第三季 8月月更 自定义模块

Thread State 详解

自然

Thread 8月月更

【LeetCode】把二叉搜索树转换为累加树Java题解

Albert

LeetCode 8月月更

《DevOps围炉夜话》- Pilot - CNCF开源DevOps项目DevStream简介 - feat. PMC成员胡涛

玩转Devop和研发效能DevStream/DevLake

开源 DevOps cncf WLB

IFIT的架构与功能

穿过生命散发芬芳

8月月更 IFIT

风控逻辑利器---规则引擎

转转技术团队

Java 规则引擎 风控 后端、 特征工程

开源一夏 | 盘点 GitHub 那些标星超过 20 K 的 Golang 优质开源项目

宇宙之一粟

GitHub 开源 Go 语言 gopher 8月月更

测试开发【Mock 平台】08 开发:项目管理(四)编辑功能和Component抽离

MegaQi

8月月更

Java System.lineSeparator 方法

HoneyMoose

ThreadLocal全面解析(一)

自然

ThreadLocal 8月月更

Kubernetes 维护技术分享

CTO技术共享

开源 签约计划第三季 8月月更

MySQL高级指令

武师叔

8月月更

10道不得不会的Docker面试题

JavaPub

redis Docker

Kubernetes你不知道的事

CTO技术共享

开源 签约计划第三季 8月月更

云服务器基于 SSH 协议实现免密登录

昆吾kw

Linux SSH 云服务器

每日一R「03」Borrow 语义与引用

Samson

8月月更 ​Rust

Kubernetes 选举机制HA

CTO技术共享

开源 签约计划第三季 8月月更

开源一夏 | 参与开源能让人更幸福

石云升

开源 开源社区 8月月更

Apache DolphinScheduler 3.0.0 正式版发布!

白鲸开源

海豚调度 DolphinScheduler 调度器 版本发布

RocketMQ整体架构与基本概念

急需上岸的小谢

8月月更

参天生长大模型:昇腾AI如何强壮模型开发与创新之根?

脑极体

元宇宙社交应用,靠什么吸引用户「为爱发电」?

融云 RongCloud

元宇宙

canvas

Jason199

canvas 8月月更

开源一夏|OpenHarmony如何选择图片在Image组件上显示(eTS)

坚果

开源 OpenHarmony 8月月更

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