运行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.基础环境搭建和数据集下载
目前作者给出的环境要求如下
需要安装python 3.7, PyTorch 1.4.0及以上的版本, torchvision 0.5.0版本,安装的方法网上都有,我这里就不重复了,如果这一步都不会的话,可以参考我另一篇博客https://blog.csdn.net/qq_36104364/article/details/80489200
然后就要下载数据集,其中预训练使用的数据集是SceneFlow,点击蓝色的Scene Flow连接就会跳转到如下的下载网站
向下滑动,直到看见以下界面
下载我图中用红色铅笔标出来的数据集以及对应的视差图(不要跟我说为什么这么大,他就是这么大,解压完将近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,两个都可以,只是在训练时需要选择对应的指令。同样点击蓝色连接,跳转到下载网站(这里可能需要科学上网,请自行解决)
以KITTI 2015为例,点击上图中标着 Stereo 2015的图片进入以下界面
点击那个 Download stereo 2015/flow 2015/scene flow 2015 data set (2 GB),下载数据集。这里可能需要你提供一个邮箱,最好使用学校或者公司的机构邮箱,学校的邮箱后缀通常为edu.cn.
至此准备工作已经完成,下面开始训练和测试。
2. 测试
因为很多朋友都是用作者提供的预训练模型进行测试,观察效果,不需要从头开始训练模型,因此我就先讲一下如何使用作者提供的预训练模型,首先下载预训练模型
点击图中蓝色的连接,下载对应数据集的预训练模型(如果你想用KITTI 2015数据集,你就下载他对应的模型,如果用其他的模型也可以,但就是效果不好),作者使用的是Google Drive所以还是需要科学上网,也可以使用我上面提供的百度云盘连接(我这是自己训练的结果,不是作者提供的,因此效果可能会存在些许差别,而且年代久远我已经不确定,它是否能用了)。下载好了之后,就可以运行测试代码了
你在项目所在的文件夹内,打开你的命令行终端,输入图中的指令,其中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文件夹内的,模型代码进行修改,但要保证没有错误,这个需要自己研究学习。训练网络可执行下面的指令
首先main.py是在SceneFlow数据集上做预训练,指令中与上文重复的我就不再说了,epochs表示训练的周期数,10表示在整个SceneFlow数据集上做10遍训练,可以根据需求调整。loadmodel还是加载预训练模型,这是一个可选指令,你可以把它删掉,就是从随机初始化模型开始训练了。savemodel表示你要把训练好的模型保存到哪里。
然后finetune.py是在KITTI数据集上做微调训练,指令含义全都相同,只不过loadmodel这个指令最好使用在SceneFlow上得到的预训练模型,不然KITTI数据集只有200张图片,没法得到一个很好的模型。
好了至此整个模型的使用过程已经介绍完了,剩下的就是大家不断修改模型,不断调参,不断实验的过程了。谢谢大家的关注和阅读,有什么疑问可以评论留言私信我,也可以关注我的个人公众号“深视”,在后台给我留言。
如果大家对于深度学习与计算机视觉领域感兴趣,希望获得更多的知识分享与最新的论文解读,欢迎关注我的个人公众号“深视”。
运行PSMNet网络时遇到的问题及解决方案相关推荐
- keras用cpu加速_在训练某些网络时,Keras(Tensorflow后端)在GPU上比在CPU上慢CPU
我很难理解GPU和CPU速度与小尺寸网络(CPU有时更快)相似的原因,而GPU更快更大尺寸的网络.问题底部的代码在i7-6700k上以103.7s运行,但是当使用tensorflow-gpu时,代码运 ...
- 计算机 注册表 远程桌面,仅允许运行使用网络级别身份验证的远程桌面计算机连接失败处理方法(远程桌面连接)...
计算机在开启远程桌面的时候选中了"仅允许运行使用网络级别身份验证的远程桌面计算机连接",于是连接时提示错误如下: 远程计算机需要网络级别身份验证,而您的计算机不支持该验证,请联系您 ...
- SAP License:CKMLCP运行物料帐时单个物料冲突无法运行
CKMLCP运行物料帐时单个物料冲突无法运行,在S_ALR_87013180查询了一下物料状态 看了一下40的状态里面真的有四条没运行多级差异,是需要运行多级差异的但是多级的确没运行,如果说物料少可以 ...
- 在虚拟机上调试网络时要注意的内容
在虚拟机上调试网络时要注意的内容 对于习惯使用一种操作系统(例如Windows XP)的用户来说,虚拟机产品无疑是调试用于其它系统环境的软件的好工具.常见的个人用虚拟机产品主要是 VMware Wor ...
- 1.运行npm install 时,卡在sill idealTree buildDeps没有反应
项目场景: 运行npm install 问题描述 运行npm install 时,卡在sill idealTree buildDeps没有反应 fetchMetadata: sill mapToReg ...
- 远程桌面仅计算机,仅允许运行使用网络级别身份验证的远程桌面计算机连接失败处理方法(远程桌面连接)...
计算机在开启远程桌面的时候选中了"仅允许运行使用网络级别身份验证的远程桌面计算机连接",于是连接时提示错误如下: 远程计算机需要网络级别身份验证,而您的计算机不支持该验证,请联系您 ...
- win10镜像无法再此计算机上运行,Win10安装镜像提示运行此工具时出现问题如何解决...
很多Win10系统用户都会到微软官网下载一些自己需要的软件或者工具等,不过,有些用户发现Win10系统镜像无法安装而且还提示"运行此工具时出现问题,提示代码0x80080005 - 0x90 ...
- 远程桌面无法连接到远程计算机,因为从远程计算机接受的身份验证证书,仅允许运行使用网络级别身份验证的远程桌面计算机连接失败处理方法(远程桌面连接)...
计算机在开启远程桌面的时候选中了"仅允许运行使用网络级别身份验证的远程桌面计算机连接",于是连接时提示错误如下: 远程计算机需要网络级别身份验证,而您的计算机不支持该验证,请联系您 ...
- 蛤蟆吃服务器显示无网络,hamachi创建网络时服务器报告了一个错误.doc
hamachi创建网络时服务器报告了一个错误 hamachi创建网络时服务器报告了一个错误 蛤蟆吃无法连接到服务器怎么办 蛤蟆吃无法连接到服务器 如果出现这样的情况 先打开运行 后输入 service ...
最新文章
- Microbiome:宏基因组分箱流程MetaWRAP安装和数据库布置
- Java NIO之Channel(通道)
- 编译安装mysql5.6.36_MySQL5.6.36编译安装
- 页面的缓存与不缓存设置
- C/C++插入数据到Mysql数据库中
- 智能灯控制页面用HTML编写,智能家居系统中智能化灯光控制的设计实现
- 解线性方程组的迭代法(雅可比迭代法)
- 113. 路径总和 II
- PcShare2005代码阅读(2)
- 计算机搜索栏历史记录,如何打开搜索历史记录
- 非线性最小二乘问题的分析与理解(附高斯牛顿法matlab代码)
- 利用计算机Tracert,tracert,教您tracert命令使用详解
- Linux内核 触摸板,【教程】给Linux(elementary os)配置更多的触摸板手势
- Java Cryptography
- 计算机主机mac地址怎么查,怎么查看电脑的Mac地址
- 我的java语法基础篇刷题2
- 计算机itunes无法安装,Win7电脑无法安装itunes怎么办 win7安装itunes失败的解决方法...
- 【C标准库】通过locale.h设置美元的格式
- 三款拼音输入法的特性对比
- php 5.3.29 nts,为什么PHP 5.3不在支持ISAPI,为什么还要分NTS和TS版本?