第一次接触深度学习立体匹配,一直不知道从何下手,了解到PSMnet是经典的入门方法,在github上找到源码,下载下来却不知道如何跑起来,连数据集怎么下载都不清楚。直到看到这篇文章:
参考:https://blog.csdn.net/qq_36104364/article/details/80406327
才找到头绪,焦躁的心才平静下来有了方向,感谢作者。
1)SceneFlow
2)KITTI 2015
github源码
KITTI2015
预测:
python submission.py --maxdisp 192 \
--model stackhourglass \
--KITTI 2015 \
--datapath (KITTI 2015 test data folder) \
--loadmodel (finetuned PSMNet) \
调整好效果如下:
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
训练:
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