自学内容网 自学内容网

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

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

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



前言

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-18EfficicentNet-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的原理和代码。


原文地址:https://blog.csdn.net/yangyu0515/article/details/142249198

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!