【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

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

    阅读完需:约 6 分钟

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

2 ML to Coding Performance

AV1 是一个实例,它采用了神经网络、机器学习的概念,使得 encoder 进一步提速。使得用神经网代替经验决策。


那么,神经网是不是可以帮助我们对视频压缩做压缩性能提升?下面,我举三个例子,分享一下我们从哪些方面可以把神经网和深度学习用在编码性能提升上。


第一个,是从超分的概念来分享。大家都知道,压缩造成了信息丢失。信息丢失以后我们希望在解码端或者编码端的 inloop 过程中,重建丢失的信息。如果我们可以做到,就可以达到编码性能的进一步提升。因为压缩是一体两制,或在一定码率下提升画质,或在一定画质下节省码率。如果可以在一定的码率下重建失去的信息,就可以进一步提升画质,之后可以进一步节省码率,通过画质提升将降码率后失真图像的质量还原到原来码率的画质水平。


AV1 中采用了更多的工具,从而使其可以比已有编码标准,比如 HEVC 有进一步的提高。其中一个工具称作 restoration,里面提供两个滤波器,一个是 Wiener filter,一个是 Self-guided projected filters,仅这一个工具的 BDRate 性能提升在 1 - 1.5% 之间。


如上方右图所示,它是一个 restoration 的描述。那么它是如何把信息恢复出来的呢?我们可以想象,任何一个像素点是多维空间的一点,那么一个小时的视频一定有 n 个图像帧,每个帧里有 m 个像素点。如果把每个点都想象成一维的话,任何一个视频实际上是高维空间中的一点。做这种想象以后,上方图右侧的 Xs 就是原始的视频,经过压缩,就得到了高维空间中的另一点,如果这两点重合,就是 lossless coding 的过程。这两点在高维空间中距离越远,失真度就越大。重建的过程就是力图将压缩后的 X 那一点带回来与原来的点越来越近的过程。


AV1 中有一个 guided filter 的概念,通过这个 filter 可以从解压以后的 X,恢复成 X1、X2 两点,也就是得到两个滤波器的结果。做完后发现,这两点离原来那点还是差得非常远。那么 AV1 进一步通过 X1、X2 建立一个平面,把原有的视频所对应的点,在现在这个平面上做投影。可以看到投影以后所得点就离原点近了很多,这就是一个重建的过程。


最终 AV1 只要求在码流中传递两个参数 α 和 β,需要高精度传输过去,在解码端用同样的 restoration 就可以恢复出比较高质量的图像。从这点可以看出,这一个工具就可以达到 BDRate 的 1% 以上的提升,我们可以用学习的概念得到更好的图像复原,所以很自然而然就想到超分方法的运用。


现在,超分辨率在机器学习中已经得到广泛应用。压缩以后的图像,通过学习可以重建出一个更高质量的图像,利用这个图像可以在我们现有的编码结构中加以运用,从而达到更好的 coding performance。


这是我们和杭师大的丁丹丹老师合写的一篇论文,主要探索重建图像。可以在四方面加以应用:第一,插值滤波;第二,In loop filter;第三,可以通过利用多个参考帧,重现出一个更清晰的参考帧;第四,Out loop post-processing filter。


这些都是从学习的角度,利用已知的参考帧重建出更高清晰更高质量的参考帧。或者是利用插值滤波,因为插值的获取也等价于重建出一些原有的信息。从我们训练集数据中得到的信息,存储到神经网络结构以及其相应的参数中,再加上已有的视频数据得到重建的信息,利用重建信息帮助我们提升编码的性能。


上图是进一步的一个例子,包括前向帧和后向帧在时空上进行的联合重建。


最后重建的结果是一个超分辨率图像。同样的码率,在解码端可以运用该技术使得视频质量得到进一步提升。视频在用多帧分辨率做重建的过程中,由于每帧的视频中有一个运动矢量的概念,所以这篇论文最主要的贡献,是在原有方法的基础上做了一个像素对齐,这是视频相对于图像在处理上比较特别的地方。


徐迈老师的另外一个工作,也是利用学习恢复在编码过程中失去的信息,不过不是提高分辨率,而是提高图像的质量,去除编码后图像的 artifacts。


我们在编码解码过程中会发现,每一帧的质量有波动,任何一个图像帧由于 QP 的不同,每帧质量会不同,有些帧的质量比较好,比如我们通常说的 Key frame,这篇论文中把这样的帧叫做 PQF。


如果我们可以把 PQF 的帧识别出来,用学习的办法把质量比较差的帧的质量弥补、提升,这样不仅可以提高原本质量差的帧的质量,更可以优化序列中各帧的质量到更高的水平。


视频帧与帧间的质量保持平稳是比较关键的。举一个例子,做针灸的时候要扎很多针,如果每一针的力度相差不多,患者会觉得 ok。如果突然一针的力度很大,人就会记住那一针的感觉。而人眼观看视频也是一样的。


首先第一个工作就是识别视频中哪些帧质量比较高,因为此时解码端的原视频是不可得的。这个工作主要利用类似无参考图像质量评价(no reference image quality assessment)的方法来进行。在没有原视频的基础上,有一项研究是无参考质量评估,这篇论文借鉴于那个领域的工作。


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2019-11-30 22:46577

评论

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

Java 下数据业务逻辑开发技术 JOOQ 和 SPL

步尔斯特

上海推动普惠金融顾问制度落地,金融服务云平台或成为普惠金融的服务中枢

易观分析

金融

你的公司需要数据中台吗?

久歌

架构

2022-10-18:以下go语言代码输出什么?A:panic;B:编译错误;C:moonfdd1。 package main import ( “fmt“ “net/url“ ) // 其中

福大大架构师每日一题

golang 福大大 选择题

java部分基础总结

Studying_swz

java 编程 10月月更

Vue实现日期选择器

游坦之

前端 vue2 10月月更

数据中台前世今生二:从数据湖到大数据平台看数据应用需求发展

雨果

数据中台

Go基础数据类型使用实战:int float bool

王中阳Go

Go golang 学习方法 golang 面试 10月月更

你用Go写过中间件吗?带你用Go实现【操作日志中间件】

王中阳Go

golang 高效工作 学习方法 #go 10月月更

怎样设计好FAQ的页面更好地解决用户问题?

Baklib

产品 推广 FAQ 降低成本 客户满意

【Java深入学习】线程状态

Geek_65222d

10月月更

Spring Boot「08」设置和使用 Property

Samson

Java spring 学习笔记 spring-boot 10月月更

nodejs实现jwt

coder2028

node.js

JavaWeb(一)

Studying_swz

后端 10月月更

一文彻底读懂webpack常用配置

Geek_02d948

webpack

通过以下7个步骤,建立出色的产品手册

Baklib

产品 客户忠诚度 产品手册 降低成本 客户满意

数据中台前世今生(三):互联网下半场+数字化转型=数据中台

雨果

数据中台

从AI作画到AI做视频,这一跳改变了什么?

脑极体

如何实现多个Git仓库同步

Appleex

git

Vue组件入门(八)v-model + 自定义参数

Augus

Vue 3 10月月更

webpack高级配置

Geek_02d948

webpack

如何通过cmd怎么打开计算机管理

Appleex

windows cmd

Go slice切片详解和实战:make append copy

王中阳Go

Go golang 学习方法 #go 10月月更

Zebec 以 Layer2 的形式推出 Zebec Chain,流支付新时达来临了

西柚子

深聊Nodejs模块化

coder2028

node.js

JDBC学习

Studying_swz

后端 10月月更

时序数据库及 IoTDB 介绍 | 小白教程文档(一)

Apache IoTDB

时序数据库 IoTDB Apache IoTDB 小白文档

Zebec 以 Layer2 的形式推出 Zebec Chain,流支付新时达来临了

小哈区块

面试突击91:MD5 加密安全吗?

王磊

Webpack构建速度优化

Geek_02d948

webpack

图像算法助力提效转转商品审核

转转技术团队

图像处理

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