經歷磨難終於在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 Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.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\temp.win-amd64-3.6\Release\src\sigmoid_focal_loss_cuda.cp36-win_amd64.lib 和對象 build\temp.win-amd64-3.6\Release\src\sigmoid_focal_loss_cuda.cp36-win_amd64.exp
正在生成代碼
c:\users\jhwen\venus\py\kaggle-imaterialist-with-model\mmdetection\mmdet\ops\sigmoid_focal_loss\src\sigmoid_focal_loss.cpp(36) : warning C4715: “SigmoidFocalLoss_backward”: 不是所有的控件路徑都返回值
c:\users\jhwen\venus\py\kaggle-imaterialist-with-model\mmdetection\mmdet\ops\sigmoid_focal_loss\src\sigmoid_focal_loss.cpp(25) : warning C4715: “SigmoidFocalLoss_forward”: 不是所有的控件路徑都返回值
已完成代碼的生成
copying build\lib.win-amd64-3.6\sigmoid_focal_loss_cuda.cp36-win_amd64.pyd ->
最后在mmdetection目錄下執行
python setup.py develop
如果順利執行,那么恭喜你完成了編譯工作,接下來就可以測試一下了。