经历磨难终于在windows上编译好了mmdetect
给出我的环境信息供参考:
Windows10
Visual Studio 2017,15.9.23 _MSC_VER=14.16
CUDA 10.0
nvcc 10.0 (显卡驱动好像显示10.1 不一样好像无伤大雅
python 3.6
pytorch 版本要在[1.1,1.4]之间,1.5会出问题:AT_CHECK未声明:
前期一直都在visual studio 和cuda版本匹配上花时间。
尽量老老实实用2017,VS 2019到后面及时修改了cuda 10.0配置文件也会出一些问题。
执行的时候尽量在cmd执行,pycharm输出的编码可能不支持,出来的都是utf-8解gbk编码的乱码。
安装好Visual Studio后在cmd执行
call "C:Program Files (x86)Microsoft Visual Studio2017EnterpriseVCAuxiliaryBuildvcvarsall.bat" x64 -vcvars_ver=14.xx (x 修改为对应_MSC_VER)
在这里可以查看对应MSC_VER: https://dev.to/yumetodo/list-of-mscver-and-mscfullver-8nd
其它跟着感觉装就好,似乎没有在其它包上出大问题。
参考dockerfile
FROM pytorch/pytorch:1.1.0-cuda10.0-cudnn7.5-devel
RUN apt-get update && apt-get install -y
git
wget
curl
cmake
unzip
build-essential
libsm6
libxext6
libfontconfig1
libxrender1
libswscale-dev
libtbb2
libtbb-dev
libjpeg-dev
libpng-dev
libtiff-dev
libjasper-dev
libavformat-dev
libpq-dev
libturbojpeg
software-properties-common
&& apt-get clean
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN pip install --no-cache-dir
numpy
pandas
PyYAML
cycler
dill
h5py
imgaug
matplotlib
opencv-contrib-python
Pillow
scikit-image
scikit-learn
scipy
setuptools
six
tqdm
ipython
ipdb
albumentations
click
jpeg4py
addict
colorama
torchvision
iterative-stratification
解决报错: Error checking compiler version for cl
解决方法:导入cl.exe所在位置到系统环境变量path
对mmdetect项目文件进行修改:
在mmdet/ops/nms/setup.py
替换
# default_compiler_so = self.compiler_so # to make it successfully compile disable compiler_so edited by zzl
=>
default_compiler_so = ""
在mmdet/ops/sigmoid_focal_loss/src/sigmoid_focal_loss_cuda.cu
在#include 区域下添加
int Ceil_div(int a, int b) { return (a + b - 1); }
替换
/*targets.contiguous().data<long>(), edited by zzl*/
=>
static_cast<long*>(targets.contiguous().data_ptr()),
/*dim3 grid(std::min(THCCeilDiv(d_logits_size, 512L), 4096L)); edited by zzl*/
=>
dim3 grid(std::min(Ceil_div((int)d_logits_size, 512), 4096));
/*dim3 grid(std::min(THCCeilDiv(losses_size, 512L), 4096L)); edited by zzl*/
=>
dim3 grid(std::min(Ceil_div((int)losses_size, 512), 4096));
完成修改后,分别在
mmdet/ops/roi_align/
mmdet/ops/roi_pool/
mmdet/ops/dcn/
mmdet/ops/nms/
mmdet/ops/sigmoid_focal_loss/ 下 执行
python setup.py build_ext --inplace
正在创建库 build emp.win-amd64-3.6Releasesrcsigmoid_focal_loss_cuda.cp36-win_amd64.lib 和对象 build emp.win-amd64-3.6Releasesrcsigmoid_focal_loss_cuda.cp36-win_amd64.exp
正在生成代码
c:usersjhwenvenuspykaggle-imaterialist-with-modelmmdetectionmmdetopssigmoid_focal_losssrcsigmoid_focal_loss.cpp(36) : warning C4715: “SigmoidFocalLoss_backward”: 不是所有的控件路径都返回值
c:usersjhwenvenuspykaggle-imaterialist-with-modelmmdetectionmmdetopssigmoid_focal_losssrcsigmoid_focal_loss.cpp(25) : warning C4715: “SigmoidFocalLoss_forward”: 不是所有的控件路径都返回值
已完成代码的生成
copying buildlib.win-amd64-3.6sigmoid_focal_loss_cuda.cp36-win_amd64.pyd ->
最后在mmdetection目录下执行
python setup.py develop
如果顺利执行,那么恭喜你完成了编译工作,接下来就可以测试一下了。