H.266 JEM7.0 帧间预测之四(重叠块的运动补偿 OBMC)

重叠块的运动补偿 Overlapped Block Motion Compensation (OBMC)

OBMC可以在CU级别通过采用语法元素进行开关。当JEM中使用OBMC时,对CU除去右侧和底部所有边界的运动补偿MC都使用OBMC,包括亮度及色度。JEM中,MC块对应一个编码块。当CU采用子CU模式编码(包括子CUmerge,affine以及FRUC模式),CU的每个子块都是一个MC块。为了统一处理CU的边界,当子CU块大小设为4x4时,OBMC对所有的子CU级别的MC块的边界均使用。

在当前子CU使用OBMC时,当前MV,四个相邻的子块的MV,如果可获取且与当前MV不完全相同,也会被用来获取当前子CU的预测块。这些基于多MV的多预测块结合起来,得到当前子CU最终的预测信号。

Pn为基于相邻子块MV得到的预测块,N为相邻上方,下方,左侧和右侧子块的索引,基于当前子块MV得到的预测块为Pc。当Pn是根据相邻子块的运动信息得到的,且此运动信息与当前子块运动信息相同,Pn中不使用OBMC。否则,Pn的每个样本均被加入到Pc的相同样本中。如,Pn的四行/列加到Pc上。Pn权重为{1/4, 1/8, 1/16, 1/32} ,Pc为 {3/4, 7/8, 15/16, 31/32}。预测为小MC块(当编码块的宽/高=4或者CU是子CU模式编码的),此时Pn的两行/列加入Pc。此时Pn权重 {1/4, 1/8},Pc为 {3/4, 7/8}。对于根据水平/垂直相邻子块得到的Pn而言,Pn相同列/行采用相同的权重增加到Pc上。

JEM中,对于亮度样本小于等于256的CU而言,CU级别一个标志位需要传输来表示OBMC是否使用。对于亮度样本大于256或者不是AMVP模式的CU,OBMC默认使用。编码端,当OBMC使用时,在运动估计层面考虑了其影响。OBMC使用上方和左侧相邻块的运动信息生成的预测信号被用于补偿当前CU上方和左侧边界的原始信号,然后进入运动估计过程。

OBMC技术在JEM中对应的主要函数为:

TComPrediction::subBlockOBMC()

 此函数中主要调用了:

TComPrediction::xSubBlockMotionCompensation()
TComPrediction::xSubtractOBMC() || xSubblockOBMC()

前者通过调用xPredInterUnixPredInterBi完成运动补偿。后者中,如果bOBMC4ME为true(传入参数,只有在predInterSearch中为true),此时需要在运动补偿中考虑OBMC,选择xSubtractOBMC;否则选择xSubblockOBMC,对当前块的预测器和通过当前块的相邻运动的预测器求平均,对Y、Cb、Cr分量均运行一次。

### 部署 Stable Diffusion 的准备工作 为了成功部署 Stable Diffusion,在本地环境中需完成几个关键准备事项。确保安装了 Python 和 Git 工具,因为这些对于获取源码和管理依赖项至关重要。 #### 安装必要的软件包和支持库 建议创建一个新的虚拟环境来隔离项目的依赖关系。这可以通过 Anaconda 或者 venv 实现: ```bash conda create -n sd python=3.9 conda activate sd ``` 或者使用 `venv`: ```bash python -m venv sd-env source sd-env/bin/activate # Unix or macOS sd-env\Scripts\activate # Windows ``` ### 下载预训练模型 Stable Diffusion 要求有预先训练好的模型权重文件以便能够正常工作。可以从官方资源或者其他可信赖的地方获得这些权重文件[^2]。 ### 获取并配置项目代码 接着要做的就是把最新的 Stable Diffusion WebUI 版本拉取下来。在命令行工具里执行如下指令可以实现这一点;这里假设目标路径为桌面下的特定位置[^3]: ```bash git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git ~/Desktop/stable-diffusion-webui cd ~/Desktop/stable-diffusion-webui ``` ### 设置 GPU 支持 (如果适用) 当打算利用 NVIDIA 显卡加速推理速度时,则需要确认 PyTorch 及 CUDA 是否已经正确设置好。下面这段简单的测试脚本可以帮助验证这一情况[^4]: ```python import torch print(f"Torch version: {torch.__version__}") if torch.cuda.is_available(): print("CUDA is available!") else: print("No CUDA detected.") ``` 一旦上述步骤都顺利完成之后,就可以按照具体文档中的指导进一步操作,比如调整参数、启动服务端口等等。整个过程中遇到任何疑问都可以查阅相关资料或社区支持寻求帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值