通过Anaconda搭建CREStereo虚拟测试环境(Win10系统)

通过Anaconda搭建CREStereo虚拟测试环境(Win10系统),第1张

文章目录
  • 一、搭建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环境

CREStereo的github代码:megvii-research/CREStereo
本文主要是在Windows10上通过Anaconda搭建CREStereo的虚拟测试环境(不是训练环境)。


更新:现有版本目前在Windows支持不是很好,模型初始化会卡住。

(一)Anaconda下载安装

Anaconda下载安装本文不再赘述,如有需要请参考:

  1. Anaconda介绍、安装及使用教程 - 知乎 (zhihu.com)
  2. 初学 Python 者自学 Anaconda 的正确姿势是什么? - 猴子的回答 - 知乎
(二)通过Conda搭建环境

主要是参考README.md中的要求安装各种包(本文通过Conda搭建虚拟环境)。

1. 创建虚拟环境

首先打开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. 安装cuda
conda 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机器视觉环境搭建

6. 安装Pillow
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):

2. Middlebury数据集中的图

使用原尺寸,即741x497。
左图:

视差图:

时间(81s):


重新resize尺寸到1024x1536:
视差图:

时间(364s):

3. 自己测试的30w像素图片

尺寸为原尺寸640*480。
左图:

视差图:

时间(68s):


重新resize尺寸到1024x1536:
视差图:

时间(360s):

4. 自己测试的200w像素图片

原尺寸为1920*1080。
左图:

视差图:

时间(475s):


重新resize尺寸到1024x1536:
视差图:

时间(364s):

5. 自己测试的500w像素图片

原尺寸为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)左右。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/714314.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)

保存