解决DCNv2在Linux上安装失败的问题

Posted Xavier Jiezou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决DCNv2在Linux上安装失败的问题相关的知识,希望对你有一定的参考价值。

项目场景

今天同学安装 DCN(Deformable Convolutional Networks,可变形卷积网络)v2的 PyTorch 版本时遇到了很多问题,弄了将近一天也没解决。于是求助笔者帮忙解决,这里记录一下成功的解决方案。

问题描述

笔者首先在 GitHub 上搜了一下 DCNv2,得到了如下 3 个 star 比较高的结果:

尝试了一下克隆仓库并安装,但也是报各种错误,但大部分原因都是 PyTorch 版本太高,高版本中删除了很多 C++ 写的头文件,导致编译错误。

解决方案

Issue 中发现了这样的一条评论:

按照上图中的解决方案成功解决:

conda create -n dcnv2 python=3.7
conda activate dcnv2
conda install pytorch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0 cudatoolkit=11.0 -c pytorch
git clone https://github.com/MatthewHowe/DCNv2.git
cd DCNv2
./make.sh

安装过程中的提示信息如下:(忽略警告)

running build
running build_py
running build_ext
building '_ext' extension
Emitting ninja build file /home/zxc/DCNv2-master/build/temp.linux-x86_64-3.7/build.ninja...
Compiling objects...
Allowing ninja to set a default number of workers... (overridable by setting the environment variable MAX_JOBS=N)
...
g++ -pthread -B /home/zxc/.conda/envs/dcn/compiler_compat -Wl,--sysroot=/ -pthread -shared -B /home/zxc/.conda/envs/dcn/compiler_compat -L/home/zxc/.conda/envs/dcn/lib -Wl,-rpath=/home/zxc/.conda/envs/dcn/lib -Wl,--no-as-needed -Wl,--sysroot=/ /home/zxc/DCNv2-master/build/temp.linux-x86_64-3.7/home/zxc/DCNv2-master/DCN/src/cpu/dcn_v2_cpu.o /home/zxc/DCNv2-master/build/temp.linux-x86_64-3.7/home/zxc/DCNv2-master/DCN/src/cpu/dcn_v2_im2col_cpu.o /home/zxc/DCNv2-master/build/temp.linux-x86_64-3.7/home/zxc/DCNv2-master/DCN/src/cpu/dcn_v2_psroi_pooling_cpu.o /home/zxc/DCNv2-master/build/temp.linux-x86_64-3.7/home/zxc/DCNv2-master/DCN/src/cuda/dcn_v2_cuda.o /home/zxc/DCNv2-master/build/temp.linux-x86_64-3.7/home/zxc/DCNv2-master/DCN/src/cuda/dcn_v2_im2col_cuda.o /home/zxc/DCNv2-master/build/temp.linux-x86_64-3.7/home/zxc/DCNv2-master/DCN/src/cuda/dcn_v2_psroi_pooling_cuda.o /home/zxc/DCNv2-master/build/temp.linux-x86_64-3.7/home/zxc/DCNv2-master/DCN/src/vision.o -L/home/zxc/.conda/envs/dcn/lib/python3.7/site-packages/torch/lib -L/usr/local/cuda/lib64 -lc10 -ltorch -ltorch_cpu -ltorch_python -lcudart -lc10_cuda -ltorch_cuda -o build/lib.linux-x86_64-3.7/_ext.cpython-37m-x86_64-linux-gnu.so
copying build/lib.linux-x86_64-3.7/_ext.cpython-37m-x86_64-linux-gnu.so -> 
Creating /home/zxc/.conda/envs/dcn/lib/python3.7/site-packages/DCNv2.egg-link (link to .)
DCNv2 0.1 is already the active version in easy-install.pth

Installed /home/zxc/DCNv2
Processing dependencies for DCNv2==0.1
Finished processing dependencies for DCNv2==0.1

运行脚本校验安装是否可用:(忽略警告)

$ python DCN/testcpu.py # 测试cpu
torch.Size([2, 64, 128, 128])
torch.Size([20, 32, 7, 7])
torch.Size([20, 32, 7, 7])
torch.Size([20, 32, 7, 7])
0.971507, 1.943014
0.971507, 1.943014
Zero offset passed
check_gradient_dpooling: True
$ python DCN/testcuda.py # 测试gpu
torch.Size([2, 64, 128, 128])
torch.Size([20, 32, 7, 7])
torch.Size([20, 32, 7, 7])
torch.Size([20, 32, 7, 7])
0.971507, 1.943014
0.971507, 1.943014
Zero offset passed
check_gradient_dpooling: True

以上是关于解决DCNv2在Linux上安装失败的问题的主要内容,如果未能解决你的问题,请参考以下文章

Arch Linux中通过AUR安装Redis Desktop Manager失败

Linux或者Windows上安装lxml失败解决方法

Linux安装unixODBC,解决libodbc.so.2缺失问题

在 Linux 上安装 MySQLdb 失败

安装Windows 和linux双系统失败导致Windows无法引导的解决方法

Linux.Centos安装scp反复失败的解决方式