- 一、搭建CREStereo环境
- (一)Anaconda下载安装
- (二)通过Conda搭建环境
- 1. 创建虚拟环境
- 2. 安装cuda
- 3. 安装megengine
- 5. 安装opencv_python
- 6. 安装Pillow
- 7. 安装tensorboardX
- 8. 查看是否安装成功
- 9. 删除环境
- 二、测试
- 三、测试结果
- 1. github上测试图
- 2. Middlebury数据集中的图
- 3. 自己测试的30w像素图片
- 4. 自己测试的200w像素图片
- 5. 自己测试的500w像素图片
CREStereo的github代码:megvii-research/CREStereo
本文主要是在Windows10上通过Anaconda搭建CREStereo的虚拟测试环境(不是训练环境)。
更新:现有版本目前在Windows支持不是很好,模型初始化会卡住。
(一)Anaconda下载安装Anaconda下载安装本文不再赘述,如有需要请参考:
- Anaconda介绍、安装及使用教程 - 知乎 (zhihu.com)
- 初学 Python 者自学 Anaconda 的正确姿势是什么? - 猴子的回答 - 知乎
主要是参考README.md中的要求安装各种包(本文通过Conda搭建虚拟环境)。
首先打开Anaconda prompt,创建一个环境:
conda create --name CREStereo pyhton=3.7
注:README.md中要求python版本为3.6.9,但是后面安装pillow的时候该版本python不兼容,而且安装megengine要求Python的版本为3.5-3.8,所以综上安装python3.7的环境即可,不要安装3.6.9。
查看是否创建成功:
conda info -e
进入到CREStereo中:
activate CREStereo
查看现有的安装:
conda list
你可以直接使用下面的命令进行安装:
python -m pip install -r requirements.txt
如果安装出错,请参考后面的步骤。
2. 安装cudaconda install cudatoolkit=10.1 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/linux-64/
并且安装cudnn:
conda install cudnn
可以参考这篇文章:Anaconda虚拟环境中安装CUDA
3. 安装megengine更新:
看到Github上的issue说当前代码不支持MegEngine1.9.0,应该使用MegEngine1.8.2版本,大家下面在下载的时候注意一下这个问题。
具体参考:MegEngine 1.9.0 causes test.py error
进入到官网MegEngine 使用指南,然后选择自己的平台,复制上面的命令:
然后进入到Anaconda Prompt,粘贴即可。
pip3 install megengine -f https://megengine.org.cn/whl/mge.html
但是我使用这种方式会出错(即使指定了megengine的版本也不可以):
没办法,网上百度也没有太好的方法,只能自己尝试一下:
进入到该网址MegEngine下载你对应平台的whl文件:
比如我这里下载的MegEngine-1.9.0-cp37-cp37m-win_amd64.whl,然后通过cd命令进入到该whl文件夹中,注意:如果你的whl文件在其他盘,你首先需要切换盘符,比如我的在F盘,先使用:
f:
切换到F盘,然后再通过cd命令进入到所需文件夹中。
执行:
pip install MegEngine-1.9.0-cp37-cp37m-win_amd64.whl
就可以安装成功啦。安装完成可以打开python,输入:
import megengine
看是否报错。
5. 安装opencv_python(安装过程中自动安装numpy):
conda install -c https://conda.anaconda.org/menpo opencv
或者:
pip install opencv-python
参考:windows10下安装opencv(通过anaconda)
windows环境下的Anaconda安装与OpenCV机器视觉环境搭建
conda install Pillow=8.4.0
7. 安装tensorboardX
conda install -c conda-forge tensorboardx
参考:conda 安装tensorboardX
8. 查看是否安装成功conda list
9. 删除环境
如果当前虚拟环境不想要了,可以使用以下命令来删除该环境:
conda remove --name CREStereo --all
到此为止,CREStereo所需要的环境就已经配置好了。
二、测试从这里下载训练好的模型文件,然后进入CREStereo-master文件夹执行:
python test.py --model_path path_to_mge_model --left img/test/left.png --right img/test/right.png --size 1024x1536 --output disparity.png
注意这里作者README.md使用的其实是python3 test.py --modle...
这种命令,使用该命令执行python文件是不会有提示信息的,也就是你执行完也不知道结果对不对,遇到错误也不会报错,所以只需要将python3后面的3去掉,改成python就可以正常运行啦。
还有要将path_to_mge_model改成你的模型文件的所在路径。
运行报错:
是因为numpy版本的问题,使用升级numpy到最新版本即可:
pip install -U numpy
如果升级后还不行,先给它降一下版本,然后再重新升级版本:
pip install -U numpy==1.16.5
pip install -U numpy
还不行的话就参考:Numpy报错:ImportError: numpy.core.multiarray failed to import
修改后再次运行程序,如下:
Loading model: F:\Files\lab_2001\Project\PyCharm\02_CREStereo_master\crestereo_eth3d.mge
err: Failed to load cuda API library
err: failed to load cuda func: cuInit
err: failed to load cuda func: cuDeviceGetCount
err: failed to load cuda func: cuGetErrorString
[33m20 16:14:56[mgb] [0m[1;31mWRN cuda unavailable: unknown cuda error(999) ndev=-1[0m
Images resized: 1024x1536
Model Forwarding...
Traceback (most recent call last):
File "test.py", line 94, in <module>
pred = inference(left_img, right_img, model_func, n_iter=20)
File "test.py", line 37, in inference
align_corners=True,
File "E:\ProgramData\Anaconda3\envs\CREStereo\lib\site-packages\megengine\functional\vision.py", line 663, in interpolate
[wscale, Tensor([0, 0], dtype="float32", device=inp.device)], axis=0
File "E:\ProgramData\Anaconda3\envs\CREStereo\lib\site-packages\megengine\functional\tensor.py", line 405, in concat
(result,) = apply(builtin.Concat(axis=axis, comp_node=device.to_c()), *inps)
TypeError: py_apply expects tensor as inputs
修改MegEngine版本为1.8.2之后,重新跑代码,虽然有报错,但是居然跑出来结果了,看起来效果很棒:
报错如下:
问了一下其他大佬,一个原因是我这个电脑目前没有显卡,而本代码中用到了CUDA,CUDA是英伟达公司开发的,只能用于英伟达显卡,所以报错不能运行。
还有个大佬说再一个原因可能是现在这个算法对Windows支持不是太好,只能等官方更新一下。
跑了几幅图片看了下效果和时间:
1. github上测试图github上作者给的测试图,原尺寸为1280x720。
左图:
视差图:
时间(217s):
resize到1024x1536。
视差图:
时间(373s):
使用原尺寸,即741x497。
左图:
视差图:
时间(81s):
重新resize尺寸到1024x1536:
视差图:
时间(364s):
尺寸为原尺寸640*480。
左图:
视差图:
时间(68s):
重新resize尺寸到1024x1536:
视差图:
时间(360s):
原尺寸为1920*1080。
左图:
视差图:
时间(475s):
重新resize尺寸到1024x1536:
视差图:
时间(364s):
原尺寸为2592*1944。
左图:
如果直接使用500w像素进行测试会出错,看样子是图片太大,内存不够导致的:
(CREStereo) F:\Files\lab_2001\Project\PyCharm\02_CREStereo_master\CREStereo-master>python test.py --model_path ../crestereo_eth3d.mge --left img/500_yuy2/img01.jpg --right img/500_yuy2/img02.jpg --size 2592x1944 --output 500_yuy2_disparity.png
Loading model: F:\Files\lab_2001\Project\PyCharm\02_CREStereo_master\crestereo_eth3d.mge
err: Failed to load cuda API library
err: failed to load cuda func: cuInit
err: failed to load cuda func: cuDeviceGetCount
err: failed to load cuda func: cuGetErrorString
[33m21 10:43:11[mgb] [0m[1;31mWRN cuda unavailable: unknown cuda error(999) ndev=-1[0m
Images resized: 2592x1944
Model Forwarding...
RuntimeError: failed to allocate memory
backtrace:
2 null
3 null
4 null
5 null
6 null
7 null
8 null
9 null
10 null
11 null
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "test.py", line 97, in <module>
pred = inference(left_img, right_img, model_func, n_iter=20)
File "test.py", line 48, in inference
pred_flow = model(imgL, imgR, iters=n_iter, flow_init=pred_flow_dw2)
File "E:\ProgramData\Anaconda3\envs\CREStereo\lib\site-packages\megengine\module\module.py", line 149, in __call__
outputs = self.forward(*inputs, **kwargs)
File "F:\Files\lab_2001\Project\PyCharm_CREStereo_master\CREStereo-master\nets\crestereo.py", line 157, in forward
fmap1_dw16, fmap2_dw16 = self.self_att_fn(fmap1_dw16, fmap2_dw16)
File "E:\ProgramData\Anaconda3\envs\CREStereo\lib\site-packages\megengine\module\module.py", line 149, in __call__
outputs = self.forward(*inputs, **kwargs)
File "F:\Files\lab_2001\Project\PyCharm_CREStereo_master\CREStereo-master\nets\attention\transformer.py", line 106, in forward
feat0 = layer(feat0, feat0, mask0, mask0)
File "E:\ProgramData\Anaconda3\envs\CREStereo\lib\site-packages\megengine\module\module.py", line 149, in __call__
outputs = self.forward(*inputs, **kwargs)
File "F:\Files\lab_2001\Project\PyCharm_CREStereo_master\CREStereo-master\nets\attention\transformer.py", line 57, in forward
query, key, value, q_mask=x_mask, kv_mask=source_mask
File "E:\ProgramData\Anaconda3\envs\CREStereo\lib\site-packages\megengine\module\module.py", line 149, in __call__
outputs = self.forward(*inputs, **kwargs)
File "F:\Files\lab_2001\Project\PyCharm_CREStereo_master\CREStereo-master\nets\attention\linear_attention.py", line 46, in forward
v_length = values.shape[1]
File "E:\ProgramData\Anaconda3\envs\CREStereo\lib\site-packages\megengine\tensor.py", line 111, in shape
shape = super().shape
megengine.core._imperative_rt.core2.AsyncError: An async error is reported. See above for the actual cause. Hint: This is where it is reported, not where it happened. You may call `megengine.config.async_level = 0 to get better error reporting.
Error in atexit._run_exitfuncs:
RuntimeError: failed to allocate memory
backtrace:
2 null
3 null
4 null
5 null
6 null
7 null
8 null
9 null
10 null
11 null
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "E:\ProgramData\Anaconda3\envs\CREStereo\lib\site-packages\megengine\__init__.py", line 114, in _run_exit_handlers
handler()
megengine.core._imperative_rt.core2.AsyncError: An async error is reported. See above for the actual cause. Hint: This is where it is reported, not where it happened. You may call `megengine.config.async_level = 0 to get better error reporting.
test.py中有resize *** 作,可以把图片下采样到200w像素再运行:
视差图:
时间(505s):
重新resize尺寸到1024x1536:
视差图:
时间(366s):
可以看到对1024x1536分辨率图像进行测试的时间约为370s(6mins)左右。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)