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

2023-10-28 21:59

本文主要是介绍通过Anaconda搭建CREStereo虚拟测试环境(Win10系统),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、搭建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的虚拟测试环境(不是训练环境)。
论文阅读请查看:CREStereo论文阅读


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

(一)Anaconda下载安装

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

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

(二)通过Conda搭建环境

主要是参考README.md中的要求安装各种包(本文通过Conda搭建虚拟环境)。
在这里插入图片描述

1. 创建虚拟环境

首先打开Anaconda prompt,创建一个环境:

conda create --name CREStereo python=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改成你的模型文件的所在路径。


更新: 有些同学说下不了模型,我这里放上百度网盘链接,有需要自取:

链接:https://pan.baidu.com/s/1vAeURA-439hyV4v835a26g 
提取码:9rwj

运行报错:
在这里插入图片描述
是因为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 inferencealign_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=0File "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 memorybacktrace:
2 null3 null4 null5 null6 null7 null8 null9 null10 null11 nullThe 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 inferencepred_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\02_CREStereo_master\CREStereo-master\nets\crestereo.py", line 157, in forwardfmap1_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\02_CREStereo_master\CREStereo-master\nets\attention\transformer.py", line 106, in forwardfeat0 = 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\02_CREStereo_master\CREStereo-master\nets\attention\transformer.py", line 57, in forwardquery, key, value, q_mask=x_mask, kv_mask=source_maskFile "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\02_CREStereo_master\CREStereo-master\nets\attention\linear_attention.py", line 46, in forwardv_length = values.shape[1]File "E:\ProgramData\Anaconda3\envs\CREStereo\lib\site-packages\megengine\tensor.py", line 111, in shapeshape = 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 memorybacktrace:
2 null3 null4 null5 null6 null7 null8 null9 null10 null11 nullThe 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_handlershandler()
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)左右。

这篇关于通过Anaconda搭建CREStereo虚拟测试环境(Win10系统)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/296216

相关文章

C++链表的虚拟头节点实现细节及注意事项

《C++链表的虚拟头节点实现细节及注意事项》虚拟头节点是链表操作中极为实用的设计技巧,它通过在链表真实头部前添加一个特殊节点,有效简化边界条件处理,:本文主要介绍C++链表的虚拟头节点实现细节及注... 目录C++链表虚拟头节点(Dummy Head)一、虚拟头节点的本质与核心作用1. 定义2. 核心价值二

mysql查询使用_rowid虚拟列的示例

《mysql查询使用_rowid虚拟列的示例》MySQL中,_rowid是InnoDB虚拟列,用于无主键表的行ID查询,若存在主键或唯一列,则指向其,否则使用隐藏ID(不稳定),推荐使用ROW_NUM... 目录1. 基本查询(适用于没有主键的表)2. 检查表是否支持 _rowid3. 注意事项4. 最佳实

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

如何使用Haporxy搭建Web群集

《如何使用Haporxy搭建Web群集》Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多如LVS和Nginx,本案例介绍使用Haproxy及Nginx搭建一套Web群集,感兴趣的... 目录一、案例分析1.案例概述2.案例前置知识点2.1 HTTP请求2.2 负载均衡常用调度算法 2.

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

Linux系统中的firewall-offline-cmd详解(收藏版)

《Linux系统中的firewall-offline-cmd详解(收藏版)》firewall-offline-cmd是firewalld的一个命令行工具,专门设计用于在没有运行firewalld服务的... 目录主要用途基本语法选项1. 状态管理2. 区域管理3. 服务管理4. 端口管理5. ICMP 阻断

SpringBoot3中使用虚拟线程的完整步骤

《SpringBoot3中使用虚拟线程的完整步骤》在SpringBoot3中使用Java21+的虚拟线程(VirtualThreads)可以显著提升I/O密集型应用的并发能力,这篇文章为大家介绍了详细... 目录1. 环境准备2. 配置虚拟线程方式一:全局启用虚拟线程(Tomcat/Jetty)方式二:异步

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、