安装环境
conda create --name maskrcnn_benchmark
conda activate maskrcnn_benchmark
conda install python==3.7
conda install ipython pip
pip install ninja yacs cython matplotlib tqdm opencv-python
conda install -c pytorch pytorch-nightly torchvision cudatoolkit=9.0
建议换成
conda install pytorch==1.1 torchvision cudatoolkit=9.0
问题1:ModuleNotFoundError: No module named 'maskrcnn_benchmark'
解决:
添加路径方式:
永久:到环境变量PATHONPATH 添加,没有就新建一个
import sys
sys.path.append("自己路径")
问题2:AttributeError: module 'torch._six' has no attribute 'PY3'
版本问题:
根据错误提示修改:/maskrcnn_benchmark/utils/imports.py 中if torch._six.PY3: 改成:if torch._six.PY37:
问题3:ImportError: cannot import name '_C' from 'maskrcnn_benchmark'
对于layers下面的文件,nms.py、roi_align.py等出现这个错误的from maskrcnn_benchmark import _C都换成from ._utils import _C就解决了
问题3:安装apex
这个库的安装不是像其他的一样的直接使用 pip install XXX
的形式,而是使用原始的Git方式
在GitHub中直接下载该库,然后解压。并放到相应的位置上。
https://github.com/NVIDIA/apex.git
进入解压文件夹:
python setup.py install --cuda_ext --cpp_ext
问题4:subprocess.CalledProcessError: Command '['where', 'cl']' returned non-zero exit status 1
设置环境变量---我的cl.exe位置跟网上不太一样;
C:\Program Files (x86)\Microsoft VisualStudio\2019\Community\SDK\ScopeCppSDK\vc15\VC\bin
问题5:77 errors detected in the compilation of "C:/Users/gpu/AppData/Local/Temp/tmpxft_00004664_00000000-10_ROIPool_cuda.cpp1.ii".
ROIPool_cuda.cu
ninja: build stopped: subcommand failed.
- 修改maskscoring_rcnn/maskrcnn_benchmark/csrc/cuda/ROIAlign_cuda.cu第275行:
//原代码: dim3 grid(std::min(THCCeilDiv(output_size, 512L), 4096L)); dim3 grid(std::min(((int)output_size + 512 -1) / 512, 4096));
- 修改maskscoring_rcnn/maskrcnn_benchmark/csrc/cuda/ROIAlign_cuda.cu第320行:
// dim3 grid(std::min(THCCeilDiv(output_size, 512L), 4096L));
dim3 grid(std::min(((int)output_size + 512 -1) / 512, 4096));
- 修改maskscoring_rcnn/maskrcnn_benchmark/csrc/cuda/ROIPool_cuda.cu第129行:
// dim3 grid(std::min(THCCeilDiv(output_size, 512L), 4096L));
dim3 grid(std::min(((int)output_size + 512 -1) / 512, 4096));
- 修改maskscoring_rcnn/maskrcnn_benchmark/csrc/cuda/ROIPool_cuda.cu第176行
//dim3 grid(std::min(THCCeilDiv(grad.numel(), 512L), 4096L));
dim3 grid(std::min(((int)(grad.numel()) + 512 -1) / 512, 4096));