阅读 163

Maskrcnn-Benchmark编译指南(Windows10+Python3.7+pytorch1.2.0+Cuda10.1)

勘误

pytorch1.1.0版本确实可以正常编译并且运行demo,甚至运行test_net.py。但在训练的时候,会抛出异常torch.nonzero _th_or not supported on CUDAType for Bool。上网查阅相关资料后,发现必须使用pytorch1.2.0版本,才有torch.bool()的支持,因此将pytorch更新为1.2.0之后,正常运行train_net.py。下文全部使用1.2.0版本,特此勘误。

版本

  • Python:3.7
  • Torch:1.2.0(重要)

由于maskrcnn发布的时候torch刚发布到1.0.1版本,而在安装指南中写到必须使用1.0.0NightRelease版本,而现在torch已经发布到了1.4版本,究竟应该用哪个版本来编译让我感觉非常迷惑。最后实践发现,1.2.0版本能够成功编译,而该版本应该也对应了1.0.0-NightRelease版本的一些功能。

conda install pytorch==1.2.0 torchvision==0.4.0 cudatoolkit=10.0 -c pytorch

GCC编译器

最开始使用的是Anaconda中的MINGW32,但是一直编译报错,最后官网下载并安装了Mingw,终于能够成功使用。

编译cocoAPI

一定要按官方文档中的

#To prevent installation error do the following after commiting cocooapi :
#using file explorer  naviagate to cocoapi\PythonAPI\setup.py and change line 14 from:
#extra_compile_args=['-Wno-cpp', '-Wno-unused-function', '-std=c99'],
#to
#extra_compile_args={'gcc': ['/Qstd=c99']},
#Based on  https://github.com/cocodataset/cocoapi/issues/51
复制代码

修改setup.py,进行编译,否则会报错

编译APEX

在编译Apex的时候,由于pytorch1.0.0使用的是CUDA10.0,而我本机装的是CUDA10.1,所以会提示版本冲突。解决方法: 在apex/setup.py中注释掉106行,取消版本检验,即可成功编译

if "--cuda_ext" in sys.argv:
    from torch.utils.cpp_extension import CUDAExtension
    sys.argv.remove("--cuda_ext")

    if torch.utils.cpp_extension.CUDA_HOME is None:
        raise RuntimeError("--cuda_ext was requested, but nvcc was not found.  Are you sure your environment has nvcc available?  If you're installing within a container from https://hub.docker.com/r/pytorch/pytorch, only images whose names contain 'devel' will provide nvcc.")
    else:
        # 注释掉这句
        # check_cuda_torch_binary_vs_bare_metal(torch.utils.cpp_extension.CUDA_HOME)
复制代码

编译MaskrcnnBenchmark

只要确保前面的流程都没有问题,这一步也能顺利通过编译。最重要的是torch版本和CUDA版本一定要与代码使用的版本对应。同时作者使用Anaconda的MINGW无法正常编译,使用上述文章中提到的网站下载的GCC才能正常编译

运行DEMO

为了验证编译的正确性,我们运行一下demo

PIL版本问题

ImportError: cannot import name 'PILLOW_VERSION' from 'PIL' (H:\Anaconda3\envs\maskrcnn\lib\site-packages\PIL\__init__.py)
复制代码

将PIL更换至6.2.1

pip install --user Pillow==6.1
复制代码

参考:

github.com/python-pill…

DEMO运行成功