美文网首页
[PyTorch] MMDetection在Windows下的配

[PyTorch] MMDetection在Windows下的配

作者: qgpmztmf | 来源:发表于2019-07-09 21:15 被阅读0次

    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的小伙伴一些帮助。


    相关文章

      网友评论

          本文标题:[PyTorch] MMDetection在Windows下的配

          本文链接:https://www.haomeiwen.com/subject/oeafkctx.html