PSMNet网络

本文详细记录了初次接触深度学习立体匹配的过程,从数据集下载、源码获取到预训练模型的使用。通过调整参数运行PSMNet模型,解决了CUDA不可用和类型错误的问题,成功预测并生成了KITTI2015数据集的视差图。同时,介绍了如何使用模型预测个人图片,并分享了训练模型时遇到的代码对齐、模块导入和内存不足等错误及解决方案。
摘要由CSDN通过智能技术生成

0 写在前面

第一次接触深度学习立体匹配,一直不知道从何下手,了解到PSMnet是经典的入门方法,在github上找到源码,下载下来却不知道如何跑起来,连数据集怎么下载都不清楚。直到看到这篇文章:

参考:https://blog.csdn.net/qq_36104364/article/details/80406327

才找到头绪,焦躁的心才平静下来有了方向,感谢作者。

1 准备工作

1.1 数据集下载

1)SceneFlow
2)KITTI 2015

1.2 源码下载

github源码

1.3 下载预训练模型

KITTI2015

2 运行测试代码

预测:

python submission.py --maxdisp 192 \
                     --model stackhourglass \
                     --KITTI 2015 \
                     --datapath (KITTI 2015 test data folder) \
                     --loadmodel (finetuned PSMNet) \
  • model表示所使用的模型 有stackhourglass和basic两种模式可选,阅读过原文的同学应该了解,stackhourglass效果更好,basic速度更快。
  • datapath和loadmodel根据自己的路径进行调整

调整好效果如下:

python submission.py --maxdisp 192 --model stackhourglass --KITTI 2015 --datapath ./dataset/KITTI2015/testing/ --loadmodel ./pretrained_model/pretrained_model_KITTI2015.tar

运行时报错1:

AssertionError: Torch not compiled with CUDA enabled

(1)pytorch:测试GPU是否可用

import torch
flag = torch.cuda.is_available()
print(flag)

ngpu= 1
# Decide which device we want to run on
device = torch.device("cuda:0" if (torch.cuda.is_available() and ngpu > 0) else "cpu")
print(device)
print(torch.cuda.get_device_name(0))
print(torch.rand(3,3).cuda()) 

# True
# cuda:0
# GeForce GTX 1080
# tensor([[0.9530, 0.4746, 0.9819],
#        [0.7192, 0.9427, 0.6768],
#        [0.8594, 0.9490, 0.6551]], device='cuda:0')

检测到torch cuda是可以用的
(2)上述GPU可用,是因为切换了环境到有torch的环境。而在cmd终端执行submission.py时选择了没有torch环境的,故将cmd环境切换到torch环境再执行,即可。

运行时报错2:

cost = Variable(torch.FloatTensor(refimg_fea.size()[0], refimg_fea.size()[1]*2, self.maxdisp//4, refimg_fea.size()[2], refimg_fea.size()[3]).zero_()).cuda()
TypeError: unsupported operand type(s) for //: ‘str’ and ‘int’

此时在cmd终端无法调试,打开项目,选中submission.py文件右键Edit ‘submission’,配置Parameters参数,完成后run。

调试可知,是由于self.maxdisp位str类型,不能直接转成int进行除法运算。

ctrl+b找到self.maxdisp = maxdisp这一行,改为self.maxdisp = int(maxdisp)

最终:

会连续预测testing下面的数据,生成视差图保存在与submission.py的同级目录下。

000000_10.png
000001_10.png
000002_10.png
000003_10.png

预测自己图片:

如果你想用自己的双目图像进行测试,还可以用下面的指令:

python Test_img.py --loadmodel (finetuned PSMNet) --leftimg ./left.png --rightimg ./right.png

调整好效果如下:

python Test_img.py --loadmodel ./pretrained_model/pretrained_model_KITTI2015.tar --leftimg ./left.png --rightimg ./right.png

测试效果如下:
请添加图片描述 请添加图片描述
每次只能运行一张,下一张会覆盖上一张。

3 运行训练代码

训练:

python finetune.py --maxdisp 192 \
                   --model stackhourglass \
                   --datatype 2015 \
                   --datapath (KITTI 2015 training data folder) \
                   --epochs 300 \
                   --loadmodel (pretrained PSMNet) \
                   --savemodel (path for saving model)

调整好效果如下:

python finetune.py --maxdisp 192 \
                   --model stackhourglass \
                   --datatype 2015 \
                   --datapath E:/SMdata/KITTI2015/training \
                   --epochs 300 \
                   --loadmodel ./pretrained_model/pretrained_model_KITTI2015.tar \
                   --savemodel ./saved_model

报错1:

unindent does not match any outer indentation level

这里提示代码有些是没有对齐的,从github下载的代码有些是串了位置。
解决:选中串了位置的部分,按住"ctrl+alt+shift+L",回车确定即可。

报错2:

ModuleNotFoundError: No module named ‘preprocess’

不要使用"pip install preprocess"来安装,这个preprocess.py文件在"./dataloader/"下面。
将import preprocess 改为 from . import preprocess

报错3:

RuntimeError: CUDA out of memory. Tried to allocate 24.00 MiB (GPU 0; 8.00 GiB total capacity; 2.12 GiB already allocated; 22.41 MiB free; 2.15 GiB reserved in total by PyTorch)

网络理解

https://blog.csdn.net/weixin_41405284/article/details/109412220?spm=1001.2014.3001.5501

https://blog.csdn.net/u012348774/article/details/111314199

要训练自己的数据集,你需要进行以下步骤: 1. 修改代码:首先,你需要修改代码中的数据输入和模型路径。在dataloader/SceneFlowLoader.py文件中,你可以修改数据输入的预处理步骤,根据你自己的数据集进行适应性调整。同时,你还需要修改main.py和finetune.py中的数据路径和模型路径,将其替换为你自己的数据集路径和预训练模型路径。确保路径正确无误。 2. 数据准备:将你自己的数据集准备好并存放在指定的路径中。确保数据集的文件格式和目录结构与代码中的要求一致。 3. 训练网络:执行相应的指令来训练网络。在main.py中,你可以设置epochs参数来控制训练的周期数,可以根据需求进行调整。loadmodel参数是可选的,如果你想从预训练模型开始训练,可以指定预训练模型的路径。savemodel参数表示你要将训练好的模型保存到哪个路径。 4. 微调训练:在finetune.py中,你可以执行微调训练,使用KITTI数据集。同样,你需要根据自己的需求设置相应的路径和参数。 总之,要训练自己的数据集,你需要修改代码中的路径和参数,并准备好自己的数据集。根据代码的要求进行适应性调整和训练参数的设置,然后执行相应的指令即可。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [环境感知算法——3.PSMNet基于Kitti数据集训练](https://blog.csdn.net/wenquantongxin/article/details/130960853)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [PSMNet:Pyramid Stereo Matching Network学习测试笔记03-如何训练网络](https://blog.csdn.net/u013000248/article/details/92626131)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [运行PSMNet网络时遇到的问题及解决方案](https://blog.csdn.net/qq_36104364/article/details/80406327)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值