[PyTorch] MMDetection在Windows下的配置步骤

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() 替换为 static_cast(targets.contiguous().data_ptr())
2) 在#include 之后添加函数:
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();
const long *mask_w_idx_ = mask_w_idx.data();

替换为

const long *mask_h_idx_ = static_cast(mask_h_idx.data_ptr());
const long *mask_w_idx_ = static_cast(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的小伙伴一些帮助。


你可能感兴趣的:([PyTorch] MMDetection在Windows下的配置步骤)