Instructions to use brodatech/HY-World-2.0 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- HY-World-2.0
How to use brodatech/HY-World-2.0 with HY-World-2.0:
# No code snippets available yet for this library. # To use this model, check the repository files and the library's documentation. # Want to help? PRs adding snippets are welcome at: # https://github.com/huggingface/huggingface.js
- Notebooks
- Google Colab
- Kaggle
| # 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世界的端到端生成 | |