DepthAnything试玩

2024-02-01 17:44
文章标签 试玩 depthanything

本文主要是介绍DepthAnything试玩,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文首发于公众号【DeepDriving】,欢迎关注。

0. 引言

最近看到一个叫Depth Anything单目深度估计模型火了,于是抽空把代码和模型下载下来体验了一下,发现确实是很强大。

论文链接:https://arxiv.org/pdf/2401.10891.pdf

代码链接:https://github.com/LiheYoung/Depth-Anything

项目主页: https://depth-anything.github.io/

本文只记录如何使用官方代码跑demo,以及如何导出onnx模型并用onnxruntime做部署。

1. 使用官方代码跑demo

首先从GitHub把代码clone下来:

git clone https://github.com/LiheYoung/Depth-Anything

然后安装依赖库:

cd Depth-Anything
pip install -r requirements.txt

依赖库比较少,搭建环境非常简单,装好以后就可以跑demo了。如果是输入图像,那么可以执行下面的脚本:

python run.py --encoder <vits | vitb | vitl> --img-path <img-directory | single-img | txt-file> --outdir <outdir>

比如:

python run.py --encoder vitb --img-path ../test.jpg --outdir output/

--img-path参数可以是单张图像的路径、存放多张图片的文件夹的路径、存放一系列图像路径的TXT文件的路径。目前官方发布了三个模型:depth_anything_vits14.pth,depth_anything_vitb14.pth,depth_anything_vitl14.pth,分别与参数里的vits, vitb,vitl对应。执行上面的命令后,会自动从Huggingface的网站上下载对应的模型。不过需要注意的是,国内目前无法访问Huggingface。怎么办呢?不用慌,我们可以使用Huggingface的镜像网站。首先在命令行执行下面的命令设置一下环境变量:

export HF_ENDPOINT=https://hf-mirror.com

然后再运行run.py脚本就可以愉快地跑模型了,脚本会把结果输出到--outdir参数指定的目录中。下面是我用nuScenes数据集中的图片跑出来的结果:

如果需要跑视频,那么可以用run_video.py脚本:

python run_video.py --encoder vitb --video-path assets/examples_video --outdir output/

2. onnx模型部署

2.1 导出onnx模型

导出onnx模型的方法可以参考下面这个仓库:

https://github.com/fabio-sim/Depth-Anything-ONNX

把代码下载下来后运行export.py脚本即可导出onnx模型:

python export.py --model s # s对应vits模型

导出的onnx模型默认存放在weights/目录下。在这个脚本中,同样会去Huggingface网站上下载PyTorch模型,因此需要用镜像网站替换一下。替换方法很简单,就是把代码中指定的链接将huggingface.co直接替换为hf-mirror.com

depth_anything.to(device).load_state_dict(torch.hub.load_state_dict_from_url(f"https://hf-mirror.com/spaces/LiheYoung/Depth-Anything/resolve/main/checkpoints/depth_anything_vit{model}14.pth",map_location="cpu",),strict=True,)

另外,这个脚本导出onnx模型的时候是使用的动态参数模型,如果不想用动态参数可以把dynamic_axes参数去掉改成静态模式。导出的onnx模型还可以使用onnx-simplifier工具简化一下。

2.2 用onnxruntime部署onnx模型

之前写了两篇用onnxruntime部署onnx模型的文章,大家可以参考一下:

AI模型部署 | onnxruntime部署YOLOv8分割模型详细教程

AI模型部署 | onnxruntime部署RT-DETR目标检测模型

部署Depth Anything模型也是差不多的流程。加载好onnx模型后,首先需要对输入图像做预处理,预处理的时候需要做减均值再除以标准差对图像数据做规范化,其他处理操作与YOLOv8RT-DETR是一样的。预处理函数preprocess的实现如下:

def preprocess(bgr_image,width,height,mean=[123.675, 116.28, 103.53],std=[58.395, 57.12, 57.375],
):image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2RGB)image = cv2.resize(image, (width, height)).astype(np.float32)image = (image - mean) / stdimage = np.transpose(image, (2, 0, 1)).astype(np.float32)input_tensor = np.expand_dims(image, axis=0)return input_tensor

输入数据准备好以后,就可以送入模型进行推理:

outputs = session.run(None, {session.get_inputs()[0].name: input_tensor})

得到模型推理结果后,只需要做一点简单的后处理操作就可以了:

depth = outputs[0][0]  
depth = np.transpose(depth, [1, 2, 0]) #chw->hwcdepth = cv2.normalize(depth,None, 0,255,cv2.NORM_MINMAX,cv2.CV_8UC1)
colormap = cv2.applyColorMap(depth,cv2.COLORMAP_INFERNO)
colormap = cv2.resize(colormap,(image_width,image_height))
combined_results = cv2.hconcat([image, colormap])

后处理的时候首先调用OpenCVnormalize函数将深度图的像素值调整到[0,255]的范围内,然后调用applyColorMap函数对深度图进行伪彩色化(单纯为了好看,可以不做)。最终得到的结果大概是这个样子的:

模型输入尺寸设置为518x518batch size设置为1,在GeForce RTX 3090显卡上3个模型的耗时如下:

模型模型精度耗时
depth_anything_vits14.onnxFP3216 ms
depth_anything_vitb14.onnxFP3242 ms
depth_anything_vitl14.onnxFP3290 ms

4. 参考资料

  • https://github.com/LiheYoung/Depth-Anything
  • https://github.com/fabio-sim/Depth-Anything-ONNX

这篇关于DepthAnything试玩的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/667985

相关文章

Mako 试玩|编译速度6到飞起!

嗨!我是小谷,大家好久不见~ 今天想和大家分享的技术是 Mako , 一款编译构建速度比 webpack 快 10 倍~100 倍的前端构建工具。 网上有传言将 Mako 比作前端脚手架里的 鲨鱼心脏 ,有了它,前端工程师工作的幸福指数可以提升好多倍,那么就让我们一起来看看 Mako 究竟有什么魅力吧! 什么是 Mako? 近年来,前端领域的脚手架层出不穷,前有开山鼻祖 Webpack ,

cocos发布unity平台试玩广告失败问题

前言 关于如何输出试玩广告和平台文档中的说明就不赘述了,下面主要介绍在发布过程中遇到的问题。 检测不到mraid.open()或应用商店链接 提示: Creative pack validation failed: Your responsive playable is missing mraid.open() Your responsive playable is missing a st

试玩UML(User Mode Linux)

这里的UML并非指统一建模语言,而指用户模式的linux。顾名思义,就是让linux系统作为一个用户进程运行。为什么要这样做呢?大家都知道调试linux 内核是件麻烦的事情,虽然可以使用kdb、gdb或者虚拟机来调试内核,但这些本身方法都有一些限制,而且我总感觉使用很麻烦,几次尝试失败后,没有再去调试过linux内核。   Linux内核对调试支持力度不够,并非是因为实现起来很困难,而是因为他

游戏试玩站打码zq平台系统可运营的任务网源码

安装说明 1.恢复数据; 2.数据连接库配置路径:protected\config\mail.php 文件中修改第60行 (记得不要用记事本修改,否则可能会出现验证码显示不了问题,建议用Notepad++) 3.浏览器访问输入 127.0.0.2 显示界面即成功 4.后台网址:http://域名/houtai/login/show 账号:admin 密码:admin 图片演示 源码

公司废弃的2014年群晖 DS215J 被我打包回家了,试玩一下

文章目录 简介安装查看存储、cpu、内存等信息DMS 学习video station 简介 群晖DS215J https://www.datastoreworks.com/DS215j.asp 下载:chrome-extension://oemmndcbldboiebfnladdacbdfmadadm/https://global.download.synology.com/

cocos发布试玩广告关于mraid的处理,以及跳转渠道链接

前言 前段时间将制作完的试玩广告上传Applovin平台失败,反馈说需要对mraid和跳转进行处理。 解决方案 打完包之后需要编辑HTML文件,将mraid.js删除。 打开渠道链接之前用的cocos自带的openUrl接口,平台方反馈直接调用mraid.open()即可。报红不需要处理。

higan(bsnes)游戏模拟器的编译和试玩

higan 是一款开源的游戏模拟器实现,这里直接引用英文介绍: higan (formerly bsnes) is a Nintendo multi-system emulator that began development on 2004-10-14. It currently supports the following systems: Nintendo FamicomNintend

字节发布AnimateDiff-Lightning文生视频模型——可在线免费试玩

Sora文生视频大模型 随着Sora文生视频大模型的爆火,文生视频大模型必定是各大人工智能公司竞争的主要领域。虽然 Sora模型的视频效果绝对是领先地位,但是Sora模型目前还没有开放使用,我们并无法直接使用。前期我们也介绍过字节发布的MagicVideo2文生视频模型,但是MagicVideo2并没有提供开源或者试用地址。 MagicVideo2文生视频大模型 本期我们介绍

cocos使用playable ads adapter打包试玩广告报错RangeError: Invalid string length

前言 最近有做试玩广告的需求,引擎用的cocos,打包使用的playable ads adapter插件。不过最近打包遇到个奇怪的问题,就是通过插件打包报错RangeError: Invalid string length。因为之前也用空包和早期项目测试过都能顺利打包,经过一步步排查找到了问题所在。在这里记录一下,如果有遇到同样问题的可以节省时间。 解决方案 检查项目的压缩纹理设置,如果有部

罗技G29游戏方向盘试玩拆解,带震动力反馈

1.正好有时间记录下  自己的爱好 一千多的罗技G29游戏方向盘试玩拆解,带震动力反馈,值这个价吗_哔哩哔哩_bilibili 一千多的罗技G29游戏方向盘试玩拆解,带震动力反馈,值这个价吗_哔哩哔哩_bilibili 2.拆解 3.2个大电机 4.主控芯片 ARM   STM32L100 5.霍尔传感器  统计圈数用的 6. 555的电机  搭配42W