🚀 Depth Pro:一秒內實現清晰單目度量深度估計
我們推出了一種用於零樣本度量單目深度估計的基礎模型。我們的模型“Depth Pro”能夠合成具有無與倫比清晰度和高頻細節的高分辨率深度圖。其預測結果是具有絕對尺度的度量值,無需依賴相機內參等元數據。並且該模型速度極快,在標準GPU上僅需0.3秒就能生成一張225萬像素的深度圖。這些特性得益於多項技術創新,包括用於密集預測的高效多尺度視覺變換器、結合真實和合成數據集以實現高度量精度和精細邊界追蹤的訓練方案、用於評估估計深度圖邊界精度的專用評估指標,以及從單張圖像進行的最先進的焦距估計技術。
Depth Pro在論文 Depth Pro: Sharp Monocular Metric Depth in Less Than a Second 中被首次提出,作者為 Aleksei Bochkovskii、Amaël Delaunoy、Hugo Germain、Marcel Santos、Yichao Zhou、Stephan R. Richter 和 Vladlen Koltun。
本倉庫中的檢查點是一個參考實現,已經過重新訓練。其性能接近論文中報告的模型,但並不完全一致。

🚀 快速開始
請按照代碼倉庫中的步驟設置您的環境。然後您可以:
💻 使用示例
基礎用法
from huggingface_hub import PyTorchModelHubMixin
from depth_pro import create_model_and_transforms, load_rgb
from depth_pro.depth_pro import (create_backbone_model, load_monodepth_weights,
DepthPro, DepthProEncoder, MultiresConvDecoder)
import depth_pro
from torchvision.transforms import Compose, Normalize, ToTensor
class DepthProWrapper(DepthPro, PyTorchModelHubMixin):
"""Depth Pro網絡。"""
def __init__(
self,
patch_encoder_preset: str,
image_encoder_preset: str,
decoder_features: str,
fov_encoder_preset: str,
use_fov_head: bool = True,
**kwargs,
):
"""初始化Depth Pro。"""
patch_encoder, patch_encoder_config = create_backbone_model(
preset=patch_encoder_preset
)
image_encoder, _ = create_backbone_model(
preset=image_encoder_preset
)
fov_encoder = None
if use_fov_head and fov_encoder_preset is not None:
fov_encoder, _ = create_backbone_model(preset=fov_encoder_preset)
dims_encoder = patch_encoder_config.encoder_feature_dims
hook_block_ids = patch_encoder_config.encoder_feature_layer_ids
encoder = DepthProEncoder(
dims_encoder=dims_encoder,
patch_encoder=patch_encoder,
image_encoder=image_encoder,
hook_block_ids=hook_block_ids,
decoder_features=decoder_features,
)
decoder = MultiresConvDecoder(
dims_encoder=[encoder.dims_encoder[0]] + list(encoder.dims_encoder),
dim_decoder=decoder_features,
)
super().__init__(
encoder=encoder,
decoder=decoder,
last_dims=(32, 1),
use_fov_head=use_fov_head,
fov_encoder=fov_encoder,
)
model = DepthProWrapper.from_pretrained("apple/DepthPro-mixin")
transform = Compose(
[
ToTensor(),
Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5]),
]
)
model.eval()
image, _, f_px = depth_pro.load_rgb(image_path)
image = transform(image)
prediction = model.infer(image, f_px=f_px)
depth = prediction["depth"]
focallength_px = prediction["focallength_px"]
高級用法
boundary_f1 = SI_boundary_F1(predicted_depth, target_depth)
boundary_recall = SI_boundary_Recall(predicted_depth, target_mask)
📄 許可證
本項目使用的許可證為apple-amlr。
📚 詳細文檔
引用
如果您覺得我們的工作有用,請引用以下論文:
@article{Bochkovskii2024:arxiv,
author = {Aleksei Bochkovskii and Ama\"{e}l Delaunoy and Hugo Germain and Marcel Santos and
Yichao Zhou and Stephan R. Richter and Vladlen Koltun}
title = {Depth Pro: Sharp Monocular Metric Depth in Less Than a Second},
journal = {arXiv},
year = {2024},
}
致謝
我們的代碼庫基於多個開源貢獻構建而成,更多詳細信息請參閱致謝。
請查閱論文以獲取本工作中使用的完整參考文獻和數據集列表。
信息表格
屬性 |
詳情 |
模型類型 |
零樣本度量單目深度估計基礎模型 |
訓練數據 |
結合真實和合成數據集 |