cutree 算法

2023-09-19 11:13:08

传播

​ 由于块与块之间具有参考关系,提升被参考块的质量,可以改善后续参考块的质量

在这里插入图片描述

​ Pn+1帧中CU0,1完全参考Pn的CU1,1。且Pn+1帧中CU0,1块帧内预测和帧间预测的代价分别为 c x , y n + 1 ( 0 , 0 ) c_{x,y}^{n+1}(0,0) cx,yn+1(0,0) c x , y n + 1 ( d 0 , d 1 ) c_{x,y}^{n+1}(d0,d1) cx,yn+1(d0,d1),其中x,y表示这里CU的坐标,也就是(x,y)=(0,1),为了一般性,所以用x,y表示。

​ 如果 c x , y n + 1 ( 0 , 0 ) c_{x,y}^{n+1}(0,0) cx,yn+1(0,0) c x , y n + 1 ( d 0 , d 1 ) c_{x,y}^{n+1}(d0,d1) cx,yn+1(d0,d1)相差不大,说明Pn+1帧中CU0,1块从Pn的CU1,1获取的信息很少;如果 c x , y n + 1 ( 0 , 1 ) c_{x,y}^{n+1}(0,1) cx,yn+1(0,1) c x , y n + 1 ( d 0 , d 1 ) c_{x,y}^{n+1}(d0,d1) cx,yn+1(d0,d1)小很多说明Pn+1帧中CU0,1块的大部分信息都可以从Pn的CU1,1块获得,极端情况,如果 c d 0 , d 1 n + 1 c_{d0,d1}^{n+1} cd0,d1n+1为0,说明说明Pn+1帧中CU0,1块的全部信息都可以从Pn的CU1,1块获得。因此可以简单地用 p c x , y n + 1 = c x , y n + 1 ( 0 , 0 ) − c x , y n + 1 ( d 0 , d 1 ) pc_{x,y}^{n+1}=c_{x,y}^{n+1}(0,0)-c_{x,y}^{n+1}(d0,d1) pcx,yn+1=cx,yn+1(0,0)cx,yn+1(d0,d1)表示Pn+1帧中CU0,1块从Pn的CU1,1继承的信息。

​ 由于Pn+1帧中CUx,y块编码参数选择不同,会导致 p c x , y n + 1 = c x , y n + 1 ( 0 , 0 ) − c x , y n + 1 ( d 0 , d 1 ) pc_{x,y}^{n+1}=c_{x,y}^{n+1}(0,0)-c_{x,y}^{n+1}(d0,d1) pcx,yn+1=cx,yn+1(0,0)cx,yn+1(d0,d1)的使用率不同,因此 p f x , y n + 1 = c x , y n + 1 ( 0 , 0 ) − c x , y n + 1 ( d 0 , d 1 ) c x , y n + 1 ( 0 , 0 ) pf_{x,y}^{n+1}=\frac{c_{x,y}^{n+1}(0,0)-c_{x,y}^{n+1}(d0,d1)}{c_{x,y}^{n+1}(0,0)} pfx,yn+1=cx,yn+1(0,0)cx,yn+1(0,0)cx,yn+1(d0,d1)表示Pn+1帧中CU0,1块反向传播给Pn的CU1,1块的传播率,或者说是Pn+1帧对Pn帧中CU1,1块的继承信息的利用率,也就是Pn+1帧CUx,y选择不同参数时,对 p c x , y n + 1 = c x , y n + 1 ( 0 , 0 ) − c x , y n + 1 ( d 0 , d 1 ) pc_{x,y}^{n+1}=c_{x,y}^{n+1}(0,0)-c_{x,y}^{n+1}(d0,d1) pcx,yn+1=cx,yn+1(0,0)cx,yn+1(d0,d1)的使用率。

​ Pn+1帧中CU0,1块的传播给Pn的CU1,1块的总信息 p a x , y n + 1 = p c x , y n + 1 + p f x , y n + 1 ⋅ p i x , y n + 1 pa_{x,y}^{n+1}=pc_{x,y}^{n+1}+pf_{x,y}^{n+1} \cdot pi_{x,y}^{n+1} pax,yn+1=pcx,yn+1+pfx,yn+1pix,yn+1所有参考Pn帧CU1,1块的CU块,反向传播给它的信息量为 p i x , y n = p a x 1 , y 1 n 1 ⋅ w 1 + p a x 2 , y 2 n 2 ⋅ w 2 + p a x 3 , y 3 n 3 ⋅ w 3 + . . . pi_{x,y}^{n}=pa_{x1,y1}^{n1} \cdot w1 + pa_{x2,y2}^{n2} \cdot w2 + pa_{x3,y3}^{n3} \cdot w3 + ... pix,yn=pax1,y1n1w1+pax2,y2n2w2+pax3,y3n3w3+...,其中w表示权重,也就是区域的重叠面积,针对上图中 p i 1 , 1 n = p a 1 , 0 n + 1 ⋅ 1 + p a 1 , 1 n + 1 ⋅ 1 pi_{1,1}^{n}=pa_{1,0}^{n+1} \cdot 1 + pa_{1,1}^{n+1} \cdot 1 pi1,1n=pa1,0n+11+pa1,1n+11

​ 在x265中使用estimateCUPropagate函数计算 p a x , y n pa_{x,y}^{n} pax,yn:

p a x , y n = p c x , y n + p f x , y n ⋅ p i x , y n = ( c x , y n ( 0 , 0 ) + p i x , y n ) ⋅ c x , y n ( 0 , 0 ) − c x , y n ( d 0 , d 1 ) c x , y n ( 0 , 0 ) = ( c x , y n ( 0 , 0 ) + p i x , y n ) ⋅ p f x , y n \begin{align} pa_{x,y}^{n}&=pc_{x,y}^{n}+pf_{x,y}^{n} \cdot pi_{x,y}^{n} \\ &=(c_{x,y}^{n}(0,0) + pi_{x,y}^{n}) \cdot \frac{c_{x,y}^{n}(0,0)-c_{x,y}^{n}(d0,d1)}{c_{x,y}^{n}(0,0)} \\ &= (c_{x,y}^{n}(0,0) + pi_{x,y}^{n}) \cdot pf_{x,y}^{n} \end{align} pax,yn=pcx,yn+pfx,ynpix,yn=(cx,yn(0,0)+pix,yn)cx,yn(0,0)cx,yn(0,0)cx,yn(d0,d1)=(cx,yn(0,0)+pix,yn)pfx,yn

  • 上述考虑了只有cutree时,信息量的传播,还需要做两个细微的修正:AQ将各个MB都进行了微调,那么那些被调整的更清晰的MB(QP减小)和变得更模糊的MB(QP变大)也需要进行修正 i n v q s c a l e = 1 a q o f f s e t s t e p inv_qscale=\frac{1}{aq_offset_step} invqscale=aqoffsetstep1

  • 在可变帧率条件下,需要根据播放时长进行修正, f p s f a c t o r = 当前帧播放时长 平均一帧播放时长 fps_factor=\frac{当前帧播放时长}{平均一帧播放时长} fpsfactor=平均一帧播放时长当前帧播放时长

  • 如下图,中间的B帧同时从前向的P0帧和后向的P1帧都继承了信息,需要按照距离修正传播的cost大小, d i s t a n c e r a t i o = b − p 0 p 1 − p 0 distance_ratio=\frac{b-p0}{p1-p0} distanceratio=p1p0bp0

经过以上三个修正,最终结果如下:
在这里插入图片描述

p a x , y n = ( p c x , y n ⋅ i n v _ q s c a l e ⋅ f p s _ f a c t o r + p f x , y n ⋅ p i x , y n ) ⋅ d i s t a n c e _ r a t i o = ( c x , y n ( 0 , 0 ) ⋅ i n v _ q s c a l e ⋅ f p s _ f a c t o r + p i x , y n ) ⋅ p f x , y n ⋅ d i s t a n c e r a t i o \begin{align} pa_{x,y}^{n}&=(pc_{x,y}^{n}\cdot inv\_qscale\cdot fps\_factor+pf_{x,y}^{n} \cdot pi_{x,y}^{n})\cdot distance\_ratio \\ &= (c_{x,y}^{n}(0,0) \cdot inv\_qscale \cdot fps\_factor+ pi_{x,y}^{n}) \cdot pf_{x,y}^{n} \cdot distance_ratio \end{align} pax,yn=(pcx,yninv_qscalefps_factor+pfx,ynpix,yn)distance_ratio=(cx,yn(0,0)inv_qscalefps_factor+pix,yn)pfx,yndistanceratio

​ 以上计算得到的 p a x , y n pa_{x,y}^{n} pax,yn需要根据mv传递到第Pn-1帧,作为对应块的pi值,根据重叠区域面积将其分配到各个块,如上图会根据s1,s2,s3和s4所占面积的比例将 p a 1 , 1 n pa_{1,1}^{n} pa1,1n分配到CU00,CU01,CU10和CU11;同时 p a 2 , 1 n pa_{2,1}^{n} pa2,1n分配到CU10,CU11,CU20和CU21;其中 p a 1 , 1 n pa_{1,1}^{n} pa1,1n p a 2 , 1 n pa_{2,1}^{n} pa2,1n都会分配一部分到CU10和CU11,只需要将其叠加即可。

计算 Δ \Delta Δ QP

​ 首先将信息分为两类:第一是继承信息,也就是当前块从参考帧获得的信息,参考帧已经编码完成的情况下,通过同一个参考帧和同一个MV获得的参考块也就固定了,得到的信息也就固定了,并不会因为当前块选择不同的编码参数而发生改变;第二是自身产生的信息,从参考块获取了信息之后,当前块会用不同的编码参数,比如QP,merge,skip,AMVP等模式,编码参数不同时,自身产生的信息也就不同。

​ 继续考虑Pn的CU1,1块,当改变当前块的QP时(也就是增加一个 delta QP), c x , y n + 1 ( 0 , 0 ) c_{x,y}^{n+1}(0,0) cx,yn+1(0,0) c x , y n + 1 ( d 0 , d 1 ) c_{x,y}^{n+1}(d0,d1) cx,yn+1(d0,d1) p i x , y n pi_{x,y}{n} pix,yn都会发生变化,因为他们都包含了自身产生的信息。但是 c x , y n + 1 ( 0 , 0 ) − c_{x,y}^{n+1}(0,0)- cx,yn+1(0,0)c_{x,y}^{n+1}(d0,d1)$不会发生变化,因为他是继承的信息。可以这么来考虑,QP的改变导致残差量化结果发生变化,影响的是当前块预测后的结果,在计算失真的时候还有一个参考块,该参考块是通过MV在参考帧获得的,这个时候参考块已经编码完成,并不会因为当前块QP的改变而发生变化。

​ 当前块的QP发生变化时,后续参考该块的CU都会发生变化,也就是 p i x , y n pi_{x,y}^{n} pix,yn也会因为delta QP而产生影响,但是只有新产生的那部分信息 c x , y n ( d 0 , d 1 ) c x , y n ( 0 , 0 ) \frac{c_{x,y}^{n}(d0,d1)}{c_{x,y}^{n}(0,0)} cx,yn(0,0)cx,yn(d0,d1)受影响, ( 1 − c x , y n ( d 0 , d 1 ) c x , y n ( 0 , 0 ) ) ⋅ p i x , y n (1-\frac{c_{x,y}^{n}(d0,d1)}{c_{x,y}^{n}(0,0)}) \cdot pi_{x,y}^{n} (1cx,yn(0,0)cx,yn(d0,d1))pix,yn是由继承的那部分信息,传递给后续块的,不受delta QP影响。

  • 参考块因为delta QP受影响的信息量有 c Δ = c x , y n ( d 0 , d 1 ) + c x , y n ( d 0 , d 1 ) c x , y n ( 0 , 0 ) ⋅ p i x , y n c_{\Delta}=c_{x,y}^{n}(d0,d1)+\frac{c_{x,y}^{n}(d0,d1)}{c_{x,y}^{n}(0,0)} \cdot pi_{x,y}^{n} cΔ=cx,yn(d0,d1)+cx,yn(0,0)cx,yn(d0,d1)pix,yn
  • 非参考块因为delta QP受影响的信息量有 c x , y n ( d 0 , d 1 ) c_{x,y}^{n}(d0,d1) cx,yn(d0,d1), 因为非参考块,不被参考,所以后项为0,只有inter cost部份

r Δ = c Δ c x , y n ( d 0 , d 1 ) = 1 + p i x , y n c x , y n ( 0 , 0 ) λ = − d D d R = − d D / d Q P d R / d Q P = α Q s t e p 2 λ ‾ = − r Δ ⋅ d D d R = α ⋅ r Δ Q s t e p ‾ 2 λ = λ ‾ Q s t e p ‾ 2 Q s t e p 2 = 1 r Δ Q s t e p 2 = b 2 ⋅ 2 Q P − 12 3 Q P = 12 + 3 l o g 2 Q s t e p 2 b 2 Q P ‾ = 12 + 3 l o g 2 Q s t e p ‾ 2 b 2 Δ Q P = Q P ‾ − Q P = 3 l o g 2 Q s t e p ‾ 2 b 2 − 3 l o g 2 Q s t e p 2 b 2 = 3 l o g 2 Q s t e p ‾ 2 Q s t e p 2 = 3 l o g 2 1 r Δ = − 3 l o g 2 r Δ \begin{align} & r_{\Delta} = \frac{c_{\Delta}}{c_{x,y}^{n}(d0,d1)}=1+\frac{pi_{x,y}^{n}}{c_{x,y}^{n}(0,0)} \\ & \lambda = -\frac{dD}{dR}=-\frac{dD/dQP}{dR/dQP}=\alpha Qstep^2 \\ & \overline{\lambda} = -\frac{r_{\Delta} \cdot dD}{dR}=\alpha \cdot r_{\Delta} \overline{Qstep}^2 \\ & \lambda = \overline{\lambda} \\ & \frac{\overline{Qstep}^2}{Qstep^2} = \frac{1}{r_{\Delta}} \\ & Qstep^2=b^2 \cdot 2^{\frac{QP-12}{3}} \\ & QP=12 + 3log_{2}^{\frac{Qstep^2}{b^2}} \\ & \overline{QP} = 12 + 3log_{2}^{\frac{\overline{Qstep}^2}{b^2}} \\ & \Delta QP = \overline{QP} - QP = 3log_{2}^{\frac{\overline{Qstep}^2}{b^2}}-3log_{2}^{\frac{Qstep^2}{b^2}} \\ & =3log_{2}^{\frac{\overline{Qstep}^2}{Qstep^2}} \\ & =3log_{2}^{\frac{1}{r_{\Delta}}} = -3log_{2}^{r_{\Delta}} \end{align} rΔ=cx,yn(d0,d1)cΔ=1+cx,yn(0,0)pix,ynλ=dRdD=dR/dQPdD/dQP=αQstep2λ=dRrΔdD=αrΔQstep2λ=λQstep2Qstep2=rΔ1Qstep2=b223QP12QP=12+3log2b2Qstep2QP=12+3log2b2Qstep2ΔQP=QPQP=3log2b2Qstep23log2b2Qstep2=3log2Qstep2Qstep2=3log2rΔ1=3log2rΔ

更多推荐

【Docker】深入解析企业中 Docker 仓库的用法和作用

深入解析企业中Docker仓库的用法和作用Docker仓库是企业中管理和分发镜像的关键工具。本文将详细介绍Docker仓库的概念、常见用法以及在企业中的作用,并结合Java代码演示如何使用Docker仓库。1.Docker仓库概述Docker仓库是存储和分享Docker镜像的中心化存储库。它允许开发者将自己的镜像上传到

鸿蒙应用开发(基础篇)之列表组件

一、简介在我们常用的手机应用中,经常会见到一些数据列表,如设置页面、通讯录、商品列表等。下图中两个页面都包含列表,“首页”页面中包含两个网格布局,“商城”页面中包含一个商品列表。上图中的列表中都包含一系列相同宽度的列表项,连续、多行呈现同类数据,例如图片和文本。常见的列表有线性列表(List列表)和网格布局(Grid列

Linux READ_ONCE/WRITE_ONCE宏

文章目录前言一、简介1.1READ_ONCE1.2WRITE_ONCE1.3volatile关键字二、Compilerbarrier2.1barrier2.2READ_ONCE/WRITE_ONCE三、总结参考资料前言最近在看arm64架构内存页表源码部分,发现在遍历页表项的时候经常出现READ_ONCE宏和WRITE

跟我一起写Makefile细节总结学习笔记

文章目录跟我一起写Makefile细节总结学习笔记第一,二章此篇仅为方便查阅记忆,详细的请看[seisman/how-to-write-makefile:跟我一起写Makefile重制版(github.com)](https://github.com/seisman/how-to-write-makefile)Make

AIGC赋能教育 | 虚拟现实:下一代的教室在哪里?

在这个科技迅速进步的时代,全球教育领域正迎来一场前所未有的数字化和技术化变革。而AIGC则是代表了人工智能与教育的融合,它正在改变着学习方式、提高教育质量,并重新定义了教育的未来。我们正在亲眼目睹AIGC如何塑造着全球教育的格局,为学生、教育者和整个社会带来了广泛的机遇和挑战。这个崭新的时代不仅带来了无限可能性,也需要

DDoS是什么?

一.DDoS的定义DDos的前身DoS(DenialofService)攻击,其含义是拒绝服务攻击,这种攻击行为使网站服务器充斥大量的要求回复的信息,消耗网络带宽或系统资源,导致网络或系统不胜负荷而停止提供正常的网络服务。而DDoS分布式拒绝服务,则主要利用Internet上现有机器及系统的漏洞,攻占大量联网主机,使其

SpringMVC之JSON数据返回与异常处理机制

目录一.SpringMVC的JSON数据返回1.导入Maven依赖2.配置spring-mvc.xml3.@ResponseBody注解的使用3.1案例演示1.List集合转JSON2.Map集合转JSON3.返回指定格式String4.@ResponseBody用法5.Jackson5.1介绍5.2常用注解二.异常处

SwiftUI 5.0(iOS 17)TipKit 让用户更懂你的 App

概览作为我们秃头开发者来说,写出一款创意炸裂的App还不足以吸引用户眼球,更重要的是如何让用户用最短的时间掌握我们App的使用技巧。从iOS17开始,推出了全新的TipKit框架专注于此事。有了它,我们再也不用自己写App用户帮助以及使用指南的逻辑和界面了。使用TipKit非常简单,接下来就让我们一起走进TipKit

对于项目中爱抱怨成员,项目经理如何回应?

李佳刚被提拔成项目经理。他是技术部的骨干人员,工作能力很强,已经干了快五年了。公司规模中等,属于比较传统的制造型公司。随着公司升级转型,项目越来越多,难度也增加了。原来那种按部就班的订单式生产被更加灵活、个性化的客户需求所取代,不但技术难度提高了,完成一个项目所涉及的部门、协作单位也增多了。李佳由于出色的工作表现,因此

Java手写决策树和决策树应用拓展案例

Java手写决策树和决策树应用拓展案例1.算法思维导图以下是用mermaid代码表示的决策树算法实现原理的思维导图:#mermaid-svg-DWczpr7jTBRHS9bA{font-family:"trebuchetms",verdana,arial,sans-serif;font-size:16px;fill:#

JMeter:接口测试基础介绍

一、什么是接口接口是非常抽象的概念,先来看下中国最大的综合性辞典《辞海》是怎样定义接口的:两个不同系统或系统中两个不同特性部分的交接部分。一般分硬件接口和软件接口两种。前者是为连接计算机各部分之间、计算机与计算机之间、计算机与外部系统之间而专门设计的连接线及有关逻辑控制电路;后者是为连接两个程序层或块而专门设计的程序或

热文推荐