DIMD:Dual Inter and Intra Prediction Mode with Merge and Derivation
(双模式融合预测:帧间与帧内的联合合并与导出机制)
一、什么是 DIMD?
✅ 定义
DIMD(Dual Inter and Intra Prediction Mode with Merge/Derivation)是一种混合预测模式,允许当前编码单元(CU)同时使用帧间预测(Inter)信号和帧内预测(Intra)信号进行加权组合,生成最终预测值。
其核心思想是:
“不要只选一个 —— 让 Inter 和 Intra 合作!”
通过线性融合两种不同性质的预测结果,更好地适应复杂区域(如纹理边缘 + 运动物体交界),从而提升压缩效率。
✅ 基本原理
对于一个 CU,传统做法是选择以下之一作为预测模式:
- 帧内预测(Intra)
- 帧间预测(Inter / ME)
- 跳过/合并(Skip/Merge)
- 其他特殊模式(如 PLT、IBC 等)
而DIMD 模式允许:
predfinal(x,y)=w1⋅predinter(x,y)+w2⋅predintra(x,y) \text{pred}_{final}(x,y) = w_1 \cdot \text{pred}_{inter}(x,y) + w_2 \cdot \text{pred}_{intra}(x,y)predfinal(x,y)=w1⋅predinter(x,y)+w2⋅predintra(x,y)
通常归一化为:
predfinal=w⋅predinter+(64−w)⋅predintra64 \text{pred}_{final} = \frac{w \cdot \text{pred}_{inter} + (64 - w) \cdot \text{pred}_{intra}}{64}predfinal=64w⋅predinter+(64−w)⋅predintra
权重 $ w \in [0, 64] $ 可自适应调整或从候选集中继承。
二、DIMD 的工作流程(基于 ECM-19.0 设计)
🔹 步骤 1:启用条件
仅当满足以下条件时,才考虑使用 DIMD 模式:
| 条件 | 说明 |
|---|---|
| CU 类型 | 必须为亮度分量(luma)且尺寸 ≥ 8×8 |
| Slice 类型 | I、P 或 B slice 均可支持 |
| 不在小块上 | 不适用于 4×4 或极小分区 |
| 工具开关 | SPS 层信令sps_dimd_enabled_flag == 1 |
🔹 步骤 2:构建 DIMD 候选列表(Candidate List Construction)
类似于 AMVP 和 Merge 模式,DIMD 构建一个最多包含N 个候选组合的列表,每个候选包含:
- 帧间预测参数(MV, refIdx)
- 帧内预测模式(如 Planar, DC, Angular mode)
- 权重系数 $ w $
- 是否来自历史缓存等标志
候选来源共四类:
| 编号 | 候选类型 | 描述 |
|---|---|---|
| 1 | 空间相邻融合模式(Spatial Combined Mode) | 查看左侧(A1)、上方(B1)CU 是否使用了 DIMD 或类似混合模式,若存在则复制其 inter/intra 参数和权重 |
| 2 | 时间同位融合信息(Temporal Co-located) | 从参考图像对应位置提取曾使用的 DIMD 参数组 |
| 3 | 导出模式(Derived Mode) | 自动构造两个默认组合: • Inter + Planar • Inter + DC 并用固定权重(如 w=32)初始化 |
| 4 | 历史缓存(History-based Buffer) | FIFO 缓冲区保存最近成功使用的 DIMD 参数集(MV+intraMode+w),最多保留 3~5 项 |
⚠️ 注意:所有候选需去重(比较 MV、refIdx、intraMode、w 是否一致)
🔹 步骤 3:排序与截断
按优先级对候选进行重排序:
| 优先级 | 规则 |
|---|---|
| 1st | 空间相邻候选 |
| 2nd | 时间候选 |
| 3rd | 历史缓存 |
| 4th | 导出默认项 |
最终保留最多maxNumDimdCandidates(例如 5 个)进入 RDO 测试。
🔹 步骤 4:RDO 测试与最优选择
对每个候选执行率失真优化(RDO):
foreach candidate in dimd_candidate_list:pred_inter=generate_inter_prediction(mv,refPic);pred_intra=generate_intra_prediction(intraMode,top/left neighbors);pred_final=(w*pred_inter+(64-w)*pred_intra)>>6;cost=compute_rdo_cost(pred_final,original_block,lambda);选择成本最低的候选作为当前 CU 的 DIMD 模式参数。
🔹 步骤 5:语法传输
码流中传输:
- 标志位:
cu_dimd_flag→ 表示是否使用 DIMD - 若为真,则发送:
dimd_merge_idx(索引到候选列表) - 若未使用 merge,则显式传输:
- MV
- Ref index
- Intra mode
- Weight $ w $
解码端按相同规则重建候选列表,确保同步
三、示例说明
🎯 示例场景
假设当前编码块为 16×16 亮度块,位于 P-slice 中,周围有运动物体穿过一块具有明显水平纹理的背景。
| 区域特性 | 分析 |
|---|---|
| 整体有平移运动 | 帧间预测有效 |
| 局部纹理锐利(如窗户边框) | 帧内预测更准确 |
| 单一模式难以覆盖全部细节 | → 适合使用 DIMD |
🔍 DIMD 候选构建过程(具体步骤)
当前 CU 位置:
+----------------+----------------+ | B0 | B1 | +--------+-------+----------------+ | A0 | Current | | | | +--------+-------------------------+收集候选:
| 来源 | 内容 | 加入? |
|---|---|---|
| A1(左侧) | 使用了 DIMD,参数:MV=(2,1), ref=0, intraMode=18(垂直), w=40 | ✔️ Yes |
| B1(上方) | 使用了普通 Inter,非混合模式 | ❌ No |
| 时间同位块 | 曾使用 DIMD: MV=(3,-1), intraMode=Planar, w=32 | ✔️ Yes |
| 历史缓存 | 存储了两个条目: - [MV=(1,0), intra=DC, w=48] - [MV=(0,0), intra=Angular(26), w=24] | ✔️ Both |
| 导出模式 | 自动生成: 1. Inter-only (w=64) 2. Intra-only (w=0) 3. Inter+Planar (w=32) | ✔️ Add #3 only (avoid extreme cases) |
去重后列表(最大长度设为 5):
| Index | Type | MV | Intra Mode | Weight (w) |
|---|---|---|---|---|
| 0 | Spatial (A1) | (2,1) | Angular(18) | 40 |
| 1 | Temporal | (3,-1) | Planar | 32 |
| 2 | History | (1,0) | DC | 48 |
| 3 | History | (0,0) | Angular(26) | 24 |
| 4 | Derived | (est from AMVP) | Planar | 32 |
注:虽然 Temporal 和 Derived 都用了 Planar,但 MV 不同 → 视为不同候选
🔎 RDO 测试结果(模拟数据)
| Candidate | SAD | Bit Cost | Total RD Cost | 被选中? |
|---|---|---|---|---|
| 0 (Spatial) | 120 | 85 bits | 120 + λ×85 ≈ 205 | No |
| 1 (Temporal) | 110 | 90 bits | ~200 | No |
| 2 (History) | 105 | 88 bits | 193✅ | ✔️ Best |
| 3 | 130 | 80 bits | 210 | No |
| 4 | 140 | 75 bits | 215 | No |
→ 最终选择Index=2的历史缓存候选
📦 码流输出
编码器输出如下语法元素:
cu_pred_mode = MODE_DIMD dimd_merge_idx = 2 // 指向历史缓存中的第2个候选无需再传 MV、intraMode、w —— 解码器自动恢复。
🧠 解码端行为
解码器执行完全相同的 DIMD 候选构建流程(空间 → 时间 → 历史 → 导出),得到同样的列表顺序。
然后根据dimd_merge_idx=2,取出对应参数:
- MV = (1,0)
- RefPicIdx = ?
- IntraMode = DC
- w = 48
接着:
- 生成帧间预测块
- 生成帧内预测块(DC 模式)
- 融合:
pred = (48*inter + 16*intra) >> 6 - 加上残差 → 得到最终重建块
✅ 实现了解码一致性。
四、性能增益与代价分析(来自 JVET 报告)
| 项目 | 数据 |
|---|---|
| 平均 BD-rate 节省(Y) | -1.8% ~ -2.5%(尤其在动画、屏幕内容) |
| U/V 分量收益 | 更高,可达 -3.0%(因色度动态变化大) |
| 编码时间增加 | +10% ~ +15%(需测试多个融合组合) |
| 解码复杂度 | +5%(需同时计算 inter 和 intra 预测) |
| 内存需求 | 增加存储历史缓存、邻近预测块 |
五、相关提案参考(真实 JVET 文档)
| 提案编号 | 内容 |
|---|---|
| JVET-Z0112 | 提出 Inter-Intra Hybrid Prediction 概念 |
| JVET-AC0123 | 引入 DIMD 名称及 Merge 候选机制 |
| JVET-AD0071 | 优化权重量化与传输方式 |
| JVET-AE0055 | 快速算法:提前跳过低效融合模式 |
六、总结表
| 特性 | 内容 |
|---|---|
| 全称 | Dual Inter and Intra Prediction Mode with Merge and Derivation |
| 目的 | 融合帧间与帧内优势,提升复杂区域预测精度 |
| 核心公式 | pred_final = (w × pred_inter + (64−w) × pred_intra)/64 |
| 候选来源 | 空间、时间、历史、导出 |
| 最大候选数 | 通常为 5 |
| 传输方式 | 仅传 merge index 或显式参数 |
| 适用范围 | 亮度块 ≥8×8,I/P/B slice |
| 优势 | 显著降低残差能量,特别适合混合内容 |
| 挑战 | 复杂度高,需设计快速决策算法 |
七、未来改进方向
| 方向 | 说明 |
|---|---|
| AI 加速模式选择 | 使用轻量 CNN 判断是否值得尝试 DIMD |
| 自适应权重学习 | 在片头训练局部最优 w,后续复用 |
| 跨分量 DIMD 扩展 | 将 DIMD 应用于色度,结合 CCP |
| 变换域融合 | 在频域而非空域进行 inter/intra 组合 |