- 计算机视觉
- 深度学习
【免费下载链接】Metric-Video-Depth-Anything-Base-MLX
Metric-Video-Depth-Anything-Base-MLX 是一个运行在 Apple Silicon(MLX 框架)上的视频单目深度估计模型,由字节跳动 CVPR 2025 高亮论文 Video Depth Anything 的官方基座模型转换而来,能对任意长度视频逐帧输出以米为单位的绝对深度图。本文用 10 个高频问题,一次讲清它的用法、Metal fast-math 精度差异以及常见报错的排查方法。
问题 1:这个模型到底是什么?能做什么?
简单说,它把视频的每一帧"厚度化":输入一段视频,输出每帧的深度图(float32,形状(T, H, W)),深度值代表相机到物体的真实距离(米)。
它的架构由三部分组成:
- DINOv2 backbone(ViT-B 编码器):提取视觉特征
- DPT head:把特征解码为密集深度图
- AnimateDiff 风格的时序运动模块:保证长视频前后帧深度一致
模型文件就是仓库根目录下的 model.safetensors,配套元数据在 config.json 中。
问题 2:如何安装并加载模型?
只需一个短代码段(完整说明见 README.md 的 Usage 章节):
from mlx_vlm import load from mlx_vlm.models.video_depth_anything.generate import ( VideoDepthPredictor, read_video_frames, ) model, processor = load("mlx-community/Metric-Video-Depth-Anything-Base-MLX") predictor = VideoDepthPredictor(model, processor) frames, fps = read_video_frames("input.mp4", max_len=300, target_fps=15) depths = predictor.infer(frames) # (T, H, W) float32💡 注意:加载名是
mlx-community/...这个 MLX 仓库,不是PyTorch 原版仓库。
问题 3:为什么叫 "Metric"?它和普通深度模型有什么区别?
这是新手最容易混淆的点:
| 类型 | 输出含义 | 对齐方式 |
|---|---|---|
| 非 metric 模型 | 相对深度(只知道"近和远") | 需要窗口内 scale/shift 对齐 |
| Metric 模型(本仓库) | 绝对深度(米) | 跳过 scale/shift 对齐 |
config.json 中"metric": true就是它的身份标识。也就是说,输出的深度数值可以直接当物理距离用,不需要额外标定。
问题 4:Metal GPU 上结果为什么和 PyTorch 有约 1% 的偏差?
这是 README.md 中 Notes 部分明确说明的行为,不是 bug:
- 模型权重为fp32;
- 在 GPU(Metal)上,MLX 启用了Metal fast-math(快速数学近似,如更快的浮点运算路径),换来更高吞吐,代价是与 PyTorch 参考实现存在约 1% 的相对误差;
- 在CPU上逐帧对比,误差可达~1e-5(近乎比特级一致)。
对深度估计任务而言,1% 的相对差异通常完全可接受,无需担心。
问题 5:GPU 和 CPU 推理怎么选?
| 场景 | 推荐 | 原因 |
|---|---|---|
| 日常使用 / 批处理长视频 | GPU (Metal) | 速度快,~1% 误差无感 |
| 与 PyTorch 结果做严格对比 / 回归测试 | CPU | 误差 ~1e-5,结果可复现 |
| 无 Apple GPU(罕见) | CPU | MLX 主要面向 Apple Silicon |
一句话:要精度对齐选 CPU,要速度选 GPU,精度损失由 Metal fast-math 机制决定,属于正常设计。
问题 6:报错"尺寸不合法"?H 和 W 必须是 14 的倍数
这是最高频的踩坑点。输入张量的H 和 W 必须是 14 的倍数(对应 DINOv2 的 patch 划分),否则推理会直接报错。
正确做法:把画面缩放到如 518×518(518 = 14 × 37,正好是 preprocessor_config.json 中input_size的值)。
⚠️ 自查口诀:
H % 14 == 0 and W % 14 == 0,不满足就先用插值 resize。
问题 7:输入张量是什么格式?顺序错了会怎样?
输入采用channel-last格式:(B, T, H, W, 3)——通道在最后,和 PyTorch 常见的(B, C, T, H, W)顺序不同。
| 维度 | 含义 |
|---|---|
| B | batch |
| T | 帧数 |
| H / W | 高 / 宽(14 的倍数) |
| 3 | RGB 通道 |
把 channel 放到第 2 维是典型错误来源,报错往往表现为"广播失败"或输出全黑/全 NaN。
问题 8:长视频怎么控制长度?max_len 和 target_fps 怎么设?
read_video_frames("input.mp4", max_len=300, target_fps=15)两个参数配合使用:
- target_fps:目标采样帧率。原始视频 30fps 时设为 15,等于隔帧采样,直接减半计算量;
- max_len:最多送入多少帧。超过部分会被截断或分块,显存不够就先调小它。
经验值:先按target_fps=15、max_len=300试跑,OOM 就降到 150、96……逐步逼近你的内存上限。
问题 9:config.json 里的参数各是什么意思?
config.json 共 8 个字段,逐一看:
| 字段 | 值 | 含义 |
|---|---|---|
model_type | video_depth_anything | 架构类型 |
encoder | vitb | DINOv2 编码器规格(ViT-B) |
metric | true | 输出米制绝对深度 |
features | 128 | 骨干特征维度 |
out_channels | 96/192/384/768 | DPT head 四级输出通道 |
num_frames | 32 | 时序模块的参考帧数窗口 |
pe | ape | 位置编码方式(绝对位置编码) |
其中num_frames: 32决定了时序一致性模块一次参照多少帧,这也是长视频能保持深度不"漂移"的关键。
问题 10:常见报错排查清单 + 许可红线
按出现频率排序的排查表:
| 报错 / 现象 | 可能原因 | 解决办法 |
|---|---|---|
| 尺寸相关报错 | H/W 不是 14 的倍数 | resize 到 518 等 14 的倍数 |
| 输出形状奇怪 / NaN | 用了 channel-first 输入 | 改为(B, T, H, W, 3)channel-last |
| 内存溢出 (OOM) | max_len 或分辨率太大 | 调小max_len、降低分辨率 |
| 与 PyTorch 差 ~1% | Metal fast-math 正常行为 | 需要严格对齐时改用 CPU 推理 |
| load 失败 | 加载名写成了原版仓库名 | 使用mlx-community/Metric-Video-Depth-Anything-Base-MLX |
🔴最后的红线提醒:本仓库采用CC-BY-NC-4.0许可,与源 checkpoint 一致,仅限非商业使用,商业产品接入前务必确认合规。
快速小结
- 模型核心:DINOv2 + DPT + 时序模块,输出米制绝对深度;
- 精度:GPU 约 1%(Metal fast-math)、CPU 约 1e-5,都是预期行为;
- 三大铁律:14 的倍数、channel-last、先控制 max_len 再谈速度;
- 许可:CC-BY-NC-4.0,非商用。
仓库内文件索引:README.md | config.json | preprocessor_config.json | model.safetensors
- 计算机视觉
- 深度学习
【免费下载链接】Metric-Video-Depth-Anything-Base-MLX
相关推荐
Video-Depth-Anything-Large-MLX vs 原版PyTorch:精度约1%偏差与Metal fast-math深度对比
Video Depth Anything Large MLX vs 原版PyTorch:精度约1%偏差与Metal fast math深度对比 Video De
人工智能计算机视觉从PyTorch到MLX:Metric-Video-Depth-Anything-Base-MLX移植实现细节与Metal fast-math精度1%的秘密
从PyTorch到MLX:Metric Video Depth Anything Base MLX移植实现细节与Metal fast math精度1%的秘密 M
计算机视觉深度学习Video-Depth-Anything-Small-MLX 精度实测:Metal GPU 与 CPU 结果和 PyTorch 原版差距有多大?
Video Depth Anything Small MLX 精度实测:Metal GPU 与 CPU 结果和 PyTorch 原版差距有多大? Video D
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考