【深度估计】【深度学习】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-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的原理和代码。