运行PSMNet网络时遇到的问题及解决方案

运行环境:ubuntu16.04 + cuda 8.0 + cudnn v6.0 + python 3.6.1 + pytorch 0.3.0 + torchvision 0.2.0
1.运行过程中遇到 not found modules named “***”
   把“dataloader”和“models”文件夹中的对应文件“***.py”复制到主文件夹中,再尝试是否解决了问题
2.遇到“with torch.no_grad”相关的问题
   把main.py和finetune.py中“with torch.no_grad:”这句话删掉,并把下面的“output3 = model(imgL,imgR)”与其他行对齐。“with torch.no_grad:”这个指令在pytorch 0.4.0以上可用
    再将

imgL   = Variable(torch.FloatTensor(imgL))(main的108行,finetune的117行)
imgR   = Variable(torch.FloatTensor(imgR))(main的109行,finetune的118行)

   改为

imgL   = Variable(torch.FloatTensor(imgL),volatile = True)
imgR   = Variable(torch.FloatTensor(imgR),volatile = True)

3.遇到“out of momery”的问题
   把main.py和finetune.py中

TrainImgLoader = torch.utils.data.DataLoader(
     DA.myImageFloder(all_left_img,all_right_img,all_left_disp, True), 
     batch_size= 12, shuffle= True, num_workers= 8, drop_last=False)
TestImgLoader = torch.utils.data.DataLoader(
     DA.myImageFloder(test_left_img,test_right_img,test_left_disp, False), 
     batch_size= 8, shuffle= False, num_workers= 4, drop_last=False)

    把batch_size 由12和8 改为3和3
4.遇到“out of index”之类的问题
   尝试将listfolwfile.py的第46行和47行修改为

 flying_path = filepath + [x for x in image if  'flyingthings3d' in x][0]
 flying_disp = filepath + [x for x in disp if  'flyingthings3d' in x][0]

5.如果使用python3.0以上版本
    需要将stackhourglass.py的第111行和第113行中 maxdisp/4 改为 maxdisp//4
   将readpym.py的第15行由header = file.readline().rstrip()
   改为header = file.readline().rstrip().decode()
    第26行dim_match = re.match(r'^(\d+)\s(\d+)\s,file.readline())
    改为dim_match = re.match(r'^(\d+)\s(\d+)\s$', file.readline().decode())
6. KITTILoader.py 中 第56行 dataL = np.(dataL,dtype=…)改为dataL = np.array(dataL,dtype=…)
ps:行数可能有变化,可用ctrl+F直接搜索关键词

2018年9月4日修改,为了方便大家学习,将作者提供的预训练好的网络上传到百度网盘中,大家有需要可自行下载。
链接:https://pan.baidu.com/s/1s6IZ5oaqOVjjD3w4dBfp4w

2019年4月26日修改
7. 如果你所使用的torchvision版本超过 0.2.1,需要对submission.py中第92和93行代码进行修改
line 92 imgL_o = (skimage.io.imread(test_left_img[inx]).astype(‘float32’))
line 93 imgR_o = (skimage.io.imread(test_right_img[inx]).astype(‘float32’))
改为line 92 imgL_o = (skimage.io.imread(test_left_img[inx])
line 93 imgR_o = (skimage.io.imread(test_right_img[inx])
否则得到的视差图会非常模糊和碎片化。

2019年5月5日修改
我把在KITTI2015数据集上finetune的模型上传到百度网盘了,有需要的朋友可以自行下载使用。
我使用的是stackhourglass模型,而且是很久之前训练的版本了,如果遇到什么问题可以留言。
链接:https://pan.baidu.com/s/1hgF9JMLQwNuPF6-JYvLjfA
提取码:li9a

2020年7月21日修改
没想到这篇两年多前的论文还有这么多朋友在关注,果然优秀的论文就是会成为经典,被大家持续的学习和研究。很多新入门的朋友总是问我怎么才能把模型跑起来,怎么才能开始训练自己的模型,甚至怎样下载数据集。其实作者Github里已经写的非常清楚了,但考虑到许多朋友都是第一次接触这个领域,不太了解使用方法,所以我还是再仔细介绍一下PSMNet的使用过程吧。因为已经一年多没有接触这个网络了,有些地方可能有错误,请大家多多指正。
1.基础环境搭建和数据集下载
目前作者给出的环境要求如下
运行PSMNet网络时遇到的问题及解决方案_第1张图片
需要安装python 3.7, PyTorch 1.4.0及以上的版本, torchvision 0.5.0版本,安装的方法网上都有,我这里就不重复了,如果这一步都不会的话,可以参考我另一篇博客https://blog.csdn.net/qq_36104364/article/details/80489200
然后就要下载数据集,其中预训练使用的数据集是SceneFlow,点击蓝色的Scene Flow连接就会跳转到如下的下载网站
运行PSMNet网络时遇到的问题及解决方案_第2张图片
向下滑动,直到看见以下界面
运行PSMNet网络时遇到的问题及解决方案_第3张图片
下载我图中用红色铅笔标出来的数据集以及对应的视差图(不要跟我说为什么这么大,他就是这么大,解压完将近200G,你还别嫌大,还不打折),有同学问怎么可以快速下载,有没有网盘链接,我这里是没有的,但是在windows环境下用迅雷开个会员下载还是很快的,然后可以再用移动硬盘什么的拷到服务器上。
下载完数据集后,要按照作者指定的方式布置文件夹的从属关系,不然会报错。
作者说了
Usage of Scene Flow dataset
Download RGB cleanpass images and its disparity for three subset: FlyingThings3D, Driving, and Monkaa.
Put them in the same folder.
And rename the folder as: “driving_frames_cleanpass”, “driving_disparity”, “monkaa_frames_cleanpass”, “monkaa_disparity”, “frames_cleanpass”, “frames_disparity”.
对于Scene Flow数据集要把RGB的图像和视差图放在一个大的文件夹里,里边一共分成6个小文件夹,分别命名为"driving_frames_cleanpass", “driving_disparity”, “monkaa_frames_cleanpass”, “monkaa_disparity”, “frames_cleanpass”, "frames_disparity"里面对应存放三个子集的RGB图片和视差图。
微调训练(finetune)用的是KITTI数据集,这里有两个一个是KITTI 2015 一个是KITTI 2012,两个都可以,只是在训练时需要选择对应的指令。同样点击蓝色连接,跳转到下载网站(这里可能需要科学上网,请自行解决)
运行PSMNet网络时遇到的问题及解决方案_第4张图片
以KITTI 2015为例,点击上图中标着 Stereo 2015的图片进入以下界面
运行PSMNet网络时遇到的问题及解决方案_第5张图片
点击那个 Download stereo 2015/flow 2015/scene flow 2015 data set (2 GB),下载数据集。这里可能需要你提供一个邮箱,最好使用学校或者公司的机构邮箱,学校的邮箱后缀通常为edu.cn.
至此准备工作已经完成,下面开始训练和测试。
2. 测试
因为很多朋友都是用作者提供的预训练模型进行测试,观察效果,不需要从头开始训练模型,因此我就先讲一下如何使用作者提供的预训练模型,首先下载预训练模型
运行PSMNet网络时遇到的问题及解决方案_第6张图片
点击图中蓝色的连接,下载对应数据集的预训练模型(如果你想用KITTI 2015数据集,你就下载他对应的模型,如果用其他的模型也可以,但就是效果不好),作者使用的是Google Drive所以还是需要科学上网,也可以使用我上面提供的百度云盘连接(我这是自己训练的结果,不是作者提供的,因此效果可能会存在些许差别,而且年代久远我已经不确定,它是否能用了)。下载好了之后,就可以运行测试代码了
运行PSMNet网络时遇到的问题及解决方案_第7张图片
你在项目所在的文件夹内,打开你的命令行终端,输入图中的指令,其中maxdisp 表示预设的最大视差值 默认为192,不需要改。model表示所使用的模型 有stackhourglass和basic两种模式可选,阅读过原文的同学应该了解,stackhourglass效果更好,basic速度更快。KITTI表示所使用的数据集 有2015和2012两种可选(为什么没有Scene Flow呢?因为作者没写,所以你就算是下载了SceneFlow对应的预训练模型也只能在KITTI 2012和2015上进行测试)。datapath表示测试数据集的路径,以KITTI2015为例,路径应该是这个样子的“…/…/…/data_scene_flow_2015/testing/”,省略号表示你自己的文件夹路径,每个人都不一样,但最后一定是“testing/”,而不是“training/”。最后一个loadmodel表示你预训练模型的路径,你下载好的模型不需要解压!不要解压!不要解压!后缀应该是tar,你就直接把 “…/…/…/pretrained_model_KITTI2015.tar”这个路径写在 loadmodel后面就行了!最后写完应该是下面这个效果

python submission.py --maxdisp 192 \
                     --model stackhourglass \
                     --KITTI 2015 \
                     --datapath shenshi/dataset/data_scene_flow_2015/testing/ \
                     --loadmodel shenshi/PSMNet/pretrained_model_KITTI2015.tar \

上面datapath和loadmodel都是我自己电脑上的路径,你们要换成自己的!
然后点击回车就可以运行了,生成的视差图就会出现在你的项目文件夹里了。如果你想用自己的双目图像进行测试,还可以用下面的指令(这是作者后来添加的,我没有用过)
在这里插入图片描述
除了加载预训练的模型之外,还需要提供左右图像对应的路径。
3. 训练
最后介绍关于如何自己修改和训练网络,修改网络自然要对model文件夹内的,模型代码进行修改,但要保证没有错误,这个需要自己研究学习。训练网络可执行下面的指令
运行PSMNet网络时遇到的问题及解决方案_第8张图片
首先main.py是在SceneFlow数据集上做预训练,指令中与上文重复的我就不再说了,epochs表示训练的周期数,10表示在整个SceneFlow数据集上做10遍训练,可以根据需求调整。loadmodel还是加载预训练模型,这是一个可选指令,你可以把它删掉,就是从随机初始化模型开始训练了。savemodel表示你要把训练好的模型保存到哪里。
运行PSMNet网络时遇到的问题及解决方案_第9张图片
然后finetune.py是在KITTI数据集上做微调训练,指令含义全都相同,只不过loadmodel这个指令最好使用在SceneFlow上得到的预训练模型,不然KITTI数据集只有200张图片,没法得到一个很好的模型。
好了至此整个模型的使用过程已经介绍完了,剩下的就是大家不断修改模型,不断调参,不断实验的过程了。谢谢大家的关注和阅读,有什么疑问可以评论留言私信我,也可以关注我的个人公众号“深视”,在后台给我留言。
如果大家对于深度学习与计算机视觉领域感兴趣,希望获得更多的知识分享与最新的论文解读,欢迎关注我的个人公众号“深视”。

你可能感兴趣的:(深度学习,深度学习,pytorch,PSMNet)