HEVC并行处理技术介绍

news2024/11/17 0:17:34

h265 相比 h264 的复杂度

  1. 复杂度体现
    ○ h265 帧内预测模式增多,h265 包含角度预测、DC 预测、平面模式等 35 种预测模式,远超 h264 的 17 种模式,帧内模式选择的复杂度大大增加;
    ○ h265 的区域划分方式更加多样化,提出了树形划分结构,划分的单元大小更加多种多样,出现了非对称划分,运动补偿更加复杂;
    ○ h265 增加了变换单元的概念,最大变换单元的大小由h264 中的 8x8增加到 32x32,运算量更是不可同日而语;
    ○ h265 的总体负责度可能超过以前编码器数十倍;
  2. 解决方法
    ○ 多核环境下并行处理可以成倍的增加编解码速度,成为一种有效的解决方式。

视频编解码并行处理技术

  1. 并行处理基本概念
    ○ 并行处理一般是指许多指令得以同时进行的处理模式,并行处理通常是将处理的过程分解成小部分,之后采用多个运算单元以并发方式加以解决;
  2. 功能并行
    ○ 功能并行是指将应用程序划分成相互独立的功能模块,每个模块间可以并行的执行,也称为流水线型并行,是将各个独立的模块划分给不同的运算单元,各个模块之间通过流的方式来进行数据交换和通信,最终将各个单元串接在一起。
    ○ 比如 h265 中的解码过程中的熵解码、反量化、反变换等,这些模块相互联系和运作机制,可以重新划分组合,实现功能并行。
    ○ 充分利用了时间上的并行性来获得酵素的效果,比较适用于硬件实现。
    ○ 缺点就是容易产生载荷失衡问题,此外需要在不同运算单元间进行数据通信,需要额外的资源进行存储;此外功能并行的扩展性较差。
  3. 数据并行
    ○ 数据并行是将数据信息划分为相互独立的部分,每一部分交给不同的运算单元来执行,从而实现并行处理;这种情况不同运算单元上执行的程序是相同的,处理的是相互独立的数据信息,不需要运算单元间的通信。
    ○ h265 提供了适于进行数据并行处理的结构单元,如片和 Tile,在不同的片和 Tile 中,数据信息是相互独立的,有利于将其分配给不同的运算单元来处理。
    ○ 对于比片和 Tile 小的划分单元,h265 支持波前并行处理(Wavefront Parallel Processing,WPP),这是对相互具有依赖关系的图像单元进行数据并行处理的方法。
    ○ 容易达到负载均衡、具有非常好的扩展性、易于软件实现。
    在这里插入图片描述

h265 并行处理方式

  1. 考虑 h265 标准特点,在解码过程中,熵解码在 Slice、Tile 以及 CTB 行的起始处都有可能进行概率模型初始化,对于不同的图像,初始化的位置都不相同;

  2. 由于熵解码的依赖关系与后续解码的依赖关系不一致,如果在并行过程中不加以区分,会给整个并行解码带来很多麻烦,解码效率大大降低;

  3. h265 的解码过程可以分成两个串行的功能模块,即熵解码和并行解码两部分,其中熵解码部分主要进行熵解码,而并行解码部分主要进行预测、反变换、反量化和去方块滤波等。

  4. h265 并行解码模型混合了功能并行数据并行两种方式。
    在这里插入图片描述

  5. h265 编码单元数据依赖关系
    ○ 针对并行处理的编码单元,必须消除数据间的依赖关系的影响;
    ○ 波前并行技术必须在满足各个数据单元 CTB 之间依赖关系的前提下进行;
    ○ h265 编码单元的数据依赖关系主要由帧内预测、真间预测、去方块滤波以及样点自适应补偿产生;
    ○ 帧内预测:当前 CTB 有可能会依赖左方、左上方、上方、右上方的 CTB 的像素信息和模式信息;
    ○ 帧间预测:当前 CTB 的运动矢量有可能需要左、左上、上、右上的 CTB 预测得到;
    ○ 去方块滤波:对当前 CTB 块进行行边界滤波的过程需要参考左 CTB 块的右侧四列像素、上 CTB 的底部四行像素;
    ○ 样点自适应补偿 SAO:SAO 的边缘补偿有 0、45、90、135 四种情况,多当前 CTB 补偿时,周围的 8 个块都有可能被参考;

h265 并行处理新技术

  1. Tile
    ■ Tile 是 h265 中新增加的数据单元,它将原图像划分为一个个独立的矩形区域,各个矩形区域独立进行编码,不会进行相互参考;
    ■ Tile 的引入主要是为了并行,而非同步和纠错,改变了原有的扫描方式,Tile 中的 CTB 根据光栅扫描;
    在这里插入图片描述

    ■ 一个 Slice 可能包含多个 Tile,一个 Tile 也可能包含多个 Slice,但不会出现一个 Slice 跨越 Tile 边界,也不会出现一个 Tile 跨越 Slice 边界的情况;
    ■ 当多个 Tile 位于同一个 Slice 当中时,它们可以共用同一个 Slice 头,从而节省码率;
    ■ Tile 引入的代价就是率失真性能随着 Tile 数目的增加而降低,因为 Tile 单元划分使Tile 边界附近信息的相关性被破坏了,此外 CABAC 也会在 Tile 边界进行概率模型的更新;
    在这里插入图片描述

  2. 波前并行处理 WPP
    ■ Tile 和 Slice 的引入都会破坏相关性,造成一定的性能下降,而 h265 引入的 WPP 技术,允许多行 CTB 可以同时进行处理,但是后一行的处理要比前一行滞后两个 CTB,这样可以不破坏正常相关性的前提下进行并行解码,保持原始性能;
    在这里插入图片描述

  3. 依赖片
    ■ h265 增加了依赖片这一数据单元,将一个完成的 Slice 划分为不同的区域,分别封装到不同的独立 NAL 单元中,而这些区域有可能是相互关联的,依赖片引入有利于并行处理,尤其在解码端;
    ■ 可以将一段用于波前并行处理的 CTB 行数据或一个 Tile 打包到一个当独的 NAL 单元中,这样一个单元被称为一个依赖片;

h265 并行策略

  1. GOP 级并行
    ■ h265 中 GOP 级的并行是可行的,但因为 GOP 的数据量是庞大的,数据的存储频繁的读取读入都是非常耗时和资源的,此外延迟也非常大;

  2. 图像级并行
    ■ 在图像级数据结构中,由于运动预测的存在,不同的图像之间会有时域上的依赖性,但这种依赖并非不可避免,一个视频序列中通常包括 IPB 三种图像,I 帧、P 帧图像都有可能被参考,但 B 帧图像可以分为等级 B 帧,同等级的 B 帧图像就可以相互独立,做到并行;
    ■ 实现方式十分受限于B 图像的数量;

  3. Slice 级并行
    ■ h265 中 CABAC 在每个 Slice 的结尾都会对上下文模型进行更新,这就允许不同的 Slice 的熵编码部分并行进行;除了熵编码,不同的 Slice 数据也可以被送给不同运算单元不用考虑它们的相关性;
    ■ Slice 并行缺点明显,每幅图的 Slice 数量由编码器决定,解码端并行的数量是难以确定的;去方块滤波时候,有可能跨越 Slice 的边界,降低了并行的扩展性;造成负载失衡问题;可能造成码率成倍增加;
    在这里插入图片描述

  4. Tile 级并行
    ■ 熵解码和预测,不同的 Tile 数据是相互独立的,而且 CABAC 上街吗也会在每个 Tile 的结尾进行上下文模型的更新,有益于实现 Tile 并行;
    ■ 去方块滤波和样点自适应补偿有可能会跨越 Tile 边界进行,需要额外处理消除依赖性;
    ■ 缺点就是可能造成负载失衡、码率飙升的问题;

  5. CTB 级并行
    ■ 采用波前并行处理技术 WPP 算法来进行 CTB 级别的并行;
    ■ 缺点就是WPP 技术无法在熵解码部分实现,只能分别进行熵解码和并行处理,此外无法保证输出码率的稳定性;
    ■ 针对缺点,提出重叠波前并行的方法,来减少并行过程中由于线程数增加和减少所带来的并行效率的下降;但该算法的前提是运动矢量足够小,否则容易导致后幅图像解码时缺少参考信息;
    ■ 从数据结构上分析,可以实现Tile 和 CTB同时并行,但缺点放大,h265 中没有提出对应的方案。
    在这里插入图片描述

参考

  1. T-REC-H.265-202108-I.
  2. 新一代高效视频编码H.265HEVC原理、标准与实现 [万帅,杨付正 编著] 2014年版.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/800529.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聊聊STM32串口通讯的话题

STM32 微控制器系列提供了多个串口模块,用于实现串口通讯。其中,STM32HAL 库中的 UART 驱动模块提供了一套方便易用的函数接口,可以用来配置和操作串口。 串口通讯是一种常见的数据传输方式,可以实现微控制器与外部设备或其他微控…

Jetbrains 2023.2教程

IDEA 2023.2 激活演示 Pycharm 2023.2 激活演示 WebStorm 2023.2 激活演示 Clion 2023.2 激活演示 DataGrip 2023.2 PhpStorm 2023.1.4 激活演示(2023.2尚未发布) RubyMine 2023.2 激活演示 获取方式 仔细看每一个工具演示的图片 本文由 mdnice …

深度探索 Elasticsearch 8.X:function_score 参数解读与实战案例分析

在 Elasticsearch 中,function_score 可以让我们在查询的同时对搜索结果进行自定义评分。 function_score 提供了一系列的参数和函数让我们可以根据需求灵活地进行设置。 近期有同学反馈,function_score 的相关参数不好理解,本文将深入探讨 f…

2023软件设计师中级备考经验分享(文中有资料链接分享)

先摊结论吧,软考中级设计师备考只是备考半个月(期间还摆烂了几天),然而成绩如下: 我自己都没想到会这么好的成绩。。。 上午题:推荐把软考通APP里的历年真题刷3-4遍,直接刷真题,然后…

TimescaleDB多节点功能概述

如果您有更大的pb级工作负载,则可能需要多个TimescaleDB实例。TimescaleDB多节点允许您运行和管理数据库集群,这可以为您提供更快的数据摄取,以及对大型工作负载响应更快、更高效的查询。 多节点架构 多节点TimescaleDB允许您将多个数据库连…

【学习笔记】视频检测方法调研

目录 1 引言2 方法2.1 视频目标跟踪2.1.1 生成式模型方法2.1.2 判别式模型方法2.1.2.1 基于相关滤波跟踪2.1.2.2 基于深度学习跟踪 2.2 视频异常检测2.2.1 基于重构方法2.2.2 基于预测方法2.2.3 基于分类方法2.2.4 基于回归方法 2.3 深度伪造人脸视频检测2.3.1 基于RNN时空融合…

UG NX二次开发(C++)-利用UFun函数获取曲面上等参数的点

文章目录 1、前言2、叶片的三维模型3、利用UFun函数获取曲面的三种方法3.1 利用UF_Modl来实现3.2 利用UF_Point来实现3.2 利用UF_So来实现4、结果展示1、前言 在多轴加工过程中(尤其是薄壁零件),由于需要根据工件表面的几何信息以获取切触点,然后生成刀位轨迹,本文以叶片…

UEditor 百度富文本编辑器使用 遇到问题

小小吐槽 碰到前后不分离项目,富文本使用的UEdtior UEditor 点击上传图片转base64 在ueditor.all.js文件中找到这个 callback()函数 这里使用根据图片的url转成base64 UEditore 粘贴图片转base64 UEditor回显图片(base64) 把ueditor.all…

【Docker】制作Docker私有仓库

文章目录 1. 安装私有镜像仓库2. 镜像仓库可视化3. 参考资料 1. 安装私有镜像仓库 由于之后我们需要推送到私有镜像仓库,我们预先安装好,使用的是Docker公司开发的私有镜像仓库Registry。 下载Registry的Docker镜像; docker pull registry:2使…

【Django+Vue】英文成绩管理平台--20230727

项目需求 能够满足大部分核心需求(标绿):报表部分应该比较难。 项目地址 前端编译 https://gitlab.com/m7840/toeic_vue_dist Vue源码 https://gitlab.com/m7840/toeic_vue Django源码 https://gitlab.com/m7840/toeic_python 项目…

docker部署nextcloud+onlyoffice详细教程【外置MySQL】

一、部署环境 系统版本:CentOS Linux release 7.9.2009 (Core) 配置:16C 16G MySQL:5.7.20 二、部署过程 1、安装docker和docker-compose 请百度 2、创建数据库和用户,并授权 因为我使用外置MySQL,所以需要先创…

从零开始学Docker(一):Docker的安装部署

前述:本次学习与整理来至B站【Python开发_老6哥】老师分享的课程,有兴趣的小伙伴可以去加油啦,附链接 Linux 环境:RockyLinux 9 版本管理 Docker引擎主要有两个版本:企业版(EE)和社区版&#…

C语言爱心代码

代码&#xff1a; #include <stdio.h> int main() { int i, j, k, l, m; char c3; //ASCII码里面 3 就是一个字符小爱心 for (i1; i<5; i) printf("\n"); //开头空出5行 for (i1; i<3; i) { //前3行中间有空隙分开来写 for (j1; j<32-2*i; j) p…

计算机图形学十三加速结构

加速光线追踪 摘要 在上一节中&#xff0c;我们介绍了whited-style 光线追踪的原理&#xff0c;以及实现细节。相比与光栅化中所使用的blinn-phong模型&#xff0c;光线追踪显著提升了图像质量&#xff0c;但是随之而来的问题是渲染速度过慢。因为在判断光线与场景交点的时候…

面试典中典之线程池的七大参数

文章目录 一、七大元素解释1.corePoolSize&#xff08;核心线程数&#xff09;&#xff1a;2.maximumPoolSize&#xff08;最大线程数&#xff09;&#xff1a;3.keepAliveTime&#xff08;线程空闲时间&#xff09;&#xff1a;4.unit&#xff08;时间单位&#xff09;&#x…

MATLAB与ROS联合仿真(慕羽☆)全套开源资料索引

自2021年9月份开始进行MATLAB与ROS联合仿真相关的研究&#xff0c;至2021年12月份研究基本上结束&#xff0c;至今&#xff0c;已经近两年时间&#xff0c;期间曾收到过很多小伙伴的私信&#xff0c;想让我出点教程&#xff0c;期间我也曾多次想要抽点时间出教程&#xff0c;但…

地矿人专属的二次开发工具——地矿Web二次开发平台

工欲善其事必先利其器&#xff0c;随着互联网信息化时代的不断发展&#xff0c;信息系统和管理规范也越来越复杂&#xff0c;现有的软件产品功能会需要重新完善升级或更改&#xff0c;所以使用一套灵活应变可二次开发的软件产品是必不可少的&#xff0c;一款好的二次开发平台可…

【Apollo学习笔记】—— Routing模块

Routing模块功能 Apollo的routing模块读取高精地图原始信息&#xff0c;用于根据输入RoutingRequest信息在base_map中选取匹配最近的点作为导航轨迹的起点和终点&#xff0c;读取依据base_map生成的routing_map作为生成topo_graph的&#xff0c;然后通过Astar算法在拓扑图中搜…

Java中I/O流是什么?输入/输出流又是什么?

在 Java中所有数据都是使用流读写的。流是一组有序的数据序列&#xff0c;将数据从一个地方带到另一个地方。根据数据流向的不同&#xff0c;可以分为输入&#xff08;Input&#xff09;流和输出&#xff08;Output&#xff09;流两种。 在学习输入和输出流之前&#xff0c;我们…

监控和可观察性在 DevOps 中的作用!

在不断发展的DevOps世界中&#xff0c;深入了解系统行为、诊断问题和提高整体性能的能力是首要任务之一。监控和可观察性是促进这一过程的两个关键概念&#xff0c;为系统的健康状况和性能提供有价值的可见性。虽然这些术语经常互换使用&#xff0c;但它们代表了理解和管理复杂…