一、windows下安装mmcv

链接:https://zhuanlan.zhihu.com/p/308281195

1、环境准备

安装git

https://link.zhihu.com/?target=https%3A//git-scm.com/download/win

安装visual studio community 2019

https://link.zhihu.com/?target=https%3A//visualstudio.microsoft.com/

安装conda

安装对应版本的cuda和pytorch(如果cpu版本则不安装cuda)

2、设置python环境

  1. 从 Windows 菜单启动 Anaconda 命令行

  2. 如 Miniconda 安装程序建议,不要使用原始的 cmd.exe 或是 powershell.exe

  3. Anaconda 命令行有两个版本,一个基于 PowerShell,一个基于传统的 cmd.exe。请注意以下说明都是使用的基于 PowerShell

  4. 创建一个新的 Conda 环境

conda create --name mmcv python=3.7 # 3.6, 3.7, 3.8 经测试也能通过
conda activate mmcv # 确保做任何操作前先激活环境
  1. 安装 PyTorch,可以根据需要安装支持 CUDA 或不支持 CUDA 版本,根据目前的测试,至少需要安装 1.6.0 以上版本的 Pytorch
# CUDA version
conda install pytorch torchvision cudatoolkit=10.2 -c pytorch
# CPU version
conda install pytorch torchvision cpuonly -c pytorch
  1. 准备 MMCV 源代码
git clone https://github.com/open-mmlab/mmcv.git
git checkout v1.2.0 # based on target version
cd mmcv
  1. 安装所需 Python 依赖包
pip3 install -r requirements.txt

3、设置 MSVC 编译器

设置环境变量。添加 C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\bin\Hostx86\x64PATH。则 cl.exe 可以在命令行中运行, 如下所示。

(base) PS C:\Users\WRH> cl
Microsoft (R) C/C++ Optimizing Compiler Version 19.27.29111 for x64
Copyright (C) Microsoft Corporation. All rights reserved.

usage: cl [ option... ] filename... [ /link linkoption... ]

为了兼容性,我们使用 x86-hosted 以及 x64-targeted 版本,即路径中的 Hostx86\x64

因为 Pytorch 将解析 cl.exe 的输出以检查其版本,只有 utf-8 将会被识别,你可能需要将系统语言更改为英语。控制面板 -> 地区-> 管理-> 非 Unicode 来进行语言转换.

4、编译CUDA和CPU版本的OPs模块

安装环境变量

$env:MMCV_WITH_OPS = 1
$env:MAX_JOBS = 8 # 根据你可用CPU以及内存量进行设置

检查 CUDA_PATH 或者 CUDA_HOME 已经存在在 envs 之中。否则按照一下步骤设置:

$env:CUDA_HOME = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\"
或者
$env:CUDA_HOME = $env:CUDA_PATH_V10_2 # 如果 CUDA_PATH_V10_2 在CUDA安装过程中已经设置好

设置 CUDA 生成文件的架构

$env:TORCH_CUDA_ARCH_LIST="6.1" # 支持 GTX 1080
# 或者用所有支持的版本,但可能会变得很慢
$env:TORCH_CUDA_ARCH_LIST="3.5 3.7 5.0 5.2 6.0 6.1 7.0 7.5"

编译

$env:MMCV_WITH_OPS = 1
$env:MAX_JOBS = 8 # 根据你可用CPU以及内存量进行设置
conda activate mmcv # 激活环境
cd mmcv # 改变路径
python setup.py build_ext # 如果成功, cl 将会自动弹出来编译 flow_warp
python setup.py develop # 安装
pip list # 检查是否安装成功

二、linux下安装mmcv

官网: https://github.com/open-mmlab/mmcv

https://www.csdn.net/tags/MtjakgwsNDI1NTMtYmxvZwO0O0OO0O0O.html#

1、知道pytorch和cuda版本安装任意版本mmcv(torch.__version__与torch.cuda.version():

pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/{cu_version}/{torch_version}/index.html

2、知道pytorch和cuda版本安装指定版本mmcv

pip install mmcv-full=={mmcv_version} -f https://download.openmmlab.com/mmcv/dist/{cu_version}/{torch_version}/index.html

注意:mmcv要与mmdet版本对应

过程记录: 要求mmcv-full版本是1.1.5,经检测发现torch版本是1.10.0,cuda版本是11.3,通过mmcv官网https://github.com/open-mmlab/mmcv
在这里插入图片描述

pip install mmcv-full==1.1.5 -f https://download.openmmlab.com/mmcv/dist/cu113/torch1.10.0/index.htm
下载失败,提示是:
RuntimeError:
The detected CUDA version (10.0) mismatches the version that was used to compile
PyTorch (11.3). Please make sure to use the same CUDA versions.
但是之前下载的提示还是找不到1.1.5对应版本,当时还可以下载1.2.0可是现在发现1.2.0都下载不了,那么我猜测难道cuda和torch版本真的显示不对?
按照提示去找对应cuda10.0和torch11.3的mmcv-full版本,发现在官网上找不到对应版本!
我只能用
pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu113/torch1.10.0/index.htm
去下载默认的版本,结果顺利下载了默认的1.4.0版本的mmcv-full,所以错误原因肯定不是cuda和torch版本的问题,mmcv-full虽然顺利安装,但是版本是不对应的肯定不行,运行:
python mmdet/utils/collect_env.py
提示mmcv版本不对,我找到代码问题的源头,发现是在import mmdet时的__init__.py文件内部用assert构造了错误,于是我改掉了这个错误提示后就不会报版本错误,后面我也不知道会不会出现版本不对应的问题,目前问题是解决了。mmcv_maximum_version = '1.4.0'

3、mmdet安装

安装使用mmdet就是先把这个mmdet文件包放在工程文件下,然后运行

pip install -r requirements/build.txt
pip install -v -e .  # or "python setup.py develop"
import mmcv

from .version import __version__, short_version


def digit_version(version_str):
    digit_version = []
    for x in version_str.split('.'):
        if x.isdigit():
            digit_version.append(int(x))
        elif x.find('rc') != -1:
            patch_version = x.split('rc')
            digit_version.append(int(patch_version[0]) - 1)
            digit_version.append(int(patch_version[1]))
    return digit_version


mmcv_minimum_version = '1.1.1'
mmcv_maximum_version = '1.4.0'
mmcv_version = digit_version(mmcv.__version__)


assert (mmcv_version >= digit_version(mmcv_minimum_version)
        and mmcv_version <= digit_version(mmcv_maximum_version)), \
    f'MMCV=={mmcv.__version__} is used but incompatible. ' \
    f'Please install mmcv>={mmcv_minimum_version}, <={mmcv_maximum_version}.'

__all__ = ['__version__', 'short_version']

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐