当前位置: 首页 > news >正文

无人机实战系列(番外一)本地图像+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 把控的好,但在近距离的物体上前者鲁棒性更高,后者虽然可以明显分割近景与远景,但近景处理粒度是明显低于前者的。

相关文章:

  • 算法-数据结构-图的构建(邻接矩阵表示)
  • 图数据库Neo4j面试内容整理-约束(Constraint)
  • C++面向对象编程技术研究
  • 6.1 - UART串口数据收发环回实验
  • 代码随想录第三十八天| 322. 零钱兑换 279.完全平方数 139.单词拆分 动态规划:关于多重背包,你该了解这些!
  • 布隆过滤器:一种简单而高效的集合查询方法
  • git中,如何查看具体单个文件的log
  • 3dtiles平移旋转工具制作
  • 今日运维之-Mac笔记本python环境问题
  • FFmpeg视频处理入门级教程
  • 汇编语言 第九章-转移指令的原理
  • Python GUI
  • OpenCV给图像添加噪声
  • 每日一题之铠甲合体
  • 代码随想录day21
  • 哈希表的复习
  • 25全国各省自考报名时间汇总⏰照片要求✅
  • 【附源码】基于opencv+pyqt5搭建的人脸识别系统
  • Golang 构建学习
  • 涉密载体管控系统革新:RFID技术引领,信息安全新境界
  • 秦洪看盘|热门股或将退潮,短线波动难免
  • 花290多万维修保质期仅一年多?媒体四问凤阳鼓楼“瓦片脱落”
  • “高原笑匠”、西藏著名表演艺术家扎西顿珠去世
  • 不止是生态优势,“浙江绿谷”丽水有活力
  • “宝马女司机驾车拖行虐猫”引关注,海口警方介入调查
  • 自然资源部:适应存量时代城市更新发展,严控增量盘活存量