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

时间: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算法。在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电脑ffmpeg.dll丢失如何修复?3个详细修复的教程分享

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“ffmpeg.dll丢失”。ffmpeg.dll是FFmpeg多媒体框架中的一个重要组件&#xff0c;它负责处理音频和视频的编解码。当这个文件丢失或损坏时&#xff0c;可能会导致一些应用程序无法正常运行。…

2023年【G2电站锅炉司炉】报名考试及G2电站锅炉司炉考试资料

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 G2电站锅炉司炉报名考试根据新G2电站锅炉司炉考试大纲要求&#xff0c;安全生产模拟考试一点通将G2电站锅炉司炉模拟考试试题进行汇编&#xff0c;组成一套G2电站锅炉司炉全真模拟考试试题&#xff0c;学员可通过G2电…

如何有效利用餐厅预约小程序推广餐厅品牌

随着餐饮行业竞争的加剧&#xff0c;餐厅订座预约成为了吸引顾客的一种重要方式。而微信小程序作为移动互联网的重要入口之一&#xff0c;为餐厅提供了一个方便快捷的预约平台。本文将介绍如何使用乔拓云平台等第三方小程序制作平台来开发餐厅订座预约微信小程序。 首先&#x…

进程、容器与虚拟机的区别

进程、容器与虚拟机 参考&#xff1a;关于进程、容器与虚拟机的区别&#xff0c;你想知道的都在这&#xff01; 进程、容器与虚拟机的结构图 进程 介绍 进程是一个正在运行的程序&#xff0c;它是一个个可执行文件的实例。当一个可执行文件从硬盘加载到内存中的时候&#xf…

【FreeRTOS】FreeRTOS移植stm32详细步骤介绍

我在查找FreeRTOS移植的相关教程特别少&#xff0c;所以想非常详细的介绍FreeRTOS移植stm32详细步骤&#xff0c;包括源码的下载&#xff0c;源码介绍&#xff0c;系统移植&#xff0c;代码验证等&#xff0c;每一步都有对应的介绍和解释&#xff0c;希望可以帮助到你们。 文章…

1. mycat入门

1、mycat介绍 Mycat 是一个开源的分布式数据库系统&#xff0c;但是由于真正的数据库需要存储引擎&#xff0c;而 Mycat 并没有存 储引擎&#xff0c;所以并不是完全意义的分布式数据库系统。MyCat是目前最流行的基于Java语言编写的数据库中间件&#xff0c;也可以理解为是数据…

Firmware Analysis Plus (Fap)固件模拟安装教程(最新)

最近在搞IoT的研究&#xff0c;但是难在设备比较难弄&#xff0c;只有固件&#xff0c;而没有设备&#xff0c;买吧&#xff0c;又太费钱&#xff0c;不划算。好在有很多项目可以在模拟环境中运行固件。但是几乎没有一个平台能够模拟所有硬件设备。IoT产品的架构也不尽相同。 …

C++初学教程四

一、程序设计 程序设计的三种基本结构:顺序、选择、循环 选择结构(也叫分支结构) :判断所指定的条件是否满足&#xff0c;决定从给定的两组或多组操作选择其中的一种。 计算机的判断是通过对表达式的计算来实现&#xff0c;也就是关系运算、逻辑运算。 用语句来体现就是if语…

53 代码审计-TP5框架及无框架变量覆盖反序列化

目录 演示案例:Metinfo-无框架-变量覆盖-自动审计或搜索phpmyadmin-无框架-反序列化-自动审计或搜索Thinkphp5-有框架-搭建使用入口访问调试SQL等 演示案例: Metinfo-无框架-变量覆盖-自动审计或搜索 变量覆盖会直接覆盖原始变量&#xff0c;来形成新的变量值 搜索关键字或者…

IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Spring IOC底层实现

第一章 SpringIOC底层实现 IOC&#xff1a;将对象的控制器反转给Spring 1.1 BeanFactory与ApplicationContexet BeanFactory&#xff1a;IOC容器的基本实现&#xff0c;是Spring内部的使用接口&#xff0c;是面向Spring本身的&#xff0c;不是提供给开发人员使用的。****Appli…

APP自动化测试工具大全

一、UI自动化测试工具 1. uiautomator2 openatx开源的ui自动化工具&#xff0c;支持Android和iOS。主要面向的编程语言是Python&#xff0c;API设计简洁易用&#xff0c;在开源社区也是很受欢迎。 安装&#xff1a; pip install --upgrade --pre uiautomator2# Or you can …

IO / day07 作业

1. 使用消息队列完成两个进程之间相互通信 代码 #include <myhead.h>//define a msg struct type struct msgbuf {long mtype; //消息类型char mtext[1024]; //消息正文大小};//macro msg size #define SIZE (sizeof(struct msgbuf)-sizeof(long))int recv(int mtype_r…

Vue学习计划-Vue2--VueCLi(三)ref属性、mixins混入、插件、scoped样式

1. ref属性 被用来给元素或子组件注册引用信息&#xff08;id的替代者&#xff09;应用在html标签上获取的是真实DOM元素&#xff0c;应用在组件标签上是组件实例对象&#xff08;VC&#xff08;VueComponent&#xff09;&#xff09;使用方式&#xff1a; 打标识<h1 ref&q…

火山引擎边缘计算用硬核助力赛事直播

经过一个多月激烈争夺&#xff0c;2023英雄联盟全球总决赛终于在11月19日落下帷幕。精彩的对决和高热话题使得直播平台观赛人数暴增&#xff0c;给直播平台稳定性和资源储备提出了巨大的考验。

macosx dbeaver执行脚本报错提示:还没有设置连接地址

1.原因 因为你本地没有安装MySql Client所以按照网上其他操作办法你找不到MySql的客户端&#xff0c;因此配置客户端的时候自然就找不到对应的文件. 2.解决办法 参考DBeaver提供的解决办法&#xff1a; https://dbeaver.com/docs/dbeaver/Local-Client-Configuration/#local…

【复杂网络建模】——基于Graph Convolutional Networks (GCN)进行链接预测

目录 一、复杂网络建模 二、图嵌入方法&#xff08;Graph Convolutional Networks (GCN) &#xff09; 1. 图表示&#xff1a; 2. 邻接矩阵&#xff08;Adjacency Matrix&#xff09;&#xff1a; 3. 图卷积层&#xff08;Graph Convolutional Layer&#xff09;&#xff…

docker的资源控制:

docker的资源控制&#xff1a; 对容器的使用宿主机的资源进行限制 cpu 内存 磁盘i/0 docker使用linux自带的功能cgroup control grouos是linux内核系统提供的一种可以限制&#xff0c;记录&#xff0c;隔离进程所使用的物理资源 control grouos是linux内核系统提供的一种可…

【动态规划】03斐波那契数列模型_最小花费爬楼梯_C++(easy1)

题目链接&#xff1a;leetcode使用最小花费爬楼梯 目录 题目解析&#xff1a; 算法原理 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码 题目解析&#xff1a; 题目让我们求达到楼梯顶部的最低花费. 由题可得&#xff1a; cost[i] 是从楼梯第 i 个…

【LeetCode刷题-树】--113.路径总和II

113.路径总和II 方法一&#xff1a;深度优先搜素 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeN…

语音识别功能测试:90%问题,可以通过技术解决

现在市面上的智能电子产品千千万&#xff0c;为了达到人们使用更加方便的目的&#xff0c;很多智能产品都开发了语音识别功能&#xff0c;用来语音唤醒进行交互&#xff1b;另外&#xff0c;各大公司也开发出来了各种智能语音机器人&#xff0c;比如小米公司的“小爱”&#xf…