使用ZoeDepth生成深度估计图

news2024/9/27 17:24:29

目前单目深度估计分为两个派系,metric depth estimation(度量深度估计,也称绝对深度估计)和relative depth estimation(相对深度估计)。 ZoeDepth是 第一个结合相对和绝对深度的多模态单目深度估计网络。本博文仅记录使用ZoeDepth生成深度估计图的过程(因为直接按项目说明中进行使用会报错误)
项目地址: https://github.com/isl-org/ZoeDepth
论文地址: https://arxiv.org/pdf/2302.12288.pdf
在这里插入图片描述

1、基本概念

绝对深度估计: 估计物体绝对物理单位的深度,即米。预测绝对深度的优点是在计算机视觉和机器人技术的许多下游应用中具有实用价值,如建图、规划、导航、物体识别、三维重建和图像编辑。然而,绝对深度股即泛化能力(室外、室内)极差。因此,目前的绝对深度估计模型通常在特定的数据集上过拟合,而不能很好地推广到其他数据集。

相对深度估计: 估计每个像素与其它像素的相对深度差异,深度无尺度信息,可以各种类型环境中的估计深度。应用场景有限。

2、使用准备

在https://github.com/isl-org/ZoeDepth中介绍了基于torch hub初始化ZoeDepth模型的方法(不推荐,该操作经常导致报错),需要修改相关部分源码才可以正常加载模型。

2.1 下载项目

使用git下载项目,或者直接到github上下载项目源码并解压。

git clone https://github.com/isl-org/ZoeDepth.git && cd ZoeDepth

2.2 下载依赖

ZoeDepth项目在运行时仍然会调用torch.hub下载其他依赖性,使用python默认下载或许网速较慢。这里列出需要下载的数据,若自己电脑网络环境良好可以不同下载。
Downloading: "https://github.com/intel-isl/MiDaS/zipball/master" to C:\Users\Administrator/.cache\torch\hub\master.zip
Downloading: "https://github.com/isl-org/ZoeDepth/releases/download/v1.0/ZoeD_M12_N.pt" to C:\Users\Administrator/.cache\torch\hub\checkpoints\ZoeD_M12_N.pt
还有k、nk模型,有用到的可以下载,下载页为:https://github.com/isl-org/ZoeDepth/releases

2.3 修改代码

使用默认代码在加载使用模型时,会存在2个报错,需要进行修改。
1、zoedepth/models/model_io.py 第49行,修改为一下代码。这里加载权重时会存在部分key不匹配

 model.load_state_dict(state, strict=False) 

2、C:/Users/Administrator/.cache/torch/hub/intel-isl_MiDaS_master/midas/backbones/beit.py第94行的函数,替换为以下代码。这里是forward时不存在self.drop_path所引发的保存

def block_forward(self, x, resolution, shared_rel_pos_bias: Optional[torch.Tensor] = None):
    """
    Modification of timm.models.beit.py: Block.forward to support arbitrary window sizes.
    """ #HPG change
    if hasattr(self, 'drop_path'):
        if self.gamma_1 is None:
            x = x + self.drop_path(self.attn(self.norm1(x), resolution, shared_rel_pos_bias=shared_rel_pos_bias))
            x = x + self.drop_path(self.mlp(self.norm2(x)))
        else:
            x = x + self.drop_path(self.gamma_1 * self.attn(self.norm1(x), resolution,
                                                            shared_rel_pos_bias=shared_rel_pos_bias))
            x = x + self.drop_path(self.gamma_2 * self.mlp(self.norm2(x)))
    else:
        if self.gamma_1 is None:
            x = x + (self.attn(self.norm1(x), resolution, shared_rel_pos_bias=shared_rel_pos_bias))
            x = x + (self.mlp(self.norm2(x)))
        else:
            x = x + (self.gamma_1 * self.attn(self.norm1(x), resolution,
                                                            shared_rel_pos_bias=shared_rel_pos_bias))
            x = x + (self.gamma_2 * self.mlp(self.norm2(x)))
    return x

3、基本使用

3.1 加载模型

这里只推荐采用以下方式加载模型。注,若遇到模型下载缓慢需要可以按照2.2的步骤下载文件到指定位置

from zoedepth.models.builder import build_model
from zoedepth.utils.config import get_config
import torch
from zoedepth.utils.misc import colorize

# ZoeD_N
conf = get_config("zoedepth", "infer")
model_zoe_n = build_model(conf)

##### sample prediction
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
zoe = model_zoe_n.to(DEVICE)

k模型和nk模型的初始化代码如下

# ZoeD_K
conf = get_config("zoedepth", "infer", config_version="kitti")
model_zoe_k = build_model(conf)

# ZoeD_NK
conf = get_config("zoedepth_nk", "infer")
model_zoe_nk = build_model(conf)

3.2 进行预测

zoe预测图像所返回数据直接进行可视化是一片全黑,使用colorize函数可以将其值域进行拉伸并展示(扩展到0~25)。 其中myimshows函数源自https://hpg123.blog.csdn.net/article/details/124824892 ,将博文中的代码保存为imgutils.py即可。

import numpy as np
from PIL import Image
from imgutils import myimshows
image = Image.open(r"a14.jpg").convert("RGB")  # load
#image = Image.open(r"D:\AI_toolV.13\TouKui_jc/part2_000509.jpg").convert("RGB")  # load
#depth_pil = zoe.infer_pil(image, output_type="pil")  # as 16-bit PIL Image
depth = zoe.infer_pil(image)
colored = colorize(depth)
# save colored output
fpath_colored = "output_colored.png"
colored_img=Image.fromarray(colored)
colored_img.save(fpath_colored)

myimshows([np.array(image),colored],["ori","depth"])

3.3 预测结果

使用ZoeD_K的预测结果如下所示,可以发现当输入平视图时针对图像的上方整体预测效果不好
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1026322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity丨调色板丨颜色调色

文章目录 功能介绍功能展示技术细节小结 功能介绍 本文制作一个简单的调色板。拖动滑动条完成颜色变更。 功能展示 技术细节 需要把相应的三个滑动条和image拖拽赋值。 using UnityEngine; using UnityEngine.UI;public class ColorPicker : MonoBehaviour {public Slider …

高云FPGA系列教程(8):ARM串口数据接收(中断和轮询方式)

文章目录 [toc]1. GW1NSR-4C串口外设简介2. FPGA配置3. 常用函数4. 轮询方式接收数据5. 中断方式接收数据 本文是高云FPGA系列教程的第8篇文章。 本篇文章介绍片上ARM Cortex-M3硬核处理器串口外设的使用,演示轮询方式和中断方式接收串口数据,并进行回环…

【Java 基础篇】Executors工厂类详解

在多线程编程中,线程池是一项重要的工具,它可以有效地管理和控制线程的生命周期,提高程序的性能和可维护性。Java提供了java.util.concurrent包来支持线程池的创建和管理,而Executors工厂类是其中的一部分,它提供了一些…

MySQL数据库笔记

文章目录 一、初识MySQL1.1、什么是数据库1.2、数据库分类1.3、MySQL简介 二、操作数据库2.1、操作数据库(了解)2.2、数据库的列类型2.3、数据库的字段属性(重点)2.4、创建数据库表(重点)2.5、数据表的类型…

【PHPCUSTOM】打包PHP程序为EXE

目录 一、下载PHPCUSTOM 二、PHP网站打包 1、打开PHPCUSTOM 2、配置参数 3、生成exe文件 网上很多PHP程序打包成EXE的文章,但是都不能用,最后找到了PHPCUSTOM,使用PHPCUSTOM可以把PHP程序打包成exe。我们都知道PHP是服务端语言&#xff…

CCG超级标记

1. 定义 组合范畴语法(Combinatory Categorial Grammar,CCG)是一种用于自然语言语法分析的语言学理论和计算模型。它是一种形式文法,旨在描述句子的结构和语法规则(通过简练的描述形式表现出句子中各成分的句法语义关…

用VS Code运行C语言(安装VS Code,mingw的下载和安装)

下载并安装VS code。 安装扩展包: 此时,写完代码右键之后并没有运行代码的选项,如图: 接下来安装编译器mingw。 下载链接: https://sourceforge.net/projects/mingw-w64/ 得到压缩包: 解压: …

车载通信架构 —— SOME/IP 协议概述

车载通信架构 —— SOME/IP 协议概述 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 对学习而言,学习之后的思考、思考之后的行动、行动之后的改变更重要,如果不盯住内层的改变量,那么在表层投…

浅谈DBT的一些不足之处

DBT的好处是显而易见的,它支持连接多达41种数据库。而且不需要你写DDL语句,只要写select语句,DBT会自动帮你推断schema结构,将数据写入到数据库中: 但是使用了一段时间之后,发现DBT也存在着如下这些不足之处…

YOLOv5、YOLOv8改进:HorNet完全替换backone

1.简介 论文地址:https://arxiv.org/abs/2207.14284 代码地址:https://github.com/raoyongming/HorNet 视觉Transformer的最新进展表明,在基于点积自注意力的新空间建模机制驱动的各种任务中取得了巨大成功。在本文中,作者证明了…

pcl--第七节 点云配准

点云配准原理概述 点云配准需求场景 ​ 随着计算机辅助设计技术的发展,通过实物模型产生数字模型的逆向工程技术获得了越来越广泛的应用,与此同时,硬件设备的日趋完善也为数字模型操作提供了足够的技术支持。 ​ 由于三维扫描仪设备受到测…

win系统环境搭建(九)——Windows安装chatGPT

windows环境搭建专栏🔗点击跳转 win系统环境搭建(九)——Windows安装chatGPT 本系列windows环境搭建开始讲解如何给win系统搭建环境,本人所用系统是腾讯云服务器的Windows Server 2022,你可以理解成就是你用的windows…

FFmpeg5.1.3编译动态库详细教程(基于Linux虚拟机)

FFmpeg编译详细教程 FFmpeg编译详细教程 本文原创:猿视野 ( 一家分享技术架构思路,扩展程序员视野的网站,遇到技术问题,可以加联系方式相互交流) 转载请注明出处和相关链接,否则追究其法律责任! 原文地址:https://dev…

MyBatis之增删查改功能

文章目录 一、创建各种类二、MyBatis的各种功能 1、查询<select>2、增加<insert>3、修改<update>4、删除<delete>三、总结 前言 在MyBatis项目中编写代码实现对MySql数据库的增删查改 一、创建各种类 1、在Java包的mapper文件下创建一个接口 我创建…

“毛细血管”的进化:华为分销业务如何让伙伴也有“高能级”

作者 | 曾响铃 文 | 响铃说 数字化蓬勃发展的大时代&#xff0c;除了那些中、大型企业&#xff0c;数量更为庞大的小微企业同样有借助数字化产品、服务来提升企业经营的需求&#xff0c;由此也带来了广袤的数字化分销市场。 这里处在聚光灯之外&#xff0c;很少被数字化时代…

PyCharm安装教程,新手详细

首先进入官网&#xff1a;https://www.jetbrains.com/pycharm/download/?sectionwindows#sectionwindows 然后选择版本&#xff0c;我下载的是社区版&#xff0c;一般学习是够了 然后点击Download进行下载。 双击exe运行 然后选择安装路径&#xff0c;建议放在D盘 然后这…

找不到msvcp140.dll的解决方法,以及msvcp140.dll丢失的原因

在计算机使用过程中&#xff0c;我们可能会遇到无法启动程序的问题&#xff0c;提示找不到 msvcp140.dll。这使得许多用户感到困扰&#xff0c;因为 msvcp140.dll 是 Microsoft Visual C Redistributable 的一个组件&#xff0c;它包含了 C 运行时库。这个库对于许多应用程序和…

SpringCLoud——RabbitMQ的消息模型

Work Queue工作队列 他的主要作用就是增加消费者的个数&#xff0c;可以提高消息处理速度&#xff0c;避免队列消息堆积。 案例 实现一个队列绑定多个消费者 首先修改一下之前的发送消息的代码&#xff0c;让他循环发送50次&#xff0c;但是不要一次性发完&#xff1a; Tes…

React(react18)中组件通信04——redux入门

React&#xff08;react18&#xff09;中组件通信04——redux入门 1. 前言1.1 React中组件通信的其他方式1.2 介绍redux1.2.1 参考官网1.2.2 redux原理图1.2.3 redux基础介绍1.2.3.1 action1.2.3.2 store1.2.3.3 reducer 1.3 安装redux 2. redux入门例子3. redux入门例子——优…

【算法】二分答案

文章目录 相关链接什么时候使用二分答案&#xff1f;题目列表最大化最小化相关题目列表&#x1f4d5;2439. 最小化数组中的最大值解法1——二分答案解法2——分类讨论O(n) 2513. 最小化两个数组中的最大值&#xff08;二分答案lcm容斥原理&#xff09;&#x1f402;好题&#x…