无人机实战系列(番外一)本地图像+Apple ML Depth Pro

这篇文章作为系列文章 “无人机实战系列” 的一篇番外文章,主要测试了下 Apple 推出的一个基于机器学习的单目图像转深度的工具 ml-depth-pro,这个也是我在找这方面工具时意外发现的一个仓库,后期仍然会以 Depth Anything V2 为主线进行记录。

为了节省大家时间,我可以在文章开头给一个粗略结论:

  • 近景效果:Depth Anything V2 > Depth Pro
  • 远景分割:Depth Pro > Depth Anything V2
  • 轮廓细节:Depth Pro > Depth Anything V2
  • 耗时:Depth Pro > Depth Anything V2

如果你在知道这个情况的前提下仍然对 Apple 的这款产品感兴趣,那么可以继续看下去。


Step1. 拉取远程仓库

拉取仓库:

$ git clone git@github.com:apple/ml-depth-pro.git

安装依赖:

$ pip install -e .

Apple只提供了一个预训练模型,大小大概 1.77 GB,我在我的网盘中上传了这个模型,因此这里有两个方式供你选择:

【方式一】使用官方脚本拉取:

$ source get_pretrained_models.sh

【方式二】从网盘中下载并存放到指定位置:

$ mkdir checkpoints

模型链接: https://pan.baidu.com/s/1LYozaslxRJnmooktPsulTg?pwd=m6jy 提取码: m6jy 

Step2. 编写测试代码

这里还是以我自己拍摄的一张餐桌图片为例:

图片链接: https://pan.baidu.com/s/1o67WUCRKuip8A2p6V1pmow?pwd=13ns 提取码: 13ns

当前文件结构如下:

(base) gaohao@Server:~/Desktop/RemoteTools/ml-depth-pro$ tree
.
├── ACKNOWLEDGEMENTS.md
├── checkpoints
│   └── depth_pro.pt
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── data
│   ├── depth-pro-teaser.jpg
│   └── example.jpg
├── demo.py                   # 示例代码
├── dining-table.jpg          # 示例图片
├── get_pretrained_models.sh
├── LICENSE
├── pyproject.toml
├── README.md
└── src
    └── depth_pro

示例代码demo.py

import cv2
import numpy as np
import torch
from src import depth_pro
from PIL import Image

image_path = "./dining-table.jpg"

# Load model and preprocessing transform
model, transform = depth_pro.create_model_and_transforms()
model.eval()
print("Model eval done.")

# Load and preprocess an image.
image, _, f_px = depth_pro.load_rgb(image_path)
image_pil = image.copy()  # Keep a copy of the original image
image = transform(image)
print("Image transform done.")

# Run inference.
prediction = model.infer(image, f_px=f_px)
depth = prediction["depth"]  # Depth in [m].
print("model infer done.")

# Convert PIL image to OpenCV format
image_cv = np.array(image_pil)
image_cv = cv2.cvtColor(image_cv, cv2.COLOR_RGB2BGR)

# Convert depth Tensor to NumPy array
if isinstance(depth, torch.Tensor):
    depth = depth.cpu().detach().numpy()  # Ensure it's a NumPy array

# Normalize depth map for visualization
depth_normalized = 1.0 - (depth - depth.min()) / (depth.max() - depth.min())
depth_colormap = (depth_normalized * 255).astype(np.uint8)
depth_colormap = cv2.applyColorMap(depth_colormap, cv2.COLORMAP_JET)

# Display images using OpenCV
cv2.imshow('Original Image', image_cv)
cv2.imshow('Depth Map', depth_colormap)
cv2.imwrite("./result.png", depth_colormap)
cv2.waitKey(0)
cv2.destroyAllWindows()

Step3. 与Depth-Anything V2 的对比

因为Apple只提供了一个规格的预训练文件,因此在对比时Deep Anything V2的预训练模型也使用等体量的模型 Depth-Anything-V2-Large 1.34 GB

原始图像Deep Anything V2 - LargeApple ML Depth Pro
在这里插入图片描述在这里插入图片描述在这里插入图片描述

总体上看 Depth-Anything V2 的细节没有 Depth Pro 把控的好,但在近距离的物体上前者鲁棒性更高,后者虽然可以明显分割近景与远景,但近景处理粒度是明显低于前者的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值