ginka-generator/docs/inpainting-generation-design.md
2026-07-22 17:54:27 +08:00

62 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 基于矩形掩码修补的生成策略设计
## 背景
当前生成策略是从训练集采样地图,经 VQ-VAE 编码得到码本 z再用**随机采样的 z**(而非真实 z作为 MaskGIT 的条件进行三阶段级联生成。在当前数据规模下,模型难以从纯随机条件中学习到合理的生成分布,效果不佳。
## 新策略目标
降低任务难度:保持从训练集采样,但不再用随机 z而是**在真实地图上施加随机矩形掩码**,让模型作为"修补inpainting"任务来完成。这样模型既有真实地图的结构先验(通过 z 条件),又有明确的局部填空目标。
## 核心改动
### 1. 掩码方式
**仅使用矩形分块掩码**`dataset.py` `std_mask` 的第二种模式),不采用散点随机掩码。
验证时掩码比例随机采样自 `Uniform(0.2, 0.8)`
### 2. 条件输入 z
不再随机采样 z改为使用**完整地图(掩码前)经 VQ-VAE 编码后得到的真实 z**
- 对掩码后的地图做 VQ 编码没有意义——掩码区域噪声会污染码本表示
- z 携带完整地图的全局结构信息,作为"答案的轮廓"注入 MaskGIT
- MaskGIT 以完整 z 为条件,对照可见图块,在掩码区域补全被遮盖的图块
### 3. 生成流程
仍然采用三阶段级联,但每个阶段统一使用同一份掩码布局:
```
输入: 完整地图 gt [13×13]
↓ ↓
VQ-VAE 编码 生成矩形掩码 mask [13×13 bool]
gt → z1,z2,z3 gt[mask] = MASK_TOKEN → inp
↓ ↓
└──────┬─────────┘
Stage1: mg1(inp, z1) → 补全墙壁
Stage2: mg2(inp1+stage1_out, z2) → 补全门/怪物/入口
Stage3: mg3(inp2+stage2_out, z3) → 补全资源
输出: 最终地图 + 逐阶段可视化对比
```
### 4. 逐阶段保留未掩码区域
`full_generate_specific_z` 不同,修补场景下需要将**未掩码区域的原始图块逐阶段传递**,避免被误当成空地重填:
- Stage1 后将 raw_map 中未掩码区的非 0/1 图块覆盖到 stage1 输出
- Stage3 前将 raw_map 中未掩码区的资源覆盖回去
### 5. 验证可视化
替换现有的验证 `rand{batch_idx}.png`(原为随机墙壁种子 + 随机 z 生成),改为修补方式:
- 不显示真实地图,仅展示掩码输入与生成结果的对比
- 每张 `rand` 图展示 4 组样本,每组为"掩码地图 + 生成结果"并排
- 2 行 × 4 列布局:每行放 2 组,每组左侧掩码输入、右侧生成结果
- 掩码区域由 MASK 图块ID=7自身标识无需额外叠加颜色
- 每张子图标注样本名称和掩码比例(如 `map_v1 34%`