mcErykO
/

File size: 18,846 Bytes
97c4df8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
# HunyuanWorld 2.0 — 文档
本文档提供了 HunyuanWorld 2.0 各组件的详细使用指南、参数参考和输出格式说明。

## 目录
- [WorldMirror 2.0(世界重建)](#worldmirror-20世界重建)
  - [概述](#概述)
  - [Python API](#python-api)
    - [`WorldMirrorPipeline.from_pretrained`](#worldmirrorpipelinefrom_pretrained)
    - [`WorldMirrorPipeline.__call__`](#worldmirrorpipelinecall)
  - [命令行参考](#命令行参考)
  - [输出格式](#输出格式)
    - [文件结构](#文件结构)
    - [预测字典](#预测字典)
  - [先验注入](#先验注入)
    - [相机参数(JSON)](#相机参数json)
    - [深度图(文件夹)](#深度图文件夹)
    - [组合先验](#组合先验)
  - [多卡推理](#多卡推理)
  - [高级选项](#高级选项)
    - [禁用预测头](#禁用预测头)
    - [掩码过滤](#掩码过滤)
    - [点云压缩](#点云压缩)
  - [Gradio 应用](#gradio-应用)
- [全景生成](#全景生成)
- [世界生成](#世界生成)

---
## WorldMirror 2.0(世界重建)
### 概述
WorldMirror 2.0 是一个统一的前馈模型,用于从多视图图像或视频进行全面的3D几何预测。它能同时生成:
- **3D 点云**(世界坐标系)
- **逐视图深度图**(相机坐标系)
- **表面法线**(相机坐标系)
- **相机位姿**(c2w)和**内参**
- **3D 高斯点云**属性(均值、尺度、旋转、不透明度、球谐系数)

相比 WorldMirror 1.0 的关键改进:
- **归一化 RoPE** 支持灵活分辨率推理
- **深度掩码预测** 实现稳健的无效像素处理
- **序列并行 + FSDP + BF16** 实现高效多卡推理

---
### Python API
#### `WorldMirrorPipeline.from_pretrained`
工厂方法,用于加载模型并创建 Pipeline 实例。

```python
from hyworld2.worldrecon.pipeline import WorldMirrorPipeline

pipeline = WorldMirrorPipeline.from_pretrained(
    pretrained_model_name_or_path="tencent/HY-World-2.0",
    subfolder="HY-WorldMirror-2.0",
    config_path=None,
    ckpt_path=None,
    use_fsdp=False,
    enable_bf16=False,
    fsdp_cpu_offload=False,
    disable_heads=None,
)
```

| 参数 | 类型 | 默认值 | 描述 |
|------|------|--------|------|
| `pretrained_model_name_or_path` | `str` | `"tencent/HY-World-2.0"` | HuggingFace 仓库 ID 或本地路径 |
| `subfolder` | `str` | `"HY-WorldMirror-2.0"` | 仓库内包含 WorldMirror 检查点的子文件夹(`model.safetensors` + 配置文件) |
| `config_path` | `str` | `None` | 训练配置 YAML(与 `ckpt_path` 配合用于自定义检查点) |
| `ckpt_path` | `str` | `None` | 检查点文件(`.ckpt` / `.safetensors`)。与 `config_path` 一起使用时,从本地检查点加载模型而非 HuggingFace |
| `use_fsdp` | `bool` | `False` | 通过完全分片数据并行(FSDP)在多卡间分片参数 |
| `enable_bf16` | `bool` | `False` | 使用 bfloat16 精度(数值敏感层除外) |
| `fsdp_cpu_offload` | `bool` | `False` | 将 FSDP 参数卸载到 CPU(节省显存但降低速度) |
| `disable_heads` | `list[str]` | `None` | 要禁用并释放内存的预测头。可选:`"camera"``"depth"``"normal"``"points"``"gs"` |

**说明:**
- 分布式模式通过 `WORLD_SIZE` 环境变量(由 `torchrun` 设置)自动检测。
- 使用多卡时,每个 rank 都需要调用 `from_pretrained`——该方法内部处理 `dist.init_process_group`。

---
#### `WorldMirrorPipeline.__call__`
对一组图像或视频运行推理。

```python
result = pipeline(
    input_path,
    output_path="inference_output",
    **kwargs,
)
```

返回输出目录路径(`str`),如果输入被跳过则返回 `None`**推理参数:**

| 参数 | 类型 | 默认值 | 描述 |
|------|------|--------|------|
| `input_path` | `str` | *(必填)* | 图像目录或视频文件路径 |
| `output_path` | `str` | `"inference_output"` | 输出根目录 |
| `target_size` | `int` | `952` | 最大推理分辨率(最长边)。图像将被缩放 + 中心裁剪到最近的 14 的倍数 |
| `fps` | `int` | `1` | 从视频输入提取帧的帧率 |
| `video_strategy` | `str` | `"new"` | 视频帧提取策略:`"new"`(运动感知)或 `"old"`(均匀 FPS) |
| `video_min_frames` | `int` | `1` | 从视频中提取的最少帧数 |
| `video_max_frames` | `int` | `32` | 从视频中提取的最多帧数 |

**保存参数:**

| 参数 | 类型 | 默认值 | 描述 |
|------|------|--------|------|
| `save_depth` | `bool` | `True` | 保存逐视图深度图(PNG 可视化 + NPY 原始值) |
| `save_normal` | `bool` | `True` | 保存逐视图表面法线图(PNG) |
| `save_gs` | `bool` | `True` | 保存 3D 高斯点云为 `gaussians.ply` |
| `save_camera` | `bool` | `True` | 保存相机参数为 `camera_params.json` |
| `save_points` | `bool` | `True` | 保存基于深度的点云为 `points.ply` |
| `save_colmap` | `bool` | `False` | 保存 COLMAP 格式的稀疏重建(`sparse/0/`) |
| `save_conf` | `bool` | `False` | 保存深度置信度图 |
| `save_sky_mask` | `bool` | `False` | 保存天空分割掩码 |

**掩码参数:**

| 参数 | 类型 | 默认值 | 描述 |
|------|------|--------|------|
| `apply_sky_mask` | `bool` | `True` | 从点云和高斯中过滤天空区域 |
| `apply_edge_mask` | `bool` | `True` | 过滤边缘/不连续区域 |
| `apply_confidence_mask` | `bool` | `False` | 过滤低置信度预测 |
| `sky_mask_source` | `str` | `"auto"` | 天空掩码方法:`"auto"`(ONNX + 模型融合)、`"model"`(仅模型预测)、`"onnx"`(仅外部分割) |
| `model_sky_threshold` | `float` | `0.45` | 基于模型的天空检测阈值 |
| `confidence_percentile` | `float` | `10.0` | 置信度过滤的百分位阈值(移除最低 N%) |
| `edge_normal_threshold` | `float` | `1.0` | 法线边缘检测容差 |
| `edge_depth_threshold` | `float` | `0.03` | 深度边缘检测相对容差 |

**压缩参数:**

| 参数 | 类型 | 默认值 | 描述 |
|------|------|--------|------|
| `compress_pts` | `bool` | `True` | 通过体素合并 + 随机采样压缩点云 |
| `compress_pts_max_points` | `int` | `2,000,000` | 压缩后的最大点数 |
| `compress_pts_voxel_size` | `float` | `0.002` | 点云合并的体素大小 |
| `max_resolution` | `int` | `1920` | 保存输出图像的最大分辨率 |
| `compress_gs_max_points` | `int` | `5,000,000` | 体素剪枝后的最大高斯数 |

**先验参数:**

| 参数 | 类型 | 默认值 | 描述 |
|------|------|--------|------|
| `prior_cam_path` | `str` | `None` | 相机参数 JSON 文件路径 |
| `prior_depth_path` | `str` | `None` | 深度图文件夹路径 |

**渲染视频参数:**

| 参数 | 类型 | 默认值 | 描述 |
|------|------|--------|------|
| `save_rendered` | `bool` | `False` | 从高斯点云渲染插值飞行视频 |
| `render_interp_per_pair` | `int` | `15` | 每对相机之间的插值帧数 |
| `render_depth` | `bool` | `False` | 同时渲染深度可视化视频 |

**其他参数:**

| 参数 | 类型 | 默认值 | 描述 |
|------|------|--------|------|
| `log_time` | `bool` | `True` | 打印计时报告并保存 `pipeline_timing.json` |
| `strict_output_path` | `str` | `None` | 若指定,结果直接保存到该路径下,不创建 `<case_name>/<timestamp>` 子目录 |

---
### 命令行参考
所有 `__call__` 参数都可作为命令行参数使用:

```bash
python -m hyworld2.worldrecon.pipeline \
    --input_path path/to/images \
    --output_path inference_output \
    --target_size 952 \
    --prior_cam_path path/to/camera_params.json \
    --prior_depth_path path/to/depth_dir/
```

**布尔标志约定:**

| 启用 | 禁用 |
|------|------|
| `--save_colmap` | *(省略)* |
| `--save_conf` | *(省略)* |
| `--save_sky_mask` | *(省略)* |
| `--apply_sky_mask`(默认开启) | `--no_sky_mask` |
| `--apply_edge_mask`(默认开启) | `--no_edge_mask` |
| `--apply_confidence_mask` | *(省略)* |
| `--compress_pts`(默认开启) | `--no_compress_pts` |
| `--log_time`(默认开启) | `--no_log_time` |
| *(默认开启)* `save_depth` | `--no_save_depth` |
| *(默认开启)* `save_normal` | `--no_save_normal` |
| *(默认开启)* `save_gs` | `--no_save_gs` |
| *(默认开启)* `save_camera` | `--no_save_camera` |
| *(默认开启)* `save_points` | `--no_save_points` |
| `--save_rendered` | *(省略)* |
| `--render_depth` | *(省略)* |

**仅命令行参数:**

| 参数 | 描述 |
|------|------|
| `--config_path` | 用于自定义检查点加载的训练配置 YAML |
| `--ckpt_path` | 本地检查点文件路径 |
| `--use_fsdp` | 启用 FSDP 多卡分片 |
| `--enable_bf16` | 启用 bfloat16 混合精度 |
| `--fsdp_cpu_offload` | 将 FSDP 参数卸载到 CPU |
| `--disable_heads` | 以空格分隔要禁用的预测头(例如 `--disable_heads camera normal`) |
| `--no_interactive` | 首次推理后退出(跳过交互式提示循环) |

---
### 输出格式
#### 文件结构

```
inference_output/
└── <case_name>/
    └── <timestamp>/
        ├── depth/
        │   ├── depth_0000.png      # 归一化深度可视化
        │   ├── depth_0000.npy      # 原始 float32 深度值 [H, W]
        │   └── ...
        ├── normal/
        │   ├── normal_0000.png     # 法线图可视化(RGB)
        │   └── ...
        ├── camera_params.json      # 相机外参和内参
        ├── gaussians.ply           # 3D 高斯点云(标准格式)
        ├── points.ply              # 带颜色的点云
        ├── sparse/                 # COLMAP 格式(使用 --save_colmap 时)
        │   └── 0/
        │       ├── cameras.bin
        │       ├── images.bin
        │       └── points3D.bin
        ├── rendered/               # 渲染视频(使用 --save_rendered 时)
        │   ├── rendered_rgb.mp4
        │   └── rendered_depth.mp4  # (使用 --render_depth 时)
        └── pipeline_timing.json    # 性能计时报告
```

#### 预测字典
使用 Python API 时,`pipeline(...)` 内部生成一个 `predictions` 字典,包含以下键:

```python
# 几何
predictions["depth"]        # [B, S, H, W, 1]  — 相机坐标系中的 Z 深度
predictions["depth_conf"]   # [B, S, H, W]     — 深度置信度
predictions["normals"]      # [B, S, H, W, 3]  — 相机坐标系中的表面法线
predictions["normals_conf"] # [B, S, H, W]     — 法线置信度
predictions["pts3d"]        # [B, S, H, W, 3]  — 世界坐标系中的 3D 点图
predictions["pts3d_conf"]   # [B, S, H, W]     — 点云置信度
# 相机
predictions["camera_poses"] # [B, S, 4, 4]     — 相机到世界(c2w),OpenCV 约定
predictions["camera_intrs"] # [B, S, 3, 3]     — 相机内参矩阵
predictions["camera_params"]# [B, S, 9]        — 紧凑相机向量(平移、四元数、fov_v、fov_u)
# 3D 高斯点云
predictions["splats"]["means"]      # [B, N, 3] — 高斯中心
predictions["splats"]["scales"]     # [B, N, 3] — 高斯尺度
predictions["splats"]["quats"]      # [B, N, 4] — 高斯旋转(四元数)
predictions["splats"]["opacities"]  # [B, N]    — 高斯不透明度
predictions["splats"]["sh"]         # [B, N, 1, 3] — 球谐函数(0 阶)
predictions["splats"]["weights"]    # [B, N]    — 逐高斯置信度权重
```

其中 `B` = 批大小(推理时始终为 1),`S` = 输入视图数,`H, W` = 图像尺寸,`N` = 总高斯数(`S × H × W`)。

---
### 先验注入
WorldMirror 2.0 接受三种几何先验作为条件输入。先验会从提供的文件中自动检测。

| 先验类型 | 条件标志 | 输入格式 |
|----------|----------|----------|
| 相机位姿 | `cond_flags[0]` | c2w 4×4 矩阵(OpenCV 约定) |
| 深度图 | `cond_flags[1]` | 逐视图浮点深度图 |
| 相机内参 | `cond_flags[2]` | 3×3 内参矩阵 |

#### 相机参数(JSON)
相机参数文件格式与 Pipeline 输出的 `camera_params.json` 一致:

```json
{
  "num_cameras": 2,
  "extrinsics": [
    {
      "camera_id": 0,
      "matrix": [
        [0.98, 0.01, -0.17, 0.52],
        [-0.01, 0.99, 0.01, -0.03],
        [0.17, -0.01, 0.98, 1.20],
        [0.0, 0.0, 0.0, 1.0]
      ]
    }
  ],
  "intrinsics": [
    {
      "camera_id": 0,
      "matrix": [
        [525.0, 0.0, 320.0],
        [0.0, 525.0, 240.0],
        [0.0, 0.0, 1.0]
      ]
    }
  ]
}
```

**字段说明:**

| 字段 | 描述 |
|------|------|
| `camera_id` | 整数索引(`0``1``2` ...)或图像文件名(不含扩展名,如 `"image_0001"`) |
| `extrinsics.matrix` | 4×4 相机到世界(c2w)变换矩阵,OpenCV 坐标约定 |
| `intrinsics.matrix` | 3×3 相机内参矩阵(像素单位):`fx, fy` 为焦距,`cx, cy` 为主点坐标 |

**重要说明:**
- `extrinsics``intrinsics` 列表可以独立提供或一起提供。列表为空 `[]` 或缺失字段表示该先验不可用。
- **内参分辨率:** 值应对应**原始图像分辨率**。Pipeline 会根据推理时的 resize + center-crop 自动调整。
- **外参对齐:** Pipeline 会自动将所有外参相对于第一帧归一化,与训练行为一致。
#### 深度图(文件夹)
深度图以独立文件存储在一个文件夹中。文件名应与输入图像文件名对应。支持格式:`.npy``.exr``.png`(16-bit)。

```
prior_depth/
├── image_0001.npy    # float32, shape [H, W]
├── image_0002.npy
└── ...
```

#### 组合先验
先验可以自由组合。示例:

```bash
# 仅内参
python -m hyworld2.worldrecon.pipeline --input_path images/ \
    --prior_cam_path camera_intrinsics_only.json
# 仅深度
python -m hyworld2.worldrecon.pipeline --input_path images/ \
    --prior_depth_path depth_maps/
# 相机位姿 + 内参 + 深度
python -m hyworld2.worldrecon.pipeline --input_path images/ \
    --prior_cam_path camera_params.json \
    --prior_depth_path depth_maps/
```

---
### 多卡推理
WorldMirror 2.0 支持跨多卡的**序列并行(SP)**推理,其中 token 序列在 ViT 骨干网络中跨 rank 分片,DPT 预测头并行处理帧。

> **要求:** 输入图像数量必须 **>= GPU 数量**(`nproc_per_node`)。例如,使用 8 卡时需要提供至少 8 张输入图像。如果不满足此条件,Pipeline 将报错。

```bash
# 2 卡 + FSDP + bf16
torchrun --nproc_per_node=2 -m hyworld2.worldrecon.pipeline \
    --input_path path/to/images \
    --use_fsdp --enable_bf16
# 4 卡
torchrun --nproc_per_node=4 -m hyworld2.worldrecon.pipeline \
    --input_path path/to/images \
    --use_fsdp --enable_bf16
# Python API(在 torchrun 脚本内)
from hyworld2.worldrecon.pipeline import WorldMirrorPipeline
pipeline = WorldMirrorPipeline.from_pretrained(
    'tencent/HY-World-2.0',
    use_fsdp=True,
    enable_bf16=True,
)
pipeline('path/to/images')
```

**内部工作原理:**
1. `from_pretrained` 自动检测 `WORLD_SIZE > 1` 并初始化 `torch.distributed`2. 模型在 rank 0 上加载,并通过 `sync_module_states=True` 广播。
3. FSDP 将参数跨 SP 进程组分片。
4. DPT 预测头将帧分配到各 rank 并通过 `AllGather` 汇总结果。
5. 后处理(掩码计算、保存)仅在 rank 0 上运行。

---
### 高级选项
#### 禁用预测头
当只需要特定输出时,可以禁用不需要的预测头以节省显存:

```python
from hyworld2.worldrecon.pipeline import WorldMirrorPipeline

pipeline = WorldMirrorPipeline.from_pretrained(
    'tencent/HY-World-2.0',
    disable_heads=["normal", "points"],  # 释放约 200M 参数
)
```

可禁用的预测头:`"camera"``"depth"``"normal"``"points"``"gs"`#### 掩码过滤
Pipeline 支持三种输出过滤方式,以提高点云和高斯质量:
1. **天空掩码**`apply_sky_mask=True`):使用基于 ONNX 的分割模型移除天空区域,可选与模型预测的深度掩码融合。
2. **边缘掩码**`apply_edge_mask=True`):移除深度/法线不连续处(物体边界)的点。
3. **置信度掩码**`apply_confidence_mask=False`):移除预测置信度最低的 N% 的点。
这些掩码独立应用于 `points.ply`(基于深度)和 `gaussians.ply`(基于 GS)输出。GS 输出在可用时使用其自身的深度预测进行边缘检测。
#### 点云压缩`compress_pts=True`(默认)时,基于深度的点云会经过以下处理:
1. **体素合并**:每个体素内的点(大小由 `compress_pts_voxel_size` 控制)通过加权平均进行合并。
2. **随机下采样**:如果结果超过 `compress_pts_max_points`,则进行均匀下采样。
类似地,高斯也会经过体素剪枝(均值、尺度、四元数、颜色、不透明度的加权平均),并可选下采样至 `compress_gs_max_points`。

---
### Gradio 应用
WorldMirror 2.0 的交互式 Web 演示。上传图像或视频,即可在浏览器中可视化 3DGS、点云、深度图、法线图和相机参数。
**快速开始:**

```bash
# 单卡
python -m hyworld2.worldrecon.gradio_app

# 多卡
torchrun --nproc_per_node=2 -m hyworld2.worldrecon.gradio_app \
    --use_fsdp --enable_bf16
```

**使用本地检查点:**

```bash
python -m hyworld2.worldrecon.gradio_app \
    --config_path /path/to/config.yaml \
    --ckpt_path /path/to/checkpoint.safetensors
```

**创建公开链接(如 Colab 或远程服务器):**

```bash
python -m hyworld2.worldrecon.gradio_app --share
```

**参数:**

| 参数 | 默认值 | 描述 |
|------|--------|------|
| `--port` | `8081` | 服务端口 |
| `--host` | `0.0.0.0` | 服务主机 |
| `--share` | `False` | 创建公开的 Gradio 链接 |
| `--examples_dir` | `./examples/worldrecon` | 示例场景目录路径 |
| `--config_path` | `None` | 训练配置 YAML(与 `--ckpt_path` 配合使用) |
| `--ckpt_path` | `None` | 本地检查点文件(`.ckpt` / `.safetensors`) |
| `--use_fsdp` | `False` | 启用 FSDP 多卡分片 |
| `--enable_bf16` | `False` | 启用 bfloat16 混合精度 |
| `--fsdp_cpu_offload` | `False` | 将 FSDP 参数卸载到 CPU(节省显存) |

> **重要提示:** 在多卡模式下,输入图像数量必须 **>= GPU 数量**

---
## 全景生成
*即将发布。*
本节将记录全景生成模型,包括:
- 文本到全景和图像到全景的 API
- 模型架构(基于 MMDiT 的隐式透视到 ERP 映射)
- 配置参数
- 输出格式

---
## 世界生成
*即将发布。*
本节将记录世界生成流水线,包括:
- 轨迹规划配置
- 基于记忆驱动的视频生成进行世界扩展
- 世界组合(点云扩展 + 3DGS 优化)
- 从文本/图像到可导航3D世界的端到端生成