拥抱智能,AI 视频编码技术的新探索_阿里云视频云的博客-程序员信息网

技术标签: 视频云  阿里云  机器视觉  人工智能  阿里云视频云  视频编码  

随着视频与交互在日常生活中的作用日益突显,愈发多样的视频场景与不断提高的视觉追求对视频编码提出更高的挑战。相较于人们手工设计的多种视频编码技术,AI 编码可以从大数据中自我学习到更广泛的信号内在编码规律。工业界与学术界发力推动 AI 视频编码标准并进行新框架的探索。

阿里云视频云在 JVET 面向人眼的视频编码标准和 MPEG 面向机器视觉的视频编码标准上均做出重要贡献,对标准发展产生强有力的推动。结合产业需求强劲的视频会议、视频直播等场景,阿里云视频云还开发了 AI 生成式压缩系统,在同等质量下比 VVC 节省 2-3 倍码率,实现真正的超低码率视频通信。

在 LiveVideoStackCon 2021 北京峰会,阿里云智能视频云算法专家王钊,为大家解读阿里云在 AI 视频编码技术的新探索。

文 | 王钊

整理 | LiveVideoStack

image.png

大家好,我是王钊,就职于阿里云视频云,今天的分享主题是 “拥抱智能,AI 视频编码技术的新探索”。主要想和大家介绍阿里云视频云的两个前沿工作。

image.png

分享包括四部分,背景与动机、人物视频生成编码、机器视觉编码和未来展望。

1. 背景与动机

我将从人眼视觉、机器视觉两方面延伸介绍阿里云视频云探索 AI 视频编码技术的背景与动机。

image.png

视频本身的数据量非常大,一张 4K 图像原始大小为 24.3MB、4K 未压缩视频的带宽需求约为 6Gbps、一个超清摄像头每天产生的原始视频高达 63TB,只有进行了视频编码才可以传输、存储。

image.png

随着时代的发展,智能安防、自动驾驶、智慧城市、工业互联网等场景中的视频也可以被机器接收、感知、理解。

image.png

以自动驾驶为例,一辆车主要具备的系统或设备包括摄像头系统(检测前方物体)、夜视红外、雷达测距器、惯性传感器、GPS 定位器及激光雷达(360° 进行扫描),这些都由机器采集图像和视频,再交付给机器进行分析、发现并解决问题、完善功能。

机器在某些维度上的能力优于人类,比如观测精度、感知灵敏度、工作强度耐受性(机器可以全天候运转)、客观性、可量化性。

据 Cisco 统计,以机器视觉为主的从机器到机器的数据传输将占据全球数据传输的 50%,这是非常大的量。

image.png

无论是人眼视觉还是机器视觉,视频编码的原理都是一样的,即依靠视频信号本身存在的相关性:一幅图像中相邻的像素值接近,这是空域相关性;相邻图像的像素值接近,这是时域相关性;如果将像素从空域变换为频域,其中也存在相关性。这就是视频压缩的三个最基本相关性,空域冗余、时域冗余,信息熵冗余,由此诞生了视频编解码的三个主要模块,帧内预测、帧间预测,变换 / 熵编码。

冗余消除本身是无损的,但视频压缩会出现失真,失真是如何造成的呢?这是为了进一步提高压缩率,把视频信息变换到某个域上,例如传统编码通常变换到频域,再按照其重要性进行优先级排序,把优先级低的如高频信息直接丢弃或量化操作进行消除从而大幅度提高压缩率,所以是量化在提高压缩率的同时带来了失真。

综上,视频压缩依靠两个维度,一是相关性的消除,不会造成失真。二是将信息变换到某个域上进行优先级排序,对优先级低的信息进行丢弃、消除或量化。

image.png

基于以上视频压缩原理,在过去的 50 年中,全球范围内的视频编解码工作人员推出了一代又一代的视频标准,虽然标准一代一代更新,但都是基于划分、预测、变换、量化、熵编码的框架没有变过去年 JVET 社区定稿了 VVC 标准,在 VVC 之后也致力于传统编码和神经网络编码的两方面探索。

国内在定稿了 AVS3 之后,也在深挖传统编码和神经网络编码以希望进一步提高视频编码效率。在机器视觉领域,MPEG 成立了面向机器的视频编码工作组(VCM),国内成立了面向机器智能的数据编码工作组(DCM)。

image.png

以 VVC 为例,去年制定的 VVC 对比 2013 年颁布的 HEVC 标准,虽然压缩性能提升一倍,但深入研究每个模块中模式数量的变化,会发现帧内预测、帧间预测及变换都增加了很多模式,这意味着平均每个模式能够带来的压缩性能增益变得更小。

每个编码模式都是由视频编解码专家根据自身所学及理解对视频信号进行数学化表达,每个模式的本质都是数学模型,而人们掌握的数学模型都很简单,比如线性模型、指数函数、对数函数、多项式等。模型的参数量不会很多,一般是几个,最多是几十个。压缩性能提升愈发困难的原因也在此,人们能够规律化总结的数学模型相对简单,表达能力有限,但视频内在的规律性却是无限的。

image.png

从模型角度,基于人工智能的神经网络模型可以通过更多的参数不断提高数学表达能力。数学领域已严格证明神经网络能够表达任意函数空间,只要参数足够,表达能力就会越来越强。手动设置的参数只有几个或几十个,但神经网络设计的模型中参数可以多达几百万个,甚至 Google 推出了亿级参数的超大模型。

从上限来看,基于 AI 编码的视频压缩一定会比基于传统编码的视频压缩有着更高的性能上限。

从视频信号本身的冗余性角度,上文提到传统的视频编解码在过去的五十年里都在消除空域冗余、时域冗余和信息熵冗余。

除了这三个冗余,其实还有其它的冗余对视频压缩来说有很大的性能提升空间。首先是结构冗余,右下方的两朵花很相似,在编码中,如果已经编码好第一朵花,那么编码第二朵花时的很多信息就可以从第一朵花的编码中推导出来,无需完全编码。第二个是先验知识冗余,见右上图,如果用手遮住右半部分人脸,只留左半部分,由于人脸接近对称,我们依然可以想象出被遮住的部分,这是因为人们的脑海里有了人脸近似对称的先验知识。那么也可以让机器记忆先验知识,就无需把信息从编码端编码到解码端。

所以对于视频压缩来讲,结构冗余和先验知识冗余也很重要,传统编码并不是不能利用这两者,只是人工智能和神经网络在额外利用结构冗余和先验知识冗余上更高效,更游刃有余。

2. 人物视频生成编码

image.png

首先看一个简单的两帧编码问题,编码端先将第一张图像的信息告诉解码端,解码端已经接受了第一张图像并且解码出来,我们将其作为参考帧。此时,如何压缩当前帧?

(右上两图)在传统编码中,方法是将当前图像分为一个个图像块,每个图像块在参考帧中找到最相似的参考块,当前图像块与参考块之间的相对位移称为运动矢量,这样就可以基于参考块预测当前块的预测值,拿到当前图像最可能的预测帧,再将预测帧和当前帧的差值编码过去就可以了。

相对于图像压缩来说,视频编码的效率非常高,因为视频编码的时域预测、时域相关性非常强。但这个码率也不会很低,因为要编码的东西很多,比如图像块划分的划分信息,每个图像块的运动信息、残差值等。所以压缩效率虽然相比图像压缩高很多,但也达不到超低码率。

为了实现超低码率压缩,我们提出了 AI 生成压缩方法。(右下两图)不再将整张图像划分为一个个的图像块,而是将它当做整体,将整张图像通过神经网络转换至某种特征域,在特征域上提取少数关键点,只需将关键点传输到解码端,解码端收到后并基于参考帧就能够驱动生成当前帧的图像。

其中,关键点数目可变,例如实例中有十个点,所以每幅图像只需传输几十个数值即可,码率高出传统编码方式非常多。

image.png

对于整个视频来说,可以先用传统编码传输第一幅图像,再用 AI 生成编码传输接下来的图像,在编码端提取每一帧的关键点传输到解码端。解码端如何生成这一帧?首先提取参考帧关键点将其和当前帧解码的关键点一起送入神经网络中,得到特征域上的稀疏运动场。

两幅稀疏运动场都会被送入 Dense motion Net 中得到密集运动场,并同时得到一张遮挡图。参考帧、密集运动场和遮挡图再一起被送入生成器中,从而生成当前帧。

image.png

这是关键点在特征域的可视化结果。

以第一行的图像为例,第一副是参考图像及其关键点,第二副是当前需要编码的图像及其关键点,中间十副带颜色的图像是每个关键点在特征域上反映的运动信息。其中第三副反映的是整体人脸正面的运动情况,后面几副可能反映头部外侧的运动情况,靠近右侧的几副可能反映下巴或嘴唇的运动情况。最后,十副特征图上的运动场会融合在一起得到密集的运动场。

image.png

这是在整个驱动生成的 pipeline 过程中每个环节的主观展示。

第一列是参考帧,第二列是当前帧,第三列是编码过去关键点之后在解码第一步首先生成的稀疏运动场,在目前的案例中,稀疏运动场对每个图像来说使用的是 4图片4 矩阵,图中可以看到有 4图片4 个方格,这是一个稀疏的运动图。将稀疏运动场作用在参考帧上就可以得到第四列中当前图像的简图,可以看到第四列人脸的位置和运动已经非常接近当前帧,只是在纹理细节上还存在差距。接着,稀疏运动场通过更加复杂的运动模型后得到密集运动场,再重新将密集运动场作用到简图上得到第六列中运动场作用后的更精细的图像。最后将遮挡图作用到运动场后的图得到当前帧的生成图。

image.png

在人物讲话的数据集上对 AI 生成压缩方案进行测试,能够看到以下主观上的对比。

屏幕录制2021-11-11 下午3.20.46_2.gif

左边两列视频是最新的 VVC 参考软件编码的结果,右边两列是 AI 生成压缩方案编码的结果,我们的码率略低于 VVC,但能明显对比发现画面质量远远好于 VVC。VVC 本身的块效应、模糊度都非常严重,而 AI 生成压缩方案无论是在头发、眼睛、眉毛上的细节图都更优,在整个头部运动的流畅度、表情的自然度方面也有明显提升。

这是在码率接近的情况下的质量对比,可以说已经达到了代差级的质量提升。

屏幕录制2021-11-11 下午3.20.46.gif

在更低的码率场景下使用 AI 生成压缩方案会有什么效果呢?

实验中,VVC 码率不变,AI 生成压缩方案的码率变为 VVC 的 1/3,结果显示生成质量依然优于 VVC 的画面质量。

这里的测试视频分辨率是 256图片256,对于这个分辨率,AI 生成压缩方案只需使用 3~5k 的码率就可以实现用户之间的视频通话。由此可以推断,在弱网甚至是超弱网环境下,AI 生成压缩方案依然能够支持用户进行音视频通话。

3. 机器视觉编码

我们在机器视觉编码这块工作的最初动机是,现在的视频应用场景中,视频的编解码、视频的处理和机器视觉的分析都是分开的,而我们希望在未来能够将这几点结合,形成统一的系统进行端到端的优化和训练。

image.png

我们选择了物体检测任务,例如这张图像(右上图),可能来源于监控摄像头或自动汽车摄像头,物体检测就是判断图像中有哪些物体,这里的物体包括两个信息,物体定位 (图中的方框) 和类别识别(判断是行人、车辆等物体类别)。

选择物体检测任务的原因在于物体检测在当代机器视觉领域中,是应用最广需求最大的技术,其次它是众多机器视觉任务的基础,只有先完成了物体检测,才能进行姿态识别,例如只有先检测出 “物体” 是人,才能进一步判断他是摔倒或是行走等其他行为,在姿态识别完成后才能继续做事件分析。

image.png

对于一张输入图像来说,在编码端会有神经网络将图像从像素域转换到多个特征图,将特征图通过熵编码传输到解码端,解码端基于特征图进行解析,在重构出图像的同时完成机器视觉检测任务。

image.png

我们在编码端提出了创新性的 Inverse-bottleneck 结构(右图),网络模型是先宽后窄的设计。机器视觉领域的网络模型一般随着层数的加深通道越来越多,这样每一层才会更密集,视觉任务精度更高。但对于压缩来说不行,压缩是为了降低码率,不可能传输太多的数据,那么如何统一压缩和视觉呢?

我们发现,在特征通道图之间存在大量的、高度的冗余,而这些冗余信息是可以被压缩的,所以我们将模型设计为先宽后窄的反瓶颈结构,在基本不影响机器视觉检测精度的前提下大大提高压缩效率。

image.png

由于整个系统既要做压缩任务又要做机器视觉识别任务,我们把人眼视觉和机器视觉的损失放在一起形成了联合损失函数进行整体优化,并提出了迭代搜索来确定各损失项之间的权重关系。

image.png

在 MPEG-VCM 标准组上,全球很多公司进行提案。

我们的机器视觉压缩方案对比最新的 VVC 标准,在 COCO 数据集上的测试结果显示压缩性能提升了 41.74%,在近几次的 MPEG-VCM 会议上,我们的提案性能都保持第一名。

image.png

这是性能对比的几个例子。

左上方图像,拍摄环境光线很暗,对于机器来说需要识别图像中有多少人,最左边是 ground truth,它会框出人像位置,并标注 “person“,预测概率是 100%。VVC 和我们的方案均使用相同的码率来压缩这样一张图像,解码端各自得到失真后的解码图像。

在 VVC 的解码图像上进行识别,没有检测出穿红色短袖的男生,而我们的方案能够检测出这个男生,并框出位置,标注 “person”,预测概率是 98%,虽然没有达到 100%,但相比 VVC,已经提升了很多。

image.png

右下角的 ground truth 框出了六个人,同样在相同的码率下压缩这张图像,在 VVC 的解码图像上只能识别出一个人(白框),而我们的方案可以识别出四个人,对比 VVC 有非常大的性能提升。

4. 未来与展望

image.png

首先在人物视频编码方面,我们的目标是实现多人、多物、多运动的复杂场景下的超低码率视频通话及视频会议。

image.png

在视觉分析任务方面,我们的目标是实现可分离的多任务编码,编码端单通道、解码端多分支来实现多任务的统一系统。

以上是本次的分享内容,谢谢!

「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。公众号后台回复【技术】可加入阿里云视频云产品技术交流群,和业内大咖一起探讨音视频技术,获取更多行业最新信息。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/VideoCloudTech/article/details/121357193

智能推荐

替换雷劈网表单设计器使用的默认主题,使用neditor_yuxiaoyu.的博客-程序员信息网

替换步骤:1.前往雷劈网下载demo,快速通道http://formdesign.leipi.org/downloads.html2.下载neditor,快速通道:https://www.oschina.net/p/neditor3.将formdesign/js/ueditor-formdesign文件夹复制到neditor相应目录下4.将neditor中neditor.confi...

DoDataExchange_顺其自然~的博客-程序员信息网

void CDlgSelectCS::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //先调用父类方法 DDX_Text(pDX, IDC_EDIT_SCR, m_ScrCS_Name); DDX_Text(pDX, IDC_EDIT_DEST, m_DestCS_Name); }MSDN是这样描述的:Called by the framework to exchange and v.

mmdetection3d调用votenet来进行3d预测_雅痞匪徒(Nike)的博客-程序员信息网

需要使用的官方的文档链接如下:1:https://github.com/open-mmlab/mmdetection3d/tree/master/data/sunrgbd2:https://github.com/open-mmlab/mmdetection3d/blob/master/docs/getting_started.md总的来说,按照官方文档的步骤进行操作,踩了挺多坑的,并非一帆风顺,还好,最后搞定了。大坑:该框架只支持linux和mac,我最初以为测试的步骤啥的只是处理数据集,那么只涉及

BZOJ 1090 SCOI 2003 字符串折叠 区间DP_16bit戦争的博客-程序员信息网

题目大意:给出一个字符串,在不改变这个字符串的内容的情况下可以将它进行折叠,具体见题里说的吧。问这个字符串最短可以折叠成多长。思路:数据范围才100,怎么暴力怎么搞。首先是一个区间DP,设f[i][j]为字符串从i开始到j最短可以折叠成多短。要用到体中的折叠的方法,其实只需要暴力枚举这一段折叠成几段,然后用hash判定一下就行了。当然不要忘了正常的区间DP。CODE:

计算机应用基础 高国红 pdf,高职高专“十一五”规划教材·公共基础课系列:计算机应用基础..._Hdhnrjdjjf的博客-程序员信息网

《高职高专“十一五”规划教材·公共基础课系列:计算机应用基础》突出了计算机基础知识的学习和基本操作的训练,体现高职高专院校以能力培养为本位的办学特色。全书分为8章,主要内容包括:计算机基础知识、WindowsXP操作系统、Word2003文字处理、Excel2003电子表格、中文演示软件PowerPoint2003、计算机网络与Internet基础、计算机维护与维修、常用工具软件等。《高职高专“十...

经纬财富:无锡现货白银天通银_u017066779的博客-程序员信息网

天津贵金属交易所(以下简称“交易所”)是根据国务院关于《推进滨海新区开发开放有关问题的意见》(国发﹝2006﹞20号)的政策精神,经天津市政府批准,由天津产权交易中心发起设立的公司制交易所。交易所注册资本金为一亿元人民币,由中国中信集团控股,天津产权交易中心、中国黄金集团公司等企业参股。中信集团已成为其控股股东;自2012年初天贵所引入了中金集团参股后,中信集团成为第二家入主天津贵金属交易所的国有

随便推点

Python动态更新服务器ip到dnspod_iWinstonYu的博客-程序员信息网

首先从dnspod获取初始的ip,然后获取服务器ip,两者比较,如果不同就更新新的服务器ip到dnspod。源代码: https://github.com/windpenguin/DynamicDNSPod#!/usr/bin/python#-*- coding:utf-8 -*-import httplib, urllibimport socketimport time

程序员如何利用空闲时间挣零花钱_weixin_30384031的博客-程序员信息网

一: 私活作为一名程序员,在上班之余,我们有大把的时间,不能浪费,这些时间其实都是可以用来挖掘自己潜在的创造力,今天要讨论的话题就是,程序员如何利用空余时间挣零花钱?比如说周末可以赚外快啊,在网上接点活干,那么,都有哪些网站?1:程序员客栈:https://www.proginn.com/程序员客栈,是互联网远程工作中心,程序员的经纪人。雇佣BAT级别开发者为创业...

Java入门(一)—— Java 中带参带返回值方法的使用(6-5)_崔东玉的博客-程序员信息网

如果方法既包含参数,又带有返回值,我们称为带参带返回值的方法。例如:下面的代码,定义了一个 show 方法,带有一个参数 name ,方法执行后返回一个 String 类型的结果调用带参带返回值的方法:运行结果为: 欢迎您,...

leetcode同样的代码 网上结果和本地结果不一样_LeetCode 例题精讲 | 13 BFS 的使用场景:层序遍历、最短路径问题..._weixin_39525007的博客-程序员信息网

DFS(深度优先搜索)和 BFS(广度优先搜索)就像孪生兄弟,提到一个总是想起另一个。然而在实际使用中,我们用 DFS 的时候远远多于 BFS。那么,是不是 BFS 就没有什么用呢?如果我们使用 DFS/BFS 只是为了遍历一棵树、一张图上的所有结点的话,那么 DFS 和 BFS 的能力没什么差别,我们当然更倾向于更方便写、空间复杂度更低的 DFS 遍历。不过,某些使用场景是 DFS 做...

生日相同(结构体排序)_userluoxuan的博客-程序员信息网

Description在一个有180人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的学号,出生月日。试找出所有生日相同的学生。Input第一行为整数n,表示有n个学生,n此后每行包含一个字符串和两个整数,分别表示学生的学号(字符串长度小于10)和出生月(1学号、月、日之间用一个空格分隔。Output对每组生日相同的学生,输出一行

利用百度地图抓取公交信息实现三维地图车辆跟踪轨迹回放_前端怎么实现三维地图车辆模型监控_无极低码的博客-程序员信息网

MapVGL,是一款基于WebGL的地理信息可视化库,是一款基于百度地图的大数据可视化开源库,可以用来展示大量基于3D的地理信息点线面数据。设计初衷主要是为了解决大数据量的三维地理数据展示问题及一些炫酷的三维效果。百度地图有很多强大的功能,如图片叠加、瓦片数据加载,模型加载,各类覆盖物等等,我们看见到许多漂亮的可视化系统,都少不了百度地图、还有百度的相关js类库echart等等,今天闲来无事,利用百度mapv实现三维公交线路的实时查看跟踪,路线轨迹回放、绘制站点名称。主要步骤抓取百度公交线路。

推荐文章

热门文章

相关标签