商汤科技的 open-mmlab 是集成当前优秀深度学习成果的基于 python pytorch 的集成平台,功能强大,配置化工程。mmcv是其中重要的组件库,linux安装相对方便,Windows支持得不是很友好,本文记录Win10 安装mmcv踩坑过程。
MMCV
- whl 包下载链接
- github 链接
- mmcv 是一个基础库,主要分为两个部分,一部分是和 deep learning framework 无关的一些工具函数,比如 IO/Image/Video 相关的一些操作,另一部分是为 PyTorch 写的一套训练工具,可以大大减少用户需要写的代码量,同时让整个流程的定制变得容易。
- 官方介绍:
MMCV is a foundational library for computer vision research and supports many research projects as below:
- MMDetection: Detection toolbox and benchmark
- MMDetection3D: General 3D object detection toolbox and benchmark
- MMSegmentation: Semantic segmentation toolbox and benchmark
- MMEditing: Image and video editing toolbox
- MMPose: Pose estimation toolbox and benchmark
- MMAction2: Action understanding toolbox and benchmark
- MMTracking: Video perception toolbox and benchmark
- MMClassification: Image classification toolbox and benchmark
- MMOCR: A Comprehensive Toolbox for Text Detection, Recognition and Understanding
It provides the following functionalities.
- Universal IO APIs
- Image/Video processing
- Image and annotation visualization
- Useful utilities (progress bar, timer, …)
- PyTorch runner with hooking mechanism
- Various CNN architectures
- High-quality implementation of common CUDA ops
- 但是在Windows上安装mmcv真的全是坑
环境配置
条目 | 内容 |
---|---|
操作系统 | Windows 10 |
显卡型号 | GTX 1660 |
显卡驱动 | 456.71 |
CUDA | 10.1 |
cuDNN | 8.0.3 |
torch 版本 | 1.7.0 |
torchvision 版本 | 0.8.0 |
visual studio | 2019 |
cl.exe 版本 | 19.28.29914 |
目标mmcv版本 | 1.2.7 |
这些都是我们的目标,慢慢装不着急
基础安装过程
显卡驱动-CUDA-cuDNN
- 参考:CUDA 环境搭建
安装 visual studio 2019
- 下载:https://visualstudio.microsoft.com/zh-hans/vs/
- 下载后安装 visual studio 2019 professional C 桌面开发组件
- 将
E:Program Files (x86)Microsoft Visual Studio2019ProfessionalVCToolsMSVC14.28.29910binHostx64x64
添加到环境变量 Path 中 - 在cmd中输入
cl
C:UsersAdmin>cl
用于 x64 的 Microsoft (R) C/C 优化编译器 19.28.29914 版
版权所有(C) Microsoft Corporation。保留所有权利。
用法: cl [ 选项... ] 文件名... [ /link 链接选项... ]
目的就是使用这个 cl.exe
安装torch和torchvision
- 下载官网:https://pytorch.org/get-started/previous-versions/
- 历史版本:https://download.pytorch.org/whl/torch_stable.html
- 选择合适自己的命令
- 测试
C:UsersAdmin>pip show torch
Name: torch
Version: 1.7.0
Summary: Tensors and Dynamic neural networks in Python with strong GPU acceleration
Home-page: https://pytorch.org/
Author: PyTorch Team
Author-email: packages@pytorch.org
License: BSD-3
Location: e:program_filesannocondaenvspurplelibsite-packages
Requires: future, typing-extensions, dataclasses, numpy
Required-by: torchvision, torchaudio
C:UsersAdmin>pip show torchvision
Name: torchvision
Version: 0.8.0
Summary: image and video datasets and models for torch deep learning
Home-page: https://github.com/pytorch/vision
Author: PyTorch Core Team
Author-email: soumith@pytorch.org
License: BSD
Location: e:program_filesannocondaenvspurplelibsite-packages
Requires: numpy, torch, pillow
Required-by:
配置环境变量
变量名称 | 变量值 |
---|---|
MMCV_WITH_OPS | 1 |
MAX_JOBS | 8 |
CUDA_HOME | C:Program FilesNVIDIA GPU Computing ToolkitCUDAv10.1 |
TORCH_CUDA_ARCH_LIST | 6.1 # 支持 GTX 1080 1660 |
下载mmcv源码
- 链接:https://github.com/open-mmlab/mmcv
- clone 到本地后切换到 1.2.7版本
git checkout v1.2.7
编译安装
- 直接 pip install 安装的mmcv-full没有c 编译的文件,会报出
No module named 'mmcv._ext'
的错误 - 所以我们需要老老实实编译安装mmcv
- 编译cpp文件并链接
python setup.py build_ext # 如果成功, cl 将会自动弹出来编译 flow_warp
python setup.py develop # 安装
踩坑安装
讲道理这么复杂的环境配置已经足够折磨人了,但是在编译过程中也会冒出层出不穷、连绵不绝、匪夷所思的错误
-")-is-not-allowed">错误 calling a host function(“__floorf”) from a device function("deformable_im2col_bilinear< float > ") is not allowed
-")-is-not-allowed">错误 calling a host function(“__ceilf”) from a global function("deform_roi_pool_forward_cuda_kernel< float > ") is not allowed
- 看到上述两个错误去找mmcv源码中对应的行
- 不要取找torch代码中报错对应的行
- 错误原因是cuda与cpu编程时函数名不一样
- 将报错文件中的
floor
替换为floorf
- 将报错文件中的
ceil
替换为ceilf
- 具体有以下文件:
| 需要修改的文件 |
|:----|
| mmcvmmcvopscsrcdeform_conv_cuda_kernel.cuh |
| mmcvmmcvopscsrcdeform_roi_pool_cuda_kernel.cuh |
| mmcvmmcvopscsrcmodulated_deform_conv_cuda_kernel.cuh |
| mmcvmmcvopscsrcroi_align_cuda_kernel.cuh |
| mmcvmmcvopscsrcroi_pool_cuda_kernel.cuh |
错误 subprocess.CalledProcessError: Command ‘‘ninja’, ‘-v’, ‘-j’, ‘8’’ returned non-zero exit status 1.
错误 subprocess.CalledProcessError: Command ‘‘ninja’, ‘-v’’ returned non-zero exit status 1.
- 上述两个错误是因为
ninja
库输出版本的命令是
ninja --version
- 因此解决方案是进入到
Annocondalibsite-packagestorchutilscpp_extension.py
文件中,在 1500 行附近,将['ninja', '-v']
改为['ninja', '--version']
错误 member “torch::jit::ProfileOptionalOp::Kind” may not be initialized
- 到现在我也没有找到这个问题的原因,也没有解决
- 但是这个错误在使用ninja编译文件时不会报出来
错误 error: a member with an in-class initializer must be const
- 我是在
Libsite-packagestorchincludetorchcsrcjitapimodule.h
中报错 - 解决方案是将报错位置的 static 改为 const
错误 Error checking compiler version for cl: ‘utf-8’ codec can’t decode byte 0xd3 in position 0: invalid continuation byte
- 不用管,语言不通,系统 utf-8 微软让 cl.exe 用 gbk 了,不影响正常编译
编译文件不完整
- 默认命令行会使用 ninja 多核并行编译,可以编译出来很多文件
- 如果有文件想单独编译,可以进入
Libsite-packagestorchutilscpp_extension.py
文件的第335行 - 加入一句:
self.use_ninja = False
- 编译程序会一个一个编译,也可以找到编译的循环,选择自己想要编译的文件进行编译,从而得到完整的obj文件套装
编译完成的文件
- 分享我千辛万苦编译出来的结果
运行方式 | 下载链接 |
---|---|
gpu 版 | https://101.43.39.125/HexoFiles/images_matrixtime/20210421100448.pyd |
cpu 版 | https://101.43.39.125/HexoFiles/images_matrixtime/20210421144546.pyd |
- 将文件重命名为
_ext.cp37-win_amd64.pyd
放在安装好的 mmcv-full 包内
也就是说,在没有这个文件时,你运行mmdet会报错
No module named 'mmcv._ext'
此时把这个文件放上
- 之后就可以正常使用mmcv了
- 注意:GPU版的pyd文件一定要在
CUDA 10.1
,**mmcv 1.2.7
**,torch 1.7.0
**,**torchvision 0.8.0
的环境下才**有可能
**可用
参考资料
- https://zhuanlan.zhihu.com/p/126725557
- https://blog.csdn.net/flying_ant2018/article/details/105069608
- https://zhuanlan.zhihu.com/p/308281195?utm_source=wechat_session
- https://blog.csdn.net/baobei0112/article/details/114521271
- https://blog.csdn.net/weixin_44313626/article/details/114778118
- https://pytorch.org/get-started/locally/
- https://zhuanlan.zhihu.com/p/340973730
- https://ask.csdn.net/questions/1452822
- https://github.com/open-mmlab/mmcv
- https://blog.csdn.net/baidu_33008169/article/details/115568783