当前位置: 首页 > article >正文

【视频编码】视频编码中拉格朗日乘子法的简单理解

目录

  • 1.问题的定义
  • 2.问题的求解
  • 3.实际应用

拉格朗日乘子法在诸多领域都有着重要的应用,通过使用拉格朗日乘子法,能够求解一些不易于解析的约束性问题,这在视频编码领域中也有重要的应用。

1.问题的定义

在视频编码器中,有些工具用来优化编码质量,而有些工具用于提升编码速度。在相同的码率(Bitrate)下,每增加一项工具都会对编码器的编码质量(PSNR)产生影响。这自然的衍生了一个问题,在给定码率的情况下,如何使得编码质量最优,即编码损失(Distortion)最小,这就是率失真优化(Rate Distortion Optimization,RDO)的问题,能够用一个约束性公式可以描述:
min ⁡ D ( B ) B ∈ S , s . t . R ( B ) < R c (1) \mathop{\min D(B)}\limits_{B \in S},s.t.R(B) <R_c \tag{1} BSminD(B),s.t.R(B)<Rc(1)
其中,D表示编码损失distortion,B表示使用的工具情况(或者说编码模式),R表示码率, R c R_c Rc表示限制的码率。我们的目的是,给定码率,找到一个最优的 B B B,使得 D ( B ) D(B) D(B)最小,记最优 B = B ∗ B=B^* B=B。由视频编码中质量和码率之间的关系可知,一般情况下,码率越高,质量也越好,所以如果码率取最大值 R c R_c Rc,损失也应该最小(至少是最小损失附近),即最优的 B B B B ∗ B^* B,有 R ( B ∗ ) = R c R(B^*)=R_c R(B)=Rc,最优的 B ∗ B^* B对应于最小的损失。

2.问题的求解

B B B通常是由一系列编码器内部的模式组成的,即 B = { b 1 , b 2 , . . . , b n } B=\{b_1,b_2,...,b_n\} B={b1,b2,...,bn}。先考虑最简单的情况,只有一个模式,即 B = { b 1 } B=\{b_1\} B={b1},此时能够根据 R R R的限制条件,求解出最佳的 B ∗ B^* B,因为这是一个一元函数,很容易求解。

假设现在 B B B由两个模式共同影响,即 B = { b 1 , b 2 } B=\{b_1,b_2\} B={b1,b2}。令 f ( b 1 , b 2 ) = D ( b 1 , b 2 ) f(b_1,b_2)=D(b_1,b_2) f(b1,b2)=D(b1,b2) g ( b 1 , b 2 ) = R ( b 1 , b 2 ) − R c g(b_1,b_2)=R(b_1,b_2)-R_c g(b1,b2)=R(b1,b2)Rc。由前述可知,当 g ( b 1 , b 2 ) = 0 g(b_1,b_2)=0 g(b1,b2)=0时取得最佳的模式,根据这个等式可以获得 b 1 b_1 b1 b 2 b_2 b2的关系,记为 b 2 = T ( b 1 ) b_2=T(b_1) b2=T(b1),此时有 f ( b 1 , b 2 ) = f ( b 1 , T ( b 1 ) ) f(b_1,b_2)=f(b_1,T(b_1)) f(b1,b2)=f(b1,T(b1)),这样就变成了一个一元函数,一元函数的极值点位于导数为零的点,对 f f f进行求导,有
d f ( b 1 , b 2 ) d b 1 = ∂ f ∂ b 1 + ∂ f ∂ b 2 d b 2 d b 1 = 0 (2) \frac{df(b_1,b_2)}{db_1}=\frac{\partial f}{\partial b_1}+\frac{\partial f}{\partial b_2}\frac{db_2}{db_1}=0 \tag{2} db1df(b1,b2)=b1f+b2fdb1db2=0(2)
如果上式成立,则对应的 b 1 b_1 b1 b 2 b_2 b2就是最佳模式。

由隐函数求导公式可知
d b 2 d b 1 = − ∂ g ∂ b 1 ∂ g ∂ b 2 (3) \frac{db_2}{db_1}=-\frac{\frac{\partial g}{\partial b_1}}{\frac{\partial g}{\partial b_2}} \tag{3} db1db2=b2gb1g(3)
因此,有
d f ( b 1 , b 2 ) d b 1 = ∂ f ∂ b 1 − ∂ f ∂ b 2 ∂ g ∂ b 1 ∂ g ∂ b 2 = 0 (4) \frac{df(b_1,b_2)}{db_1}=\frac{\partial f}{\partial b_1}-\frac{\partial f}{\partial b_2}\frac{\frac{\partial g}{\partial b_1}}{\frac{\partial g}{\partial b_2}}=0 \tag{4} db1df(b1,b2)=b1fb2fb2gb1g=0(4)
简化(4)中的公式,有
d f ( b 1 , b 2 ) d b 1 = f b 1 − f b 2 g b 1 g b 2 = 0 (4) \frac{df(b_1,b_2)}{db_1}=f_{b_1}-f_{b_2}\frac{g_{b_1}}{g_{b_2}}=0 \tag{4} db1df(b1,b2)=fb1fb2gb2gb1=0(4)
λ = − f b 2 g b 2 \lambda = -\frac{f_{b_2}}{g_{b_2}} λ=gb2fb2,有
{ f b 2 + λ ∗ g b 2 = 0 f b 1 + λ ∗ g b 1 = 0 g ( b 1 , b 2 ) = 0 (5) \left\{ \begin{matrix} f_{b_2} + \lambda * g_{b_2} = 0 \\ f_{b_1} + \lambda * g_{b_1} = 0 \\ g(b_1,b_2) = 0 \end{matrix} \right. \tag{5} fb2+λgb2=0fb1+λgb1=0g(b1,b2)=0(5)
根据公式(5),能够求解出对应的 b 1 b_1 b1 b 2 b_2 b2。如果将公式(5)进行抽象化,获得
D + λ ∗ R = C (6) D + \lambda * R = C \tag{6} D+λR=C(6)
其中,C为一个常数。如果此时再构建一个R-D曲线的话,那么这个R-D曲线与斜率为 − λ -\lambda λ的直线的切点就是最佳R-D点,这个最佳R-D点对应的模式就是最佳的模式。
在这里插入图片描述

3.实际应用

在RDO实际应用于编码器时,通常决定的是某一个模块,例如帧内预测选择何种模式,可能是16x16,也可能是4个8x8,或者是SKIP模式。评判如何选择最佳模式的方式就是
J = D + λ ∗ R J = D + \lambda * R J=D+λR
哪一种模式带来的 J J J最小(最接近于C),说明最接近于上述的切点。

需要注意的是,上述第2节中只讨论了2种模式的情况,如果是更多的模式,再依次类推即可。实际上,RDO过程中有很多子任务互不影响,是可以单独拆解的。


http://www.kler.cn/news/360214.html

相关文章:

  • 基于SSM+微信小程序的家庭记账本管理系统(家庭1)
  • 08_实现 reactive
  • DAPLINK 源码学习(1)BL 之 main() 函数
  • typescript 的类型注解和类型断言
  • C#学习笔记(十)
  • 拥抱“新市民” ,数字银行的“谋与变”
  • jetson agx orin 的pytorch、torchvision安装
  • el-table表格数据处理,列表将变更前数据放置在前面,变更后数据放在表格后面
  • 第1篇:计算机网络概述与基础
  • 【小白学机器学习15】 概率论的世界观
  • Web,RESTful API 在微服务中的作用是什么?
  • 【修订中】ffmpeg 知识点
  • 从传统到智能,从被动监控到主动预警,解锁视频安防平台EasyCVR视频监控智能化升级的关键密钥
  • 【小程序】-基础语法(二)
  • Netty初体验-1-NIO基础补漏
  • 域渗透之 内网穿透 隧道技术聊聊看 环境搭建 regeorg技术 proxifier联合使用 一步步让你明白如何玩转隧道技术 含对应软件下载
  • Yolo目标检测:实时性与准确性的完美结合
  • 一文2500字从0到1实现压测自动化!
  • 宠物用品电商网站:SpringBoot框架设计与开发
  • 回忆Web编程的岁月变迁