Video Depth Anything Small · 动态宽高 ONNX FP32
由官方 Small 权重转换,未训练、微调或量化。单文件 116,528,885 字节,
SHA-256:eb5926ad36741e911c43cb010cc2f74604aa524744feeaf57979c178ede4bb99。只有 Small 的 Apache-2.0 权重包含在此包中。
这是 Reveric 使用的社区格式转换版本,并非原作者官方 ONNX 发布。模型文件可以独立下载; 本仓库不包含 Reveric 应用、原生运行库、用户视频或原始 PyTorch 权重。
文件与校验
| 文件 | 用途 |
|---|---|
video-depth-anything-small-dynamic-fp32.onnx |
116.5 MB 单文件模型,无外置权重文件 |
config.json |
输入输出、归一化、窗口参数、模型版本与上游来源 |
validation.json |
数值对照与运行验证摘要 |
SHA256SUMS / verify.py |
文件完整性校验及可选 CPU 冒烟测试 |
infer_window.py / requirements.txt |
单窗口推理示例及最小运行依赖 |
dynamic-export.py / export.py / requirements-export.txt |
开发阶段导出复现工具 |
LICENSE / NOTICE |
Apache-2.0 与原作者署名 |
下载后可使用标准 Python 3.11+ 校验,无需安装推理依赖:
python verify.py
可选 CPU 冒烟测试使用自动生成的合成输入:
python -m pip install -r requirements.txt
python verify.py --smoke
校验只证明文件完整性;数值精度依据 validation.json 中的独立 PyTorch 对照。
输入输出
- 输入
frames:float32[1,32,3,H,W],RGB,先除以 255,再按 mean[0.485,0.456,0.406]、std[0.229,0.224,0.225]逐通道归一化。 - 输出
depth:float32[1,32,H,W],相对逆深度,通常近处数值较大;不是米制距离或人体骨骼。 - 批次固定为 1、窗口固定为 32,只有 H/W 动态,宽高必须为 14 的倍数。
- CPU 推荐短边约 280,推理像素控制在 141,120 以内;横屏可用 504×280, 竖屏 280×504,方形 280×280。不是直接将 1080p/4K 视频送入模型。
- 按比例缩放后将宽高对齐到 14;极端画幅应进一步降低尺寸。输出深度再缩放回视频画幅。
- 动态轴不保证任意尺寸都已验收。已验证范围见下表;更大输入会显著增加内存和计算量。
推理
验证使用 ONNX Runtime 1.31.0 CPU,默认图优化,无自定义算子或优化器禁用项。
C++ 使用同版本 C/C++ API 即可,用户端无需 Python/PyTorch。
以下 Python 示例仅用于说明张量接口;frames 是按上面的要求准备好的 NumPy 数组:
import onnxruntime as ort
options = ort.SessionOptions()
options.intra_op_num_threads = 4
session = ort.InferenceSession(
"video-depth-anything-small-dynamic-fp32.onnx", options, providers=["CPUExecutionProvider"]
)
depth = session.run(["depth"], {"frames": frames})[0]
也可以将已缩放为 14 倍数的 32 帧 RGB 视频窗口存为 uint8 [32,H,W,3] 的 .npy 文件,
由示例脚本完成归一化和推理,输出 float32 [32,H,W]:
python infer_window.py frames.npy depth.npy
脚本不会解码视频、自动缩放或进行跨窗口对齐;这些步骤由调用方或原生运行时完成。
模型处理一个窗口。完整视频仍需官方窗口与对齐逻辑:步长 22、重叠 10,后续窗口
前 10 帧取上个窗口的 [0,12,24,25,26,27,28,29,30,31];尾部不足补最后一帧。
用两个参考帧拟合窗口间 scale/shift,混合 8 帧接缝,保留原视频实际帧数。
不要逐帧独立归一化;预览使用全片统一深度范围。完整算法见上游 infer_video_depth。
验证
同一真实视频派生的各尺寸输入,分别与未修改的官方 PyTorch 模型比较:
| 推理宽×高 | 归一化 RMSE |
|---|---|
| 504×280 | 7.64e-07 |
| 280×504 | 7.29e-07 |
| 280×280 | 5.86e-07 |
| 448×252 | 4.82e-07 |
| 266×154 | 1.35e-06 |
| 420×280 | 8.34e-07 |
C++ 145 帧完整视频(448×252,7 个窗口)与原始 PyTorch 视频流程对照,
归一化 RMSE 为 4.45e-07。阈值为 RMSE < 0.001、相关系数 > 0.999。
详细误差与采样内存见 validation.json。这些结果来自一台 macOS ARM64 主机,
不是跨机器性能基准;未验证 GPU、FP16 或 Windows。
额外的 C++ 竖屏 32 帧冒烟检查通过;前 24 帧与官方单窗口结果比较,后 8 帧仅检查有限值。
145 帧横屏与 32 帧竖屏任务的采样峰值物理内存分别约 1.59 GB、2.23 GB;尺寸会影响内存。
官方 1.31.0 macOS ARM64 预编译动态库的最低系统版本为 macOS 14;这属于运行库分发要求,
不属于 ONNX 文件格式的限制。
后续在同一主机上验证了自编译的 ONNX Runtime 1.31.0 CPU 裁剪库:145 帧输出与完整版 CPU 逐值一致。另用 280×280 合成视频完成 1000 帧推理、全片灰度映射和 40 秒 MP4 完整解码; 该任务峰值 memory footprint 约 1.17 GB,不代表其他尺寸的内存上限。 Reveric 的 macOS 宿主验证通过旋转/VFR、无音轨输出、素材入库和派生节点创建; 模型仓库仅记录验证摘要,不包含应用代码或运行库。
完整视频应保留原视频帧时间,不能因为模型窗口固定为 32 帧就固定视频帧率。 本模型估计相对深度,不能直接输出人体关键点、骨骼或米制距离。
导出复现
config.json 记录上游 commit 和原始权重 SHA-256。将该 commit 的源码放入
WORK/Video-Depth-Anything-4f5ae23172ba60fd7bc11ef671cca678842c7072,
将官方权重放入 WORK/video_depth_anything_vits.pth,安装 requirements-export.txt 后执行:
python dynamic-export.py --work WORK --output OUTPUT
导出验证使用 Python 3.12。WORK 和 OUTPUT 是自行选择的工作目录;导出脚本会校验
官方 Small 权重的 SHA-256。原始模型可从
官方 Small 仓库 获取,
源码版本为 4f5ae23172ba60fd7bc11ef671cca678842c7072。
既有导出曾重复生成相同 SHA-256;其他环境仍应自行比较结果,不能假定跨平台必然逐字节相同。
Python/PyTorch 仅用于开发阶段导出。适配仅改变导出表达:保留位置编码的 0.1 插值偏移及 518×518 特例、解除输出尺寸的整数固化、替换固定批次视频重排、将等价时序注意力写成 MatMul/Softmax;权重和 32 帧时间窗口不变。使用 opset 17,所有图节点均为标准 ONNX 算子。
原始项目:Video Depth Anything。
保留 LICENSE 与 NOTICE;本仓库是社区格式转换,并非模型作者的官方 ONNX 发布。