因为不知名的原因,要在win10上安装Detectron2(尽管这个东西对linux比较友好,win10上一堆坑...),踩了无数的坑,翻了各种攻略终于成功了!记录一下,献给同样的踩坑人~
安装环境
- VS2019 Community
- Anaconda3
- CUDA10.2
- cudnn10.2
没有安装好的自己搜一下吧~ 网上一大片~~
新建环境
我自己喜欢启动Anaconda 新建一个隔离环境,这里我们命名为detecron2
,也可以用命令行设置。注意python的版本为3.6(其他的我没试过)
conda creat -n detectron2 python=3.6
conda activate detectron2
设置cl环境变量
根据自己VS的安装路径,找到cl.exe
设置环境变量。我的是在:
D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29910\bin\Hostx64\x64\cl.exe
进入cmd
,输入cl
。
安装依赖包
pip install cython pyyaml tabulate termcolor yacs iopath ninja
pip install opencv-python
pip install omegaconf==2.1.0.dev22
pip install cloudpickle
pip install Matplotlib
pip install pydot
pip install tensorboard
pip install pycocotools>=2.0.2
安装torch,torchvision
下载路径:https://download.pytorch.org/whl/torch_stable.html
选择对应的版本号,并进入下载路径。
pip install torch-1.6.0-cp36-cp36m-win_amd64.whl
pip install torchvision-0.7.0-cp36-cp36m-win_amd64.whl
安装cocoapi
pycocotools不支持windows,所以必须使用git地址下载
https://github.com/philferriere/cocoapi
cd到下载路径
python setup.py build_ext --inplace
python setup.py build_ext install
安装fvcore
下载地址:https://github.com/facebookresearch/fvcore
cd到下载路径。
python setup.py build --force develop
安装detectron2
下载地址:https://github.com/facebookresearch/detectron2(注意下载对应的cuda的版本,默认是最新版,我下载的是tag 0.4
)
cd到下载路径。
python setup.py build --force develop
这个地方会有一堆错误,我们一个一个解决!
BUGs汇总
Q1: UserWarning: Error checking compiler version for cl: 'utf-8' codec can't decode byte 0xd3 in position 0: invalid continuation byte
打开你环境下的cpp_extension.py
, 找到如下代码段的位置,在decode()
的括号中添加 ’ .gbk’
(注意.gbk
前面有空格),把编码格式改一下。
if sys.platform.startswith('darwin'):
# There is no particular minimum version we need for clang, so we're good here.
return True
try:
if sys.platform.startswith('linux'):
minimum_required_version = MINIMUM_GCC_VERSION
version = subprocess.check_output([compiler, '-dumpfullversion', '-dumpversion'])
version = version.decode().strip().split('.')
else:
minimum_required_version = MINIMUM_MSVC_VERSION
compiler_info = subprocess.check_output(compiler, stderr=subprocess.STDOUT)
match = re.search(r'(\d+)\.(\d+)\.(\d+)', compiler_info.decode(' gbk').strip())
version = (0, 0, 0) if match is None else match.groups()
except Exception:
_, error, _ = sys.exc_info()
warnings.warn('Error checking compiler version for {}: {}'.format(compiler, error))
return False
Q2: 修改pyTorch代码
有外国友人修改了部分代码,我没修改也没啥问题。你要是有啥疑难杂症也不妨试试。
第一个文件的位置改了一下,:{your evn path}\Lib\site-packages\torch\include\torch\csrc\jit\runtime\argumenta_spec.h
Q3: 安装出现编译器错误
call一下本地的vs就好了(注意路径,如果不是默认安装可能在你的安装路径下)~~
call “C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat”
Q4: DISTUTILS_USE_SDK设置错误
具体的错误没有截图了,反正就是就是告诉你没设置DISTUTILS_USE_SDK
,让你设置。直接在cmd
里面设置就行。set DISTUTILS_USE_SDK=1
Q5: CalledProcessError: Command ‘[‘ninja’, ‘-v’]’ returned non-zero exit status 1
千万不要修改成[ninja --v] 或者 [ninja -version]!!!
直接往上翻错误提示信息,在第一个failed的地方就会有新发现。
第一个Failed是编译到[6/11]的时候,deform_conv_cuda_kernel.obj
出不来,下面说的是error: identifier "__floorf" is undefined in device code
第二个Failed也差不多,说"__ceilf"
未定义啥的。
找到ROIAlignRotated_cuda.cu
和deform_conv_cuda_kernel.cu
文件,把里面的ceil
和floor
后面都加上f
就完事,即ceil
改为ceilf
、floor
改为floorf
。
[参考链接]
https://www.pythonf.cn/read/123901
https://blog.csdn.net/qq114480/article/details/116058168
https://zhuanlan.zhihu.com/p/363295722
https://blog.csdn.net/nefetaria/article/details/105728008
https://blog.csdn.net/tanmx219/article/details/100829920