-------------------------------------------------------------------------------
问题0(add)
2020年5月12日新发现:
关于cl.exe报的原因。还可能不是VS的cl.exe缺失造成的,比如下图:
背景:由于本地mmdetection在编译的时候,在这个目录下
没有生成我的python3.7版本的soft_nms_cpu.***.pyd(是从build下的build\lib.win-amd64-3.7\mmdet\ops\nms中拷过来的)。所以尝试模仿nms_cpu和nms_cuda生成对应版本的soft_nms_cpu。修改了主mmdetection目录下的setup.py.
但是,就报了最上边那个图的错,“”“无法打开包括文件: “numpy/arrayobject.h”:”因此,就做了如下修改:
最后,运行 python setup.py develop
就活啦!!!【由衷感谢大佬的博客,不止一次帮助到了我,click here】
---------------------------------------------------------------------------------
问题1:
遇到最最最bug的问题,提示:
error: command ‘C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin\nvcc.exe’ failed with exit status 2
反正我是蒙蔽到不行搞了大半天,直到看到了这个答案。
按照要求,装了VS2017社区版本后,问题竟然就这么莫名其妙的解决了,咱也不知道为什么,反正就这么给解决了。
问题2:
D:\Program Files (x86)\VS2015_V14\VC\BIN\x86_amd64\cl.exe’ failed with tatus 2.
补充操作
有同学不明白具体是怎么做的,现在详细说明一下。
1 打开Anaconda Prompt(Anaconda3)
2 在base环境下进入你envs中所对应的需要添加激活预处理的环境下,本例激活\envs\open-mmlab`cd %CONDA_PREFIX% mkdir .\etc\conda\activate.d mkdir .\etc\conda\deactivate.d type NUL > .\etc\conda\activate.d\env_vars.bat type NUL > .\etc\conda\deactivate.d\env_vars.bat`
${CONDA_PREFIX}是当前环境的路径。我这里是D:\Program Files (x86)\Anaconda3\envs\open-mmlab
这样就有了下文提到的activate.d / env_vars.bat和deactivate.d / env_vars.bat两个文件,就可以按照需求,对环境变量进行设置
以上内容参考自 这里
这个问题是因为我只根据当前虚拟环境的需求,更改了环境变量path,其余的比如CUDA_HOME并没有修改成对应cuda 的版本。
以防万一,现在把cuda8.0对应的cuda环境变量全部改为需要的cuda10.0的。
activate.d / env_vars.bat 内容如下
@set CUDA_HOME=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0
@set CUDA_BIN_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin
@set CUDA_LIB_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\lib\x64
@set cuda_libnvvp=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\libnvvp
@set CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0
@set CUDA_SDK_BIN_PATH=C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.0\bin\win64
@set CUDA_SDK_LIB_PATH=C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.0\common\lib\x64
@set CUDA_SDK_PATH=C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.0
@set CL_EXE=D:\Program Files (x86)\VS2015_V14\VC\bin\x86_amd64
@set INCLUDE_CUDA=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\include
@set CUPTI_CUDA=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\extras\CUPTI\libx64
@set CC_CUDA_VERSION=10.0
@set cuda_bin=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\10.0\bin
@set OLD_PATH=%PATH%
@set PATH=%CUDA_BIN_PATH%;%CUDA_LIB_PATH%;%cuda_libnvvp%;%CUDA_PATH%;%CUDA_SDK_BIN_PATH%;%CUDA_SDK_LIB_PATH%;%CUDA_SDK_PATH%;%CL_EXE%;%INCLUDE_CUDA%;%CUPTI_CUDA%;%PATH%;
deactivate.d / env_vars.bat 内容如下
@set PATH=%OLD_PATH%
问题3:
编译找不到cuda_runtime_api.h
手动在mmdetection-master\mmdet\ops\utils\src\compiling_info.cpp中加上文件的路径,变成:
我也不知道为什么配置了cuda的环境变量之后,系统会找不到这个cuda的头文件。也不理解这个头文件是怎么索引找到的。希望谁知道的话,告知一声,不胜感激。
问题4
编译pycocotools出错,提示
cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp””
有大神已经做好了windows版本的安装包,进入下面链接
https://github.com/philferriere/cocoapi
执行以下命令,将三方库编译Lib\site-packages下。(其实,就是将)
【番外】其实,在这个问题中,不识别/Wno-cpp,只需要将setup.py中的相关项目屏蔽掉旧可以了。见下图
问题5
关于写mmdetection的demo.py
from mmdet.apis import init_detector, inference_detector, show_result
config_file = './configs/faster_rcnn_r50_fpn_1x.py'
checkpoint_file = './checkpoints/faster_rcnn_r50_fpn_1x_20181010-3d1b3351.pth'
# 初始化模型
model = init_detector(config_file, checkpoint_file)
# 测试一张图片
img = 'test.jpg'
result = inference_detector(model, img)
show_result(img, result, model.CLASSES,show=True,out_file='./res.jpg') #这里将结果图片进行保存,其余参数为默认值
问题6
计算机中丢失mspdb140.dll。或者找不到cl.exe大概率是因为计算机中安装vs的时候有,但是没有加入到环境变量中。
-首先从VS安装目录的D:\Program Files (x86)\VS2015_V14\Common7\IDE下,复制四个文件(见下图)。
到这里:D:\Program Files (x86)\VS2015_V14\VC\bin。
-其次,将这个D:\Program Files (x86)\VS2015_V14\VC\bin添加到环境变量path中。
-最后,重启电脑,cmd就能找到相关文件了。