windows10+VS2017+CUDA10.1編譯指南mmdet


經歷磨難終於在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

如果順利執行,那么恭喜你完成了編譯工作,接下來就可以測試一下了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM