ONNX 模型库
返回模型

说明文档

DA-2 WebGPU 移植版

本仓库包含 DA-2 (Depth Anything in Any Direction) 模型的移植版本,可使用 WebGPU 和 ONNX Runtime 完全在浏览器中运行。

原始工作由 EnVision-Research 开发。此移植版本支持实时、客户端全景图像深度估计,无需后端服务器进行推理。

🔗 原始工作

DA<sup>2</sup>: Depth Anything in Any Direction

如果您使用本工作,请引用原始论文:

@article{li2025da2,
  title={DA2: Depth Anything in Any Direction},
  author={Li, Haodong and Zheng, Wangguangdong and He, Jing and Liu, Yuhao and Lin, Xin and Yang, Xin and Chen, Ying-Cong and Guo, Chunchao},
  journal={arXiv preprint arXiv:2509.26618},
  year={2025}
}

🚀 WebGPU 演示

本项目包含一个基于 Web 的演示,可直接在浏览器中运行模型。

前置要求

  • Python 3.10+(用于模型导出)
  • 支持 WebGPU 的浏览器(Chrome 113+、Edge 113+ 或 Firefox Nightly)

安装

  1. 克隆仓库:

    git clone <your-repo-url>
    cd DA-2-Web
    
  2. 设置 Python 环境:

    python3 -m venv venv
    source venv/bin/activate  # Windows 上使用: venv\Scripts\activate
    pip install -r requirements.txt
    

模型准备

运行演示前,首先需要将 PyTorch 模型转换为 ONNX 格式。

  1. 下载模型权重: 从 HuggingFace 仓库 下载 model.safetensors,并将其放置在本项目根目录下。

  2. 导出为 ONNX: 运行导出脚本。该脚本会处理转换为 FP16 的过程,并应用 WebGPU 兼容性所需的修复(例如将 clamp 替换为 max/min)。

    python export_onnx.py
    

    这将生成 da2_model.onnx。

  3. 合并 ONNX 文件: 导出过程可能会生成外部数据文件。使用合并脚本创建单个 .onnx 文件,便于 Web 端加载。

    python merge_onnx.py
    

    这将生成 da2_model_single.onnx。

运行演示

  1. 启动本地 Web 服务器: 需要通过 HTTP(S) 提供文件服务,以便浏览器加载模型和 WebGPU 上下文。

    python3 -m http.server 8000
    
  2. 在浏览器中打开: 在支持 WebGPU 的浏览器中访问 http://localhost:8000/web/。

  3. 使用方法:

    • 点击"Choose File"上传全景图像。
    • 点击"Run Inference"生成深度图。
    • 整个过程完全在本地 GPU 上运行。

🛠️ 移植技术细节

  • 精度: 模型已转换为 FP16(半精度),以减小文件体积(~1.4GB -> ~700MB)并提升消费级 GPU 上的性能。
  • Opset: 使用 ONNX Opset 17 导出。
  • 修改内容:
    • 修改了 SphereViT 和 ViT_w_Esphere 模块以确保严格的 FP16 兼容性。
    • 将 torch.clamp 操作替换为 torch.max 和 torch.min 组合,以避免 onnxruntime-web 在处理混合标量/张量输入时的 Clip 算子问题。
    • 球面嵌入已预先计算并在模型图中转换为 FP16。

📄 许可证

本项目遵循原始 DA-2 仓库 的许可证。请参阅原始仓库了解许可证详情。

phiph/DA-2-WebGPU

作者 phiph

↓ 1 ♥ 0

创建时间: 2025-11-27 22:03:09+00:00

更新时间: 2025-11-27 22:44:48+00:00

在 Hugging Face 上查看

文件 (190)

.gitattributes
.gitignore
DA-2-repo/LICENSE
DA-2-repo/README.md
DA-2-repo/app.py
DA-2-repo/assets/badges/icon2.png
DA-2-repo/assets/badges/teaser.jpg
DA-2-repo/assets/demos/a0.png
DA-2-repo/assets/demos/a1.png
DA-2-repo/assets/demos/a10.png
DA-2-repo/assets/demos/a11.png
DA-2-repo/assets/demos/a2.png
DA-2-repo/assets/demos/a3.png
DA-2-repo/assets/demos/a4.png
DA-2-repo/assets/demos/a5.png
DA-2-repo/assets/demos/a6.png
DA-2-repo/assets/demos/a7.png
DA-2-repo/assets/demos/a8.png
DA-2-repo/assets/demos/a9.png
DA-2-repo/assets/demos/b0.png
DA-2-repo/assets/demos/b1.png
DA-2-repo/assets/demos/b2.png
DA-2-repo/assets/demos/b3.png
DA-2-repo/assets/demos/b4.png
DA-2-repo/assets/demos/b5.png
DA-2-repo/assets/masks/b0.png
DA-2-repo/assets/masks/b1.png
DA-2-repo/assets/masks/b2.png
DA-2-repo/assets/masks/b3.png
DA-2-repo/assets/masks/b4.png
DA-2-repo/assets/masks/b5.png
DA-2-repo/configs/accelerate/0.yaml
DA-2-repo/configs/accelerate/1.yaml
DA-2-repo/configs/accelerate/2.yaml
DA-2-repo/configs/accelerate/3.yaml
DA-2-repo/configs/accelerate/4.yaml
DA-2-repo/configs/accelerate/5.yaml
DA-2-repo/configs/accelerate/6.yaml
DA-2-repo/configs/accelerate/7.yaml
DA-2-repo/configs/eval.json
DA-2-repo/configs/infer.json
DA-2-repo/eval.py
DA-2-repo/eval.sh
DA-2-repo/eval/__init__.py
DA-2-repo/eval/datasets/__init__.py
DA-2-repo/eval/datasets/base_depth_dataset.py
DA-2-repo/eval/datasets/matterport3d_dataset.py
DA-2-repo/eval/datasets/panosuncg_dataset.py
DA-2-repo/eval/datasets/splits/2d3ds.txt
DA-2-repo/eval/datasets/splits/matterport3d.txt
DA-2-repo/eval/datasets/splits/panosuncg.txt
DA-2-repo/eval/datasets/stanford2d3ds_dataset.py
DA-2-repo/eval/utils/__init__.py
DA-2-repo/eval/utils/alignment.py
DA-2-repo/eval/utils/infer.py
DA-2-repo/eval/utils/io.py
DA-2-repo/eval/utils/metric.py
DA-2-repo/infer.py
DA-2-repo/infer.sh
DA-2-repo/src/da2.egg-info/PKG-INFO
DA-2-repo/src/da2.egg-info/SOURCES.txt
DA-2-repo/src/da2.egg-info/dependency_links.txt
DA-2-repo/src/da2.egg-info/requires.txt
DA-2-repo/src/da2.egg-info/top_level.txt
DA-2-repo/src/da2/__init__.py
DA-2-repo/src/da2/model/__init__.py
DA-2-repo/src/da2/model/base.py
DA-2-repo/src/da2/model/dinov2/__init__.py
DA-2-repo/src/da2/model/dinov2/attention.py
DA-2-repo/src/da2/model/dinov2/block.py
DA-2-repo/src/da2/model/dinov2/dino_head.py
DA-2-repo/src/da2/model/dinov2/dinovit.py
DA-2-repo/src/da2/model/dinov2/drop_path.py
DA-2-repo/src/da2/model/dinov2/layer_scale.py
DA-2-repo/src/da2/model/dinov2/mlp.py
DA-2-repo/src/da2/model/dinov2/patch_embed.py
DA-2-repo/src/da2/model/dinov2/swiglu_ffn.py
DA-2-repo/src/da2/model/sphere.py
DA-2-repo/src/da2/model/spherevit.py
DA-2-repo/src/da2/model/vit_w_esphere.py
DA-2-repo/src/da2/utils/__init__.py
DA-2-repo/src/da2/utils/base.py
DA-2-repo/src/da2/utils/d2pc.py
DA-2-repo/src/da2/utils/io.py
DA-2-repo/src/da2/utils/model.py
DA-2-repo/src/da2/utils/vis.py
DA-2-repo/src/pyproject.toml
HF_MODEL_CARD.md
README.md
check_onnx_inputs.py
config.json
export_onnx.py
model.onnx.data
onnx/model.onnx ONNX
onnx/model_quantized.onnx ONNX
preprocessor_config.json
requirements.txt
temp_hf_repo/.gitattributes
temp_hf_repo/.gitignore
temp_hf_repo/DA-2-repo/LICENSE
temp_hf_repo/DA-2-repo/README.md
temp_hf_repo/DA-2-repo/app.py
temp_hf_repo/DA-2-repo/assets/badges/icon2.png
temp_hf_repo/DA-2-repo/assets/badges/teaser.jpg
temp_hf_repo/DA-2-repo/assets/demos/a0.png
temp_hf_repo/DA-2-repo/assets/demos/a1.png
temp_hf_repo/DA-2-repo/assets/demos/a10.png
temp_hf_repo/DA-2-repo/assets/demos/a11.png
temp_hf_repo/DA-2-repo/assets/demos/a2.png
temp_hf_repo/DA-2-repo/assets/demos/a3.png
temp_hf_repo/DA-2-repo/assets/demos/a4.png
temp_hf_repo/DA-2-repo/assets/demos/a5.png
temp_hf_repo/DA-2-repo/assets/demos/a6.png
temp_hf_repo/DA-2-repo/assets/demos/a7.png
temp_hf_repo/DA-2-repo/assets/demos/a8.png
temp_hf_repo/DA-2-repo/assets/demos/a9.png
temp_hf_repo/DA-2-repo/assets/demos/b0.png
temp_hf_repo/DA-2-repo/assets/demos/b1.png
temp_hf_repo/DA-2-repo/assets/demos/b2.png
temp_hf_repo/DA-2-repo/assets/demos/b3.png
temp_hf_repo/DA-2-repo/assets/demos/b4.png
temp_hf_repo/DA-2-repo/assets/demos/b5.png
temp_hf_repo/DA-2-repo/assets/masks/b0.png
temp_hf_repo/DA-2-repo/assets/masks/b1.png
temp_hf_repo/DA-2-repo/assets/masks/b2.png
temp_hf_repo/DA-2-repo/assets/masks/b3.png
temp_hf_repo/DA-2-repo/assets/masks/b4.png
temp_hf_repo/DA-2-repo/assets/masks/b5.png
temp_hf_repo/DA-2-repo/configs/accelerate/0.yaml
temp_hf_repo/DA-2-repo/configs/accelerate/1.yaml
temp_hf_repo/DA-2-repo/configs/accelerate/2.yaml
temp_hf_repo/DA-2-repo/configs/accelerate/3.yaml
temp_hf_repo/DA-2-repo/configs/accelerate/4.yaml
temp_hf_repo/DA-2-repo/configs/accelerate/5.yaml
temp_hf_repo/DA-2-repo/configs/accelerate/6.yaml
temp_hf_repo/DA-2-repo/configs/accelerate/7.yaml
temp_hf_repo/DA-2-repo/configs/eval.json
temp_hf_repo/DA-2-repo/configs/infer.json
temp_hf_repo/DA-2-repo/eval.py
temp_hf_repo/DA-2-repo/eval.sh
temp_hf_repo/DA-2-repo/eval/__init__.py
temp_hf_repo/DA-2-repo/eval/datasets/__init__.py
temp_hf_repo/DA-2-repo/eval/datasets/base_depth_dataset.py
temp_hf_repo/DA-2-repo/eval/datasets/matterport3d_dataset.py
temp_hf_repo/DA-2-repo/eval/datasets/panosuncg_dataset.py
temp_hf_repo/DA-2-repo/eval/datasets/splits/2d3ds.txt
temp_hf_repo/DA-2-repo/eval/datasets/splits/matterport3d.txt
temp_hf_repo/DA-2-repo/eval/datasets/splits/panosuncg.txt
temp_hf_repo/DA-2-repo/eval/datasets/stanford2d3ds_dataset.py
temp_hf_repo/DA-2-repo/eval/utils/__init__.py
temp_hf_repo/DA-2-repo/eval/utils/alignment.py
temp_hf_repo/DA-2-repo/eval/utils/infer.py
temp_hf_repo/DA-2-repo/eval/utils/io.py
temp_hf_repo/DA-2-repo/eval/utils/metric.py
temp_hf_repo/DA-2-repo/infer.py
temp_hf_repo/DA-2-repo/infer.sh
temp_hf_repo/DA-2-repo/src/da2/__init__.py
temp_hf_repo/DA-2-repo/src/da2/model/__init__.py
temp_hf_repo/DA-2-repo/src/da2/model/base.py
temp_hf_repo/DA-2-repo/src/da2/model/dinov2/__init__.py
temp_hf_repo/DA-2-repo/src/da2/model/dinov2/attention.py
temp_hf_repo/DA-2-repo/src/da2/model/dinov2/block.py
temp_hf_repo/DA-2-repo/src/da2/model/dinov2/dino_head.py
temp_hf_repo/DA-2-repo/src/da2/model/dinov2/dinovit.py
temp_hf_repo/DA-2-repo/src/da2/model/dinov2/drop_path.py
temp_hf_repo/DA-2-repo/src/da2/model/dinov2/layer_scale.py
temp_hf_repo/DA-2-repo/src/da2/model/dinov2/mlp.py
temp_hf_repo/DA-2-repo/src/da2/model/dinov2/patch_embed.py
temp_hf_repo/DA-2-repo/src/da2/model/dinov2/swiglu_ffn.py
temp_hf_repo/DA-2-repo/src/da2/model/sphere.py
temp_hf_repo/DA-2-repo/src/da2/model/spherevit.py
temp_hf_repo/DA-2-repo/src/da2/model/vit_w_esphere.py
temp_hf_repo/DA-2-repo/src/da2/utils/__init__.py
temp_hf_repo/DA-2-repo/src/da2/utils/base.py
temp_hf_repo/DA-2-repo/src/da2/utils/d2pc.py
temp_hf_repo/DA-2-repo/src/da2/utils/io.py
temp_hf_repo/DA-2-repo/src/da2/utils/model.py
temp_hf_repo/DA-2-repo/src/da2/utils/vis.py
temp_hf_repo/DA-2-repo/src/pyproject.toml
temp_hf_repo/HF_MODEL_CARD.md
temp_hf_repo/README.md
temp_hf_repo/config.json
temp_hf_repo/export_onnx.py
temp_hf_repo/onnx/model.onnx ONNX
temp_hf_repo/preprocessor_config.json
temp_hf_repo/requirements.txt
temp_hf_repo/web/index.html
temp_hf_repo/web/script.js
web/index.html
web/script.js