PSMNet网络

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

Guess you like

Origin blog.csdn.net/weixin_41874898/article/details/116797775