1. MMDetection简介
MMdetection is an open source object detection toolbox based on PyTorch. It is a part of the open-mmlab project developed by Multimedia Laboratory, CUHK. 目前 Github 上只有 linux 版本代码,下面内容是将代码移植到windows上的实现步骤。
2. 配置环境
Windows10 + Cuda9 + PyTorch1.1
3. 所需文件
VC14编译器, 百度网盘链接:https://pan.baidu.com/s/19ofabAeXW0XRB5XCXFwgDA 提取码:oll5
4. 配置步骤和出现的问题
(1)安装好Cuda环境,这里不再赘述。
(2)安装 VC14 编译器 visualcppbuildtools_full.exe (上边有百度云链接),MMDetection大部分代码用Python完成,需要用编译器将.cu文件编译为.pyd文件。如果你已经安装VS2015或之上的版本,可以忽略这步。
(3)在系统变量Path 中添加 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin
(4)下载安装Anaconda3,创建新环境后,安装cython,我的新环境取名为open-mmlab
,以下步骤均在激活新环境下的CMD中执行
conda install cython
(5) 下载mmdetection,并进入目录
git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
(6) 编译roi_align的cuda拓展
cd mmdet/ops/roi_align
python setup.py build_ext --inplace
这里可能会报错,关于Half类型数据的运算符重载问题,由于我并不经常使用Half类型数据,这里我直接将出错文件的6行代码注释,简单粗暴。注释 anaconda3/your_env_name/titan_copy/lib/site-packages/torch/include\THC\THCNumerics.cuh
文件中的第191,192,193,194,195,197行。
(7) 编译roi_pooling的cuda拓展
cd ../roi_pool
python setup.py build_ext --inplace
(8) 编译nms的cuda拓展,修改mmdetection\mmdet\ops\nms下setup.py
文件,将第一行修改为第二行(第一行中compiler_so属性为linux下gcc编译器的属性,windows下直接清空,这样会默认使用VC14的默认属性):
# default_compiler_so = self.compiler_so
default_compiler_so = ""
之后执行
cd ../nms
python setup.py build_ext --inplace
(9) 编译dcn的cuda拓展
cd ../dcn
python setup.py build_ext --inplace
(10) 编译sigmoid_docal的cuda拓展,修改mmdetection\mmdet\ops\sigmoid_focal_loss\src
下的sigmoid_focal_loss_cuda.cu文件
1) 将文件中targets.contiguous().data<long>()
替换为 static_cast<long*>(targets.contiguous().data_ptr())
2) 在#include <cfloat>
之后添加函数:
int Ceil_div(int a, int b) { return (a + b - 1); }
3) 将文件中两处dim3 grid(std::min(THCCeilDiv(losses_size, 512L), 4096L));
替换为dim3 grid(std::min(Ceil_div((int)losses_size, 512), 4096))
;
之后执行
cd ../sigmoid_focal_loss
python setup.py build_ext --inplace
(11) 编译masked_conv的cuda拓展,修改mmdetection\mmdet\ops\masked_conv\src
下的masked_conv2d_kernel.cu
文件
将文件中
const long *mask_h_idx_ = mask_h_idx.data<long>();
const long *mask_w_idx_ = mask_w_idx.data<long>();
替换为
const long *mask_h_idx_ = static_cast<long*>(mask_h_idx.data_ptr());
const long *mask_w_idx_ = static_cast<long*>(mask_w_idx.data_ptr());
之后执行
cd ../masked_conv
python setup.py build_ext --inplace
(12) 安装pycocotools
pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI
(13) 安装mmdetection, cd到mmdetection根目录
python setup.py develop
至此MMDetection在Windows下的配置完成,希望给希望能在Windows下运行MMDetection的小伙伴一些帮助。