【论文解读】Accelerating motion estimation by genetic algorithm approach in x265

news2024/12/23 2:31:29

时间:2018
级别:SCI
机构:College of Engineering Pune
摘要:
在过去 20 年,在视频编码和压缩领域,研究人员提出了几种减少运动估计的计算量和时间的技术,本文提出了一种基于遗传算法初始种群确定的x265视频编解码器运动估计算法。遗传算法因其自适应收敛而闻名,这是由生物的适者生存过程激发的。

该方案的目标是减少B帧和P帧的整数像素块匹配运动估计算法中的搜索点(SP),该算法设置为三个参考帧。该方法构成的初始种群是视频帧不同时空位置的预编码编码单元和预定义的六边形(HEX)位置的函数。本文提出一种"确定性开始" GA (GADet),以x265结构部署。在x265代码的框架下,GADet在考虑进行实验的选定视频类别中提供了SP的减少。

为了验证所提算法的有效性,将实验结果与参考软件中基于块的快速全搜索算法和十六进制搜索算法进行了比较。采用随机构成初始种群的传统遗传算法(标记为GAStc),并与GADet进行了实证比较。所提出的GADet框架减少了运动估计时间,同时提供了可接受的峰值信噪比损失和比特率的增加。

介绍:
HEVC 相比 h264,相同 PSNR 可以实现码率节省 50% 以上;作为符合 HEVC 标准的开源编码器,x265 旨在快速、高效的HEVC 编码,具体的编码细节和文献可以在 x265 的网址上找到。
运动估计(和补偿)是关键的一步,特别是在互编码中,为视频序列的一帧中的每个运动对象计算运动矢量(MVs),从而得到残差帧。因此,自适应码率在保证视频质量的前提下运动估计起着至关重要的作用。

典型的块匹配运动估计算法(BMME)是视频标准中推荐的算法。
关于 BMME,关于BMME,研究报告了许多次优算法,如非对称六边形(HEX)搜索,增强预测带状搜索,六边形搜索,菱形搜索等,以及它们的变种也被发现由于特定的搜索模式和步长而表现不佳。

另一种流行的运动估计算法是测试区域搜索(test zone search, TZ)算法,在H.264和HEVC中都采用了该算法。Purnachand等人指出,由于TZ算法结合了各种正方形和菱形搜索模式,搜索时间较长,建议使用六边形搜索模式对TZ算法进行优化。

HEX算法具有SP约简和接近圆形图案的特性,因此HEX算法已经被选择在实际工作中。
在探索运动估计的自适应选项时,研究较少的遗传算法(genetic algorithm, GA)因其在每一代中的自适应能力而被认为是一种很有前途的解决方案。

正如所参考的文献,由于其预先决定的组织模式,如菱形、六边形和方形,BMME被发现对SP进行了限制。由于这种固定的模式,BMME算法的性能是次优的。
提出一种适用于HEVC框架的确定性GA运动估计方法。GAStc和GADet在HEVC的编码效率和复杂度进行了比较。同时快速全搜索和六边形搜索算法也被加入对比,并将所提出的GADet算法与传统方法进行了比较。

HEVC 的 AMVP 和 HEX运动估计算法

在任何搜索算法中,起始点都是开始搜索的关键。简要回顾了用于块编码的四叉树结构、HEVC中的AMVP算法和HEX ME算法,为本文提出的搜索算法奠定了基础。

块预测的四叉树结构:每幅图像被分成 CTB,CTB 进一步分成 CB 和相应的 CU,每个 CU 由PU 和 TU 组成。
AMVP:帧内预测支持 33 种角度、DC、Planar,每个 CU 的帧间预测有“inter、Merge、skip”被选择,Merge和skip指定了用于Merge的索引,从而减少了比特流的信令负担。对于帧间模式,AMVP从由空间或时间预测器组成的候选列表中预测MV,对每个预测块更新List0和List1,并向解码器发出信号。
HEX ME算法:在运动估计中,寻找匹配块的目标函数可以用块中像素的强度值表示;全搜索算法在特定的窗口内搜索参考帧的所有可能块;全搜索算法的搜索结果可以作为ME 算法的比较基准。许多快速算法被提出,如方形、菱形、HEX 等。其中 HEX 具有较好的编码性能,被当做默认搜索算法,具体过程如下图。
在这里插入图片描述

基于基因的ME算法的背景和介绍

遗传算法是基于自然选择理论在每一代中产生随机解。为了确定近似最优解,需要进行交叉、变异等操作。遗传算法(GA)因其快速收敛性和在搜索空间中产生多样性群体的能力而得到广泛应用。
术语和建议参数:
Genotype:基因型
MV 可以表示为 MV(x, y),它的二进制编码可以表示为如下,s 是genotype ,xi、yi 可能是 0 或 1,n 是 8。(xi, yi )组合表示搜索空间的SP 候选。
在这里插入图片描述z = (log2SRmax),其中SRmax是W/2,是搜索范围的限制参数;因此,z总是小于n,因为z表示MV以二进制形式实际需要的比特数。
genotype代表在搜索空间里的 MV;
对 x265 代码进行修改,搜索空间/窗口被设置成 64x64。搜索范围参数被设置为“log2SearchRange”。
本文,z 被设置为 5,为了避免交叉/变异操作跨越搜索范围的边界,n 为 8。
Initial populations :初始种群
它是一组以基因型为特征的个体。较大的种群规模增加了在几个周期内收敛的可能性。另一方面,这增加了计算的数量。为了平衡编码需求,在这个实现中根据经验选择数组的大小为10。
fitness function:适应度函数
适应度函数量化了与最优解的接近程度,在父代选择中起着关键作用。根据进化法则,“适者生存”将成为下一代的父母。一些研究人员将一个或多个父母包括在下一代数组中。一些基于范数的准则如下,当范数p为2时,通过最小化当前帧和参考帧块之间的欧氏距离来进行块匹配。
在这里插入图片描述
匹配准则用 SSD 来衡量,如下。
在这里插入图片描述
然而,SSD算法也存在不足,例如需要对每个像素进行p * q次乘法运算,如果块中有像素被噪声污染,则会因平方运算而导致误差增大。为了缓解这个问题,我们可以使用SAD,它类似于平均绝对误差:
在这里插入图片描述
此外,在文献中提出了结构相似度指标(SSI),由于SSI和SSD对计算复杂度的要求较高,使用SAD作为适应度函数。最小的SAD表示与参考帧的CU接近。因此,每个染色体的SAD被用作选择的排序基础。最适合的父母将成为交配池的一部分,被选中的父母将进行交叉/变异操作。

Operations on genotypes:基因型运算
个体选择:
这种选择有不同的方法,如随机选择,锦标赛选择,轮盘赌轮盘选择,根据回顾的文献。通过轮盘赌的方法选择最适合的父代,增加了选择SAD最小的父代的可能性。在这一过程中作出贡献的父母总数被称为选择压力。如果选择压力过低,收敛速度也会降低。然而,如果该值过高,将会在基因库中选择更多适合的亲本,从而增加陷入局部最小值的可能性。一旦产生初始种群,就对选择的亲本进行遗传操作,即交叉和变异,产生下一代。

交叉crossover:
在交叉操作中,来自染色体的基因在最适合的亲本之间交换。交叉和变异的样本操作如图2所示。这种重组使算法能够探索更多目标为全局最小值的SP。在最后一个比特位置和它的优先位置进行交叉,既能防止跨越搜索范围边界的随机化,又能保证在同一象限产生SP。当搜索范围为64 × 64时,基因载体的大小根据搜索范围的不同而发生相应的变化。

变异mutation:
它的主要功能是搜索空间中的“未知方向”。因此,该基因中的任何一条染色体都可以进行学术翻转,如图2的下部所示。一般来说,在遗传算法中,变异的概率非常低。在我们的工作中,每隔第五代,就会发生两个突变,即突变概率为0.04。建议在位置x和y坐标的最重要位置进行突变。
在这里插入图片描述
Termination criteria:终止准则
更早地终止搜索可以节省时间,也减少了搜索算法中的计算次数。迭代次数多会增加计算复杂度,而迭代次数少可能不会导致解的收敛。决定将最大迭代次数限制为10次,这是启发式选择的。其他终止准则SAD为15,与x265参考代码中使用的HEX算法相同。

GAStc和GADet 算法

GAStc是传统的基因算法,GADet是本文提出的确定起始点基因算法。
对于ME上下文,初始种群是在搜索区域内从视频前一参考帧确定生成的十二个SP。
对于GADet,初始种群如下图,
● (a)所示为当前CU位置周围8个SP的HEX种群。考虑到水平方向运动的概率较大,HEX有6个点在水平方向,2个点在垂直方向。
● (b)所示的时空预测器对先前CU的四个预测MVs。它们分别是空间近邻CU的均值MV,同位CU在参考帧的均值MV,零位表示前一帧坐标相同的位置,最后一个是时间候选CU的均值。
在这里插入图片描述
AMVP算法中4个候选时空序列的贡献图如图3(b)所示。
● 左候选(A0 或 A1,任意先来的一个)
● 上候选(B0、B1、B2,任意先来一个)
● 时域下右TBR和时域相同位置 TCT
在 GADet 中使用的参数如图 4,总结如下:

  1. 初始种群选择基于 HEX 的 SP 和时空预测器
  2. SAD 被用作适应度函数
  3. 配对池的选择采用轮盘赌法
  4. 对于64 × 64的搜索范围,最后两位选择交叉
  5. 每5个周期后进行变异
  6. 终止是在10个周期后或SAD < 15
    在这里插入图片描述
    GA~Det~算法的执行:
    step1:初始化
    ● Search_range = 64,产生坐标coordinates的搜索范围尺寸
    generations = 10; 遗传算法中的代的数量
    ● populationi,j = [0, 0],用于GA的种群数组,分别存储x和y,其中 i = 1,2…12,j = 1, 2
    ● coordinatesk,l = [0, 0]
    repeat = false, 检查每代重复后计算cost值的最终坐标,其中 k = 1,2…12,l = 1, 2
    ● probn = 0
    cdfm(probn )= 0,根据轮盘赌找到每个候选的概率,其中 n,m = 1,2…12
    ● sadcost = 0
    sum = 0
    bcost = 15;适应度函数,如果新的SAD和当前的SAD之间的差是15,那么新的MV坐标将被更新为最佳MV
    ● Final_populationp,q = [0, 0],最终选择进行交配的种群, p = 1,2…12,q = 1, 2
    step2:确定性方法的编码
    ● populationi,j = 初始种群生成来自 AMVP 和 HEX 坐标生成的数组
    ● coordinatesk,l = 检查populationp,q 矩阵是否有重复元素,并相应的修改 repeat 标志,生成不包括重复 SP 的coordinatesk,l 数组
    step3:适应度函数值计算
    ● “COST MV X4 DIR” 函数计算 cost代价值,"COPY 1 IF LT"函数比较sadcost~k, l~的cost 代价
    step4:计算代价值的概率和累积分布函数
    ● sum = sum + sadcostk,l所有 SAD 值的求和
    ● 轮盘赌的概率计算:
    在这里插入图片描述
    ● 根据概率值对coordinatesk,l进行排序

step5:新种群的一代
● 根据轮盘赌中的值更新Final_populationp,q我们为下一代选择最适合的坐标,称为交配池
● 如果generations < 5,执行交叉操作,否则,如果generations = 5,执行变异操作
step6:终止
● 如果上一次迭代的最小SAD与当前最小SAD之差<它们平均值的0.1%;转到第二步。否则如果迭代次数<10; 转到步骤2
● 更新sadcost的值,然后转到子像素 ME
GAStc算法的编码:
在 step 1 中使用 c++库函数 rand()来初始化
populationi,j = rand(),其中 i = 1,2…12,j = 1, 2
其余跟GADet相似。

由于在实验中GA是应用于PU级的,因此终止准则足以处理PU级的收敛。然而,为了进一步评估平均性能,重复实验以测试其收敛性,使最终PSNR的变化小于前10次迭代的平均值的1%(这表明接近全局最小值)。下一节将给出ME时间需求、每帧SP、BD-PSNR和BD-rate的平均结果以及它们的分析。

实验结果

测试条件:x265-1.7、CMAKE-3.5.8、YASM-1.2.0
编码参数:QP{22、27、32、37}、profile=main、leve=4.1、keyint=250、maxcusize = 64
实验设备: Ubuntu 12.04 、i5-3210 2.5GHz、4G RAM
结论:GADet技术采用确定性方法,使用AMVP减少了搜索范围内SP的数量。与传统的随机遗传算法相比,重用已有的AMVP可以减少算法初始种群的计算量。实验结果表明,对于整个测试视频集,该算法比六边形算法和随机遗传算法(GAStc)的速度更快。对于所有的视频序列,SP的节省是该算法的一个关键特点。在使用GADet的情况下,相比较全搜索算法,总的ME模块时间节省了83%到98%。在BD-rate增加11.245%的情况下,平均BD-PSNR损失为0.9%,在视频编码可接受范围内;与其形成对比的HEX的 BD-rate 增加53.889%,平均 BD-PSNR 损失1.285%,随机遗传算法(GAStc)的 BD-rate 增加194.794%,平均 BD-PSNR 损失2.11%。对于ME算法,GADet算法的编码效率也优于HEX算法和GAStc算法。在这里插入图片描述

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

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

相关文章

一篇文章带你全面了解Web UI自动化测试之元素定位

前言 目前&#xff0c;在自动化测试的实际应用中&#xff0c;接口自动化测试被广泛使用&#xff0c;但UI自动化测试也并不会被替代。让我们看看二者的对比&#xff1a; 接口自动化测试是跳过前端界面直接对服务端的测试&#xff0c;执行效率和覆盖率更高&#xff0c;维护成本…

小程序一键生成工具哪个好?

在这个数字化时代&#xff0c;小程序已经成为商家吸引客户、提升业务的重要工具。但是&#xff0c;传统的小程序开发方式既费时又费力&#xff0c;让许多商家望而却步。 现在&#xff0c;有了乔拓云小程序模板开发平台&#xff0c;一切都变了。 乔拓云提供了大量精心设计的模板…

[FPGA 学习记录] 数码管动态显示

数码管动态显示 文章目录 1 理论学习1.1 数码管动态扫描显示原理 2 实战演练2.1 实验目标2.2 程序设计2.2.1 框图绘制2.2.2 数据生成模块 data_gen2.2.2.1 波形绘制2.2.2.2 代码编写2.2.2.3 代码编译2.2.2.4 逻辑仿真2.2.2.4.1 仿真代码编写2.2.2.4.2 仿真代码编译2.2.2.4.3 波…

【快速应用开发】看看RedwoodJS

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…

<JavaEE> 经典设计模式之 -- 单例模式(“饿汉模式”和“懒汉模式”实现单例模式)

目录 一、单例模式概述 二、“饿汉模式”实现单例模式 三、“懒汉模式”实现单例模式 3.1 单线程下的“懒汉模式” 3.2 多线程下的“懒汉模式” 一、单例模式概述 1&#xff09;什么是单例模式&#xff1f; 单例模式是一种设计模式。 单例模式可以保证某个类在程序中只存…

.9.png的创建

1、创建.9.png 选中图片&#xff0c;右击&#xff0c;选择Create 9-Patch file&#xff0c;点击确定会生成一个xxx.9.png的图片 2、绘制拉伸区域 在图片的最外边界绘制拉伸区域&#xff0c;按住鼠标左键不放&#xff0c;绘制完成后保存就可以使用了。绘制结果示意如下&…

Numpy数组中数据的排序【sort(),argsort()与 lexsort()】 (第13讲)

Numpy数组中数据的排序【sort(),argsort()与 lexsort()】 (第13讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔…

2.Feign使用、上下文隔离及源码阅读

目录 概述使用配置pom.xmlfeign 接口编写controller 测试降级处理pom.xmlapplication.yml代码 Feign如何初始化及调用源码阅读初始化调用 feign的上下文隔离机制源码 结束 概述 阅读此文&#xff0c;可以知晓 feign 使用、上下文隔离及源码阅读。源码涉及两方面&#xff1a;fe…

在做题中学习(31):电话号码的字母组合(全排列)

17. 电话号码的字母组合 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;既然要排列组合&#xff0c;就得先根据数字字符取出来 所以先定义一个string类的数组通过下标取到每个数字对应的映射。 string _numsTostr[10]{"","","abc"…

2023.12.3 关于 Spring Boot 拦截器 和 过滤器

目录 引言 Spring 拦截器实现 实例理解 Spring 过滤器实现 实例理解 拦截器和过滤器的区别 出身不同 触发时机不同 底层实现不同 支持的项目类型不同 使用场景不同 引言 原生 Spring AOP 实现统一拦截有两个难点难点一&#xff1a;定义拦截规则表达式 难点二&#…

用提问的方式来学习:冯·诺伊曼体系结构与操作系统OS

学习冯诺伊曼体系结构之前&#xff0c;我们要本着两个问题来学习&#xff1a; 什么是冯诺伊曼体系结构&#xff1f;为什么要有冯诺伊曼体系结构&#xff1f; 一、冯诺伊曼体系结构 1. 什么是冯诺伊曼体系结构&#xff1f; 那我们就先来回答一下什么是冯诺伊曼体系结构&#x…

VMALL 商城系统

SpringBoot MySQL Vue等技术实现 技术栈 核心框架&#xff1a;SpringBoot 持久层框架&#xff1a;MyBatis 模板框架&#xff1a;Vue 数据库&#xff1a;MySQL 阿里云短信&#xff0c;对象存储OSS 项目包含源码和数据库文件。 效果图如下&#xff1a;

奥特曼被指爱权力胜过金钱;人类才是「幻觉问题」根本原因丨 RTE 开发者日报 Vol.103

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有…

【网络编程】-- 05 UDP进阶之在线聊天

网络编程 6 UDP 6.2.2 UDP聊天实现 “循环实现消息的发送和接收” 接收端只能接收到消息而无法反馈交流 接收&#xff1a; package com.duo.chat;import java.net.DatagramPacket; import java.net.DatagramSocket;public class UdpReceiveDemo1 {public static void mai…

12月11日作业

完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示登录成功&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密码不匹配&#xff0c;弹…

【flink番外篇】1、flink的23种常用算子介绍及详细示例(完整版)

Flink 系列文章 一、Flink 专栏 Flink 专栏系统介绍某一知识点&#xff0c;并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分&#xff0c;比如术语、架构、编程模型、编程指南、基本的…

宝塔PostgreSQL设置数据库远程访问

宝塔PostgreSQL设置数据库远程访问 宝塔的PostgreSQL1. 添加数据库2. 打开PostgreSQL设置界面3. 修改配置4. 重载配置/重启数据库 Docker的PostgreSQL1. postgresql.conf2. pg_hba.conf3. 重启数据库 注意其他问题 宝塔PostgreSQL设置数据库远程访问&#xff1f;docker容器Post…

这样的Python自动化测试面试题,测开来了都不一定都会把!

十、接口自动化 10.1 接口自动化怎么测试 ( Python requestspytest 版本) 原来我们接口自动化是用 python request pytest 执行 接口自动化其实主要就是接口测试的基础上填加了断言&#xff0c;参数化&#xff0c;动态关联 做接口自动化之前&#xff0c;我们也会划分模块&#…

Java毕业设计 SSM SpringBoot 在线学习系统

Java毕业设计 SSM SpringBoot 在线学习系统 SSM SpringBoot 在线学习系统 功能介绍 首页 图片轮播 视频推荐 在线学习 学习介绍 评论 收藏 资料中心 资料详情 下载资料 话题讨论 文档发布 试题中心 系统公告 登录 注册学生 个人中心 试题记录 错题本 我的收藏 算法演示 结果分…

智能优化算法应用:基于蝴蝶算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于蝴蝶算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于蝴蝶算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蝴蝶算法4.实验参数设定5.算法结果6.参考文献7.MA…