【深度估计】【深度学习】Windows11下Dynamic-multiframe-depth代码Pytorch官方实现与源码讲解

【深度估计】【深度学习】Windows11下Dynamic-multiframe-depth代码Pytorch官方实现与源码讲解

提示:最近开始在【光流估计】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。


文章目录

  • 【深度估计】【深度学习】Windows11下Dynamic-multiframe-depth代码Pytorch官方实现与源码讲解
  • 前言
  • Dynamic-multiframe-depth模型运行环境搭建
  • Dynamic-multiframe-depth模型运行
    • 数据集与模型权重下载
    • Dynamic-multiframe-depth训练
    • Dynamic-multiframe-depth测试
  • 总结


前言

Dynamic-multiframe-depth是由西北工业大学的Li, Rui等人在《Learning to Fuse Monocular and Multi-view Cues for Multi-frame Depth Estimation in Dynamic Scenes【CVPR-2023】》【论文地址】一文中提出的适用于动态场景的多帧深度估计网络,多视角线索捕获了静态区域中更准确的几何信息,而单眼线索在动态区域中捕获了更有用的上下文,通过融合了单目和多视角线索的各自优势,从而显著改善了动态场景中的每个单独源。
在详细解析Dynamic-multiframe-depth网络之前,首要任务是搭建Dynamic-multiframe-depth【Pytorch-demo地址】所需的运行环境,并完成模型训练和测试工作,展开后续工作才有意义。


Dynamic-multiframe-depth模型运行环境搭建

  • 查看主机支持的cuda版本(最高)
    # 打开cmd,执行下面的指令查看CUDA版本号
    nvidia-smi
    
  • 安装GPU版本的torch【官网】
    博主的cuda版本是12.2,博主选的11.8也没问题。

    其他cuda版本的torch在【以前版本】找对应的安装命令。
  • 博主安装环境参考
    # 创建虚拟环境
    conda create -n dymultidepth python=3.10
    # 查看新环境是否安装成功
    conda env list
    # 激活环境
    activate dymultidepth
    # githup下载GCNet源代码到适合目录内,解压文件 
    # 分别安装pytorch和torchvision
    pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
    # 通过清华源安装dymultidepth所需的第三方包(博主这里因为已经安装了torch,因此删除了requirements中的的torch和torchvision)
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
    pip list
    conda list
    

Dynamic-multiframe-depth模型运行

数据集与模型权重下载

名称下载地址说明
数据集百度云下载主要使用包含真实激光雷达深度图的 KITTI Odometry 数据集进行训练和测试,外加作者额外提供的估计的姿势和动态目标的mask掩码。
预训练权重ResNet-18 和 EfficicentNet-B5源码作者提供的训练权重

数据集很大,总共75G,这里博主给了百度云的下载方式,因为官方下载需要申请。

数据集处理

  • 下载所有需要的数据集:
    data_odometry_color	彩色图像
    data_odometry_calib	校准文件
    data_depth_annotated 激光雷达深度图
    poses_dvso.zip	估计姿势文件
    mvobj_mask	动态目标掩码
    
  • 解压彩色图像和校准文件到与Dynamic-multiframe-depth同级的data目录下,删除00~10中的image_3以及11以后的所有文件,以节省存储空间:
      data└── dataset└── sequences├── 00|   ├── calib.txt|   ├── image_2|   └── times.txt├── ... 
    
  • 使用脚本将原始的激光雷达深度图转换为给定的格式:
    # 进入Dynamic-multiframe-depth工程的scripts目录下
    cd data_loader/scripts
    # -i 下载的激光雷达深度图压缩文件(不要解压)
    python preprocess_kitti_transfer_gtdepth_to_odom.py -i E:\BaiduNetdiskDownload\data_depth_annotated.zip
    
      data└── dataset└── sequences├── 00|   ├── calib.txt|   ├── image_2|   ├── image_depth_annotated|   └── times.txt├── ... 
    
  • 估计姿势文件减压,将poses_dso目录的内容拷贝到data/dataset/poses_dso目录中,同样可以删除10以后的txt文件;动态目标掩码解压,将sequences目录的内容拷贝到data/dataset/sequences目录中:
      data└── dataset├── poses_dvso│   ├── 00.txt│   ├── 01.txt│   ├── ...└── sequences├── 00|   ├── calib.txt|   ├── image_2|   ├── image_depth_annotated|   ├── mvobj_mask|   └── times.txt├── ...
    

Dynamic-multiframe-depth训练

从头开始训练模型,修改设置配置文件。以train/train_mr_resnet18.json为例,这里博主根据自己的情况,给出可以修改的几个部分:

  • 修改所有dataset_dir,根据数据集的路径修改:
    "dataset_dir": "../data/dataset/",
    
  • 修改save_dir,根据需求修改存储训练模型路径:
    "save_dir": "./saved_model/",
    
  • 修改所有num_workers,windoes系统必须修改:
    "num_workers": 0,
    
  • 修改所有batch_size,根据主机显存大小修改:
    "batch_size": 1,
    
  • 修改input_size和target_image_size并保持一致,根据任务需求和主机显存大小修改:
    ""input_size": [128, 256]
    "target_image_size": [128,256789 ],
    
  • 修改n_gpu,根据硬件条件:
      "n_gpu": 1,
    

执行以下命令训练模型:

python train.py --config configs/train/train_mr_resnet18.json


运行过程中可能出现类似错误:AttributeError: module ‘numpy’ has no attribute ‘float’.;这里只需要将出现错误的py文件中所有np.float替换成np.float64;同理np.int替换成np.int64。

Dynamic-multiframe-depth测试

源码作者提供的训练权重或者将自己训练好的权重保存在到./ckpt,修改设置配置文件。以evaluate/eval_mr_resnet18.json为例,修改内容和训练的差不多:

python evaluate.py --config configs/evaluate/eval_mr_resnet18.json

注意!使用源码提供的训练权重的话图像尺寸不要再做修改!

可能出现错误:NotImplementedError: cannot instantiate ‘PosixPath’ on your system,因此在windoes下,需要在evaluate.py代码其实位置加上以下内容:

# 在POSIX系统上使用PosixPath,在Windows上,pathlib则使用WindowsPath类来处理路径.
temp = pathlib.PosixPath
pathlib.PosixPath = pathlib.WindowsPath


总结

尽可能简单、详细的介绍了Dynamic-multiframe-depth的安装流程以及Dynamic-multiframe-depth的使用方法。后续会根据自己学到的知识结合个人理解讲解Dynamic-multiframe-depth的原理和代码。

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

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

相关文章

JDBC PreparedStatement解决SQL注入方案

文章目录 获取PreparedStatement对象PreparedStatement是如何解决SQL注入问题的PreparedStatement的 应用上述如何解决sql注入的问题呢? 获取PreparedStatement对象 PreparedStatement是Statement的子接口,可以防止sql注入问题。可以通过Connection接口…

耳夹式耳机哪个品牌好?热门品牌机型推荐

在移动互联网时代,耳机已然成为很多人生活里不可或缺的电子产品。不管是在上下班的途中,还是进行运动的时候,耳机都能为人们带来音乐的美妙享受,起到减轻压力的作用。 可是,长时间佩戴入耳式耳机存在一些弊端&#xf…

【无人机设计与控制】使用凸优化的无人机在存在威胁区域时的路径规划

摘要 本文提出了一种基于凸优化的无人机路径规划方法,旨在解决无人机在威胁区域中飞行的最优路径问题。该方法通过构建威胁区域的凸集表示,并结合凸优化算法,确保无人机能够在避开威胁区域的同时,沿着最优路径到达目标点。仿真结…

Ubuntu的源管理详解

Ubuntu的源管理详解 Ubuntu软件源是存储Ubuntu软件包的服务器,通过这些源,用户可以下载、安装或更新软件包。这篇文章将详细介绍Ubuntu如何查看、添加、修改和删除源,以及如何解决源相关的问题。 什么是软件源? Ubuntu软件源是…

无人机之编程基础原理

无人机编程基础原理涉及多个方面,主要包括无人机的基本原理、飞行控制算法、编程语言及算法应用等。以下是对这些方面的详细阐述: 一、无人机基本原理 无人机的基本原理是理解其结构、飞行原理、传感器和控制系统等的基础。无人机通常由机身、动力系统&…

中国山东著名国学大师起名专家颜廷利:人类的终极使命,超越地球的探索之旅

中国山东著名国学大师起名专家颜廷利:人类的终极使命,超越地球的探索之旅 人类的存在,不是为了留恋地球,而是为了离开地球…(升命学说) 安徽阜阳、海口、滁州、宜春、河南周口、新乡、茂名、宁夏.银川最好的专业取名…

【CSS in Depth 2 精译_032】5.4 Grid 网格布局的显式网格与隐式网格(上)

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对…

【PGCCC】 复合索引和部分索引,竟然能让查询速度提升 275 倍!

索引对于加速数据库查询和提高 PostgreSQL 应用程序的性能至关重要。但是,并非所有索引都以相同的方式发挥作用。复合索引和部分索引是两种常见类型,每种类型都有不同的用途和对性能的影响。本文我们将深入探讨复合索引和部分索引是什么、它们如何运作以…

BUG——IMX6ULL编译正点原子Linux内核报错

最初编译的是正点原子改过的Linux内核,可能是版本问题,一直报错,无法成功编译。然后换成NXP官方Linux内核6.6版本,初始编译虽然也报各种错,但都是缺少库或相关工具,全部安装后就可以成功编译出镜像了&#…

运营商二要素接口如何用PHP实现调用

一、什么是手机二要素? 运营商二要素又称手机二要素,运营商二要素核验,手机二要素核验,即传入姓名、手机号码,校验此两项是否一致。实时核验,返回校验结果! 二、手机二要素适用哪些场景&#…

【逐行注释】MATLAB的程序,对比EKF(扩展卡尔曼滤波)和PF(粒子滤波)的滤波效果,附下载链接

文章目录 总述部分源代码运行结果扩展性 总述 本代码使用 M A T L A B MATLAB MATLAB实现了扩展卡尔曼滤波( E K F EKF EKF)和粒子滤波( P F PF PF)在状态估计中的对比分析。 主要功能包括: 参数设置:初始…

【apt-file命令详解:Linux下的包管理利器】

文章目录 前言一、apt-file命令简介二、安装apt-file三、apt-file命令的基本用法四、高级技巧五、总结 🌈你好呀!我是 山顶风景独好 🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分使然!😊 &a…

基于SSM的“银发在线教育云平台”的设计与实现(源码+数据库+文档)

基于SSM的“银发在线教育云平台”的设计与实现(源码数据库文档) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 首页页面图 健身养生详情页面 在线课堂界面 …

Intellij IDEA 通过数据库表生成带注解的Java实体类(lombok版)

前言:因为今天在写实体类的时候,发现表中的字段太多,而且又要加注解怕写错漏写,现在市面上也有许多插件,但是有些达不到代码简洁,需要修改。后来还是选择了采用groovy写了一个脚本编写,本来idea…

gitlab使用小结

GitLab 是一个基于 Git 的代码托管平台,提供了丰富的功能来管理代码仓库、CI/CD、项目管理等。以下是一些常用的 GitLab 命令和示例,帮助你更好地使用 GitLab。 1、 克隆仓库 克隆一个远程仓库到本地: git clone gitgitlab.example.com:us…

深圳mes制造系统的主要功能

深圳MES系统的主要功能包括以下几个方面: 生产计划管理:MES系统可以帮助企业制定生产计划,包括订单管理、生产排程、生产任务分配等,实现生产资源的合理配置和生产计划的优化。 生产过程控制:MES系统可以监控生产过程中…

SpringBoot技术栈的网上超市开发实践

2 系统开发技术 这部分内容主要介绍本系统使用的技术,包括使用的工具,编程的语言等内容。 2.1 Java语言 Java语言自公元1995年至今,已经超过25年了,依然在软件开发上面有很大的市场占有率。当年Sun公司发明Java就是为了发展一门跨…

局域网远程命令重启电脑

只要知道远程服务器的管理员密码和IP地址,在局域网中的任意一台机器上打开“命令提示符”窗口,运行以下命令: 1、获取远程服务器的管理员权限 net use IP地址 "管理员密码" /user:administrator 2、使用shutdown命令远程重启服务器…

32中的外部中断

一、理解中断 关于32的中断 中断就是给cpu一个信号,cpu收到这个对应的信号再进行指挥 最常用的就是按键 key1按下是咩意思key2呢这样 中断信号线CPU要和对应的元器件连接 二、中断代码 代码编写 所有的0脚对应中断寄存器0,以此类推 引脚为n …

Unity :单例模式 + MonoBehaviour 是什么体验?

单例模式 与 MonoBehaviour的冲突点 单例模式 MonoBehaviour 保持单例的快速解决方案 就是自己创建一个空对象,然后把脚本挂在上去就行了,之后你就别自己挂载该脚本就行了 一般写法 public class AgentMoNo : MonoBehaviour {private static AgentM…