最强无监督单目深度估计Baseline--MonoViT--简介与代码复现

news2024/11/19 5:35:28

1. 无监督单目深度估计

   单目深度估计是指,借助于深度神经网络,从单张输入视图中推理场景的稠密深度信息;该技术可以广泛用于自动驾驶、虚拟现实、增强现实等依赖于三维场景感知理解的领域,同时也可以为其他视觉任务提供多模态深度信息,辅助其他任务感知的精确性。

  由于不需要标签信息而仅依据单目视频序列 or 双目立体图像对 即可训练的这一巨大优势,无监督单目深度估计框架收到了越来越多的关注,并且当前的性能已经能比肩早期有监督训练方法。

  随着monodepth2框架在网络预训练、损失函数设计等方面的创新,无监督训练得到的单目深度估计模型在对场景中几何细节方面的深度感知方面表现出了令人满意的性能和精度。

 本文以及自监督单目深度估计的榜单,MDEB,对当前基于单目图像序列的自监督单目深度估计的SOTA/最优方案,MonoViT,进行介绍,并对其开源代码进行复现,开源代码地址:GitHub - zxcqlf/MonoViT: Self-supervised monocular depth estimation with a vision transformerSelf-supervised monocular depth estimation with a vision transformer - GitHub - zxcqlf/MonoViT: Self-supervised monocular depth estimation with a vision transformerhttps://github.com/zxcqlf/MonoViT

2. MonoViT

MonoViT 发表于2022年三维视觉国际会议 3DV, 凭借其出色的精确性和泛化性,一经发表便得到了大量的关注,并有望成为新的基线方法!

和monodepth2相比, MonoViT的创新点主要在于深度估计网络框架的设计,简单来说,采用CNN+Transformer的网络结构替代了之前常用的resnet网络结构,凭借CNN局部细节感知能力与Transformer全局长程特征提取能力的结合,实现在KITTI数据集上的SOTA性能!

其编码器采用了发表于2022 CVPR的MPVIT结构,主要特点是该编码器将CNN和Transformer框架的有机融合,实现了十分有效的图像特征提取能力;解码器部分,主要源自HR-Depth方法中设计的多尺度特征融合解码,促进不同尺度特征的有效融合。

该方案在KITTI 数据集上的精确性表现十分惊讶,首次将Abs_Rel 误差指标打到了0.1以下,同时精确性指标σ1达到了0.9以上。

同时,凭借Transformer+CNN在前景背景关系,尺度变化感知等方向的有效性,其在不同天气状况下的泛化性同样表现惊人,与同期最优方法相比,优势明显!同时,在最新的针对单目深度估计方法的泛化性榜单RoboDepth上,MonoViT的泛化性结果同样是一骑绝尘!

 3. 复现

 虽然MonoViT开源了相关代码以及模型,但是由于版权限制,其github上的代码并不完整,有些重要地方没有被作者公开,从而使得在复现过程中可能会有碰到复现结果和论文结果性能存在差异性的问题。

3.1 环境配置

在环境配置上,依照官方建议版本设定按照相关依赖,这一般不会有问题,注意一点的是mmcv-full需要多等待一会,有些耐心,安装相对较慢!

conda create -n monovit python=3.8
pip3 install torch==1.9.0+cu111 torchvision==0.10.0+cu111 torchaudio==0.9.0
pip install dominate==2.4.0 Pillow==6.1.0 visdom==0.1.8
pip install tensorboardX==1.4 opencv-python  matplotlib scikit-image
pip3 install mmcv-full==1.3.0 mmsegmentation==0.11.0  
pip install timm einops IPython

3.2 代码完善

首先下载monodepth2这一最基础代码库,参照官方给的readme.md文件以及trainer,py文件,对trainer.py文件进行修改:

将monodepth2/trainer.py文件中深度模型定义部分(54-62行)修改为:

       # self.models["encoder"] = networks.ResnetEncoder(
        #    self.opt.num_layers, self.opt.weights_init == "pretrained")
        self.models["encoder"] = networks.mpvit_small()
        self.models["encoder"].num_ch_enc = [64,128,216,288,288]
        self.models["encoder"].to(self.device)
        #self.parameters_to_train += list(self.models["encoder"].parameters())

        self.models["depth"] = networks.DepthDecoder(
            self.models["encoder"].num_ch_enc, self.opt.scales)
        self.models["depth"].to(self.device)
        self.parameters_to_train += list(self.models["depth"].parameters())

将优化器部分(102-104行)修改为:

        self.params = [ {
            "params":self.parameters_to_train, 
            "lr": self.opt.learning_rate
            #"weight_decay": 0.01
            },
            {
            "params": list(self.models["encoder"].parameters()), 
           "lr": self.opt.learning_rate/2
            #"weight_decay": 0.01
            } ]
        self.model_optimizer = optim.AdamW(self.params)
        self.model_lr_scheduler = optim.lr_scheduler.ExponentialLR(
		self.model_optimizer,0.9)

这两步改完,基本就可以了,但是训练后会发现,得到的模型Abs_Rel指标基本都在0.102左右,其实这是因为pytorch版本不同导致function中部分参数发生变化导致的,这一点似乎被作者忽略了,所以使得复现的结果总是不令人满意!所以还需要进一步将一个函数进行修改:

F.grid_sample(inputs[("color", frame_id, source_scale)],
                    outputs[("sample", frame_id, scale)],
                    padding_mode="border", align_corners=True)

至此,就可以很轻松的复现出原文的结果了!!!

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

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

相关文章

部署simple-chat项目

simple-chat介绍:此项目是基于openAI3.5模型的h5端人工智能聊天项目,无需翻墙即可体验。 simple-chat线上地址:simple-chat simple-chat项目地址:GitHub - AMxiaoming/simple-chat nginx部署前端步骤: https://blo…

Android WebRtc+SRS/ZLM视频通话(1):虚拟机安装Ubuntu

Android WebRtcSRS/ZLM视频通话(1):虚拟机安装Ubuntu 来自奔三人员的焦虑日志 秉着没事找事的原则,这里直接从服务器安装开始说起,也当记录自己这一路以来的愚昧之举,由于没有物理服务器,这里以…

使用七牛云进行上传图片

首先我们需要明确上传图片的注意点是什么&#xff1f; 1、表单组件标签只能用<input type"file"> 2、上传图片必须采用post请求 get:参数通过请求头提交到后台&#xff0c;参数放到url后面来提交的只能向后台提交文本数据或者字符串数据&#xff0c;二进制如以…

基于物联网可移动医疗设备智能监测节能应用研讨

智慧医疗、全民健康一直是社会关注的热点之一。医疗卫生体系的发展水平关系到人民群众的身心健康和社会和谐&#xff0c;智慧医疗旨在通过物联网技术实现准确、实时感知医疗信息&#xff0c;并进行全面、科学分析&#xff0c;作出智慧的决策&#xff0c;从而提升医疗服务的信息…

黄金投资品种有哪些,如何选择黄金品种

黄金是国际性的硬通货&#xff0c;具有世界货币的地位和国际都认可的流通性&#xff0c;在金融投资市场中黄金也一直属于热门产品&#xff0c;是全球都认可的避险保值投资产品&#xff0c;人们不管是想保值还是向投资增值都是不错的选择&#xff0c;但黄金投资市场中产品种类多…

前端基于uniapp[uniPush]实现APP消息推送(安卓、IOS)

前提概述&#xff1a;此文章都是基于uniapp中uniPush2实现的在线、离线推送 app消息推送流程 登录开发者中心先填写好项目信息以及配置厂商在manifest.json文件中勾选推送模块在前端项目中创建云函数&#xff08;此云函数的作用是接受后台发送的消息模板&#xff0c;解析出来…

项目中常见的几种策略模式实现方式

前言 本篇文章主要介绍本人在自己项目中和开源项目中策略模式的实现方式 基于spring实现策略模式 最近在使用nacos-sync同步工具时发现其使用了策略模式&#xff0c;下面主要介绍它是如何使用的 实现步骤 2.1 定义接口&#xff1a;SyncService public interface SyncService …

交叉导轨具体应用在哪些领域?

交叉导轨通过采用缩短了滚柱体的间距的R型滚柱保持器这种独特的滚柱保持机制&#xff0c;使滚柱体的有效接触长度增大&#xff0c;且交叉导轨的安装高度更低&#xff0c;由于是两付导轨平行安装组合成为一套&#xff0c;使得交叉导轨的机台整体性要好于直线导轨&#xff0c;倾覆…

5 分钟教你如何免费用上 GPT-4

今天要分享的就是普通用户&#xff0c;没有 OpenAI 账号&#xff0c;不需要写代码&#xff0c;你依然可以免费体验 GPT-4&#xff0c;当然&#xff0c;会有一些缺点&#xff0c;本篇文章将会手把手教你怎么用上免费版的 GPT-4 以及它的一些限制。 第一步&#xff1a;打开 Stea…

嵌入式软考备考_5 嵌入式程序设计

嵌入式程序设计 开发流程 要想某个功能要用硬件还是软件实现&#xff08;硬件快&#xff0c;但是耗资源&#xff09;&#xff1f;BSP&#xff1f;裸机还是OS&#xff1f; 硬件的设计与实现-》设备驱动软件的设计与实现-》os的选择&#xff0c;移植&#xff0c;api接口函数的…

人工智能(Pytorch)搭建模型5-注意力机制模型的构建与GRU模型融合应用

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能(Pytorch)搭建模型5-注意力机制模型的构建与GRU模型融合应用。注意力机制是一种神经网络模型&#xff0c;在序列到序列的任务中&#xff0c;可以帮助解决输入序列较长时难以获取全局信息的问题。该模型通过…

工具收集 - 键鼠模拟改建

工具收集 - 键鼠模拟&改建 AutoTinyFreeMouseClickerX-Mouse Button Control AutoTiny 官网&#xff1a;https://autotiny.cn AutoTiny软件是一款PC电脑端使用的自动化录制制作软件&#xff0c;不仅能够实现电脑自动化操作&#xff0c;而且可以控制手机实现自动化操作。 A…

uniApp 实现上传功能(七牛云,node获取上传token)

版本&#xff1a;uniAppvue2uview-ui 需求&#xff1a;利用uView_upload组件实现上传功能 难点&#xff1a;兼容性强&#xff0c;支持pc、App、h5&#xff1b; 1.使用leancloud 实现上传(兼容性弱) JS-SDK 只兼容pc、h5&#xff0c;运行到虚拟机上会报错——uniApp问答详情&am…

深度挖掘.c到.exe的整个过程,透过现象看本质

文章目录 程序的翻译环境和执行环境翻译环境编译预编译头文件的包含删除注释替换#define定义的符号 编译词法分析语法分析语义分析符号汇总 汇编 链接合并段表符号表的合并和重定位 执行环境 程序的翻译环境和执行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境…

【Jenkins】使用java -jar jenkins.war --httpPort=XXXX启动Jenkins报错【解决方案】

使用java -jar jenkins.war --httpPortXXXX启动Jenkins报错【解决方案】 &#x1f449;欢迎关注博主【米码收割机】 &#x1f449;一起学习C、Python主流编程语言。 &#x1f449;机器人、人工智能等相关领域开发技术。 &#x1f449;主流开发、测试技能。 文章目录 使用java -…

学习分享|一文搞懂WiFi 6/7 以及选择路由器改造网络那些事

目录 什么是 WiFi 6 WiFi 6 功能特点 WIFI 6 与前几代对比 速度更快 延时更低 容量更大 更安全 更省电 WiFi 4~WiFi 6对比 WiFi 6 核心技术 WiFi 7 WiFi 世代列表 路由器常用技术扩展 2.5Ge 网口 WAN/LAN口复用/网口盲插 双WAN口 双LAN口端口聚合 mesh组网 聊…

实验四 文件系统原理与模拟实现

实验四 文件系统原理与模拟实现 代码资源地址 Java实现的混合索引和成组链接法算法资源-CSDN文库 实验目的&#xff1a; 了解操作系统中文件系统的结构和管理过程&#xff0c;掌握经典的算法&#xff1a;混合索引与成组链接法等方法。 实验内容&#xff1a; 编程模拟实现混合…

【Android取证篇】ADB版本更新详细步骤

【Android取证篇】ADB版本更新详细步骤 更新ADB版本&#xff0c;解决无法连接设备问题【蘇小沐】 ADB没有自动更新的命令&#xff0c;我们需要下载新的ADB进行替换更新。 1、ADB查找 打开任务管理器&#xff08;快捷键shiftctrlEsc或WinX&#xff09;&#xff0c;在“详细信…

Arcgis通过矢量建筑面找到POI对应的标准地址

背景 有时候我们需要找到POI对应的标准地址,也许有很多的方法, 比如通过POI的地址数据和标准地址做匹配,用sql语句就能实现; 但是POI数据中也存在很多没有地址数据的,这时候只能通过空间关联来匹配对应的标准地址了,而空间关联也有不一样的方法,一个是通过空间连接,找…

数智化转型再加速,低代码开发助力企业转型

毫无疑问&#xff0c;随着数智化转型的加速&#xff0c;越来越多的企业正在把数智化战略提升到一个全新的高度&#xff0c;转型的进程也正从“浅层次”的数智化走向“深层次”数智化的阶段。 据权威机构数据统计&#xff0c;过去几年全球数字经济同比增长15.6%&#xff0c;采取…