PyTorch1.8跑通CenterNet

文章目录

拜读了Objects as Points这篇论文,也想应用在自己的项目中。
论文地址:https://arxiv.org/abs/1904.07850
官方代码:https://github.com/xingyizhou/CenterNet

因为文章发表于2019年,当时原作者使用的PyTorch版本还是0.4.1,也就导致了现在用上了PyTorch1.x版本的朋友再编译和使用的时候有会踩到一些坑。主要问题出在src/lib/models/networks/DCNv2中文件的编译问题上。

还好github都能找到能兼容PyTorch1.x版本的DCNv2,当然安装步骤也会需要有些许变化。本文整理一下踩到的坑和解决办法,最终成功地在PyTorch1.8跑通了CenterNet

环境

Anaconda创建一个虚拟环境,并activate进入到该环境中。

  • python == 3.7.12
  • pytorch == 1.8.0
  • cudatoolkit == 11.4.2
  • ubuntu == 18.04
  • CUDA == 11.4

安装

官方的安装参考:https://github.com/xingyizhou/CenterNet/blob/master/readme/INSTALL.md
首先Clone一下CenterNet的官方代码到本地。

CenterNet_ROOT=/path/to/clone/CenterNet
git clone https://github.com/xingyizhou/CenterNet $CenterNet_ROOT

先安装一下requirements

pip install -r requirements.txt

然后下面的步骤就要再官方的基础上做修改了,因为按照官方的对DCNv2进行修改,那就要遇上第一个报错:

ImportError: torch.utils.ffi is deprecated. Please use cpp extensions instead.

报错原因就是PyTorch目前已经没有torch.utils.ffi函数了。
网上的方法很多是退回将PyTorch退回0.4.1,然后进行编译。然而,1.x的版本在将很多好用的模块直接引入torch或torchvision中,后续使用如果需要对网路进行一定的优化和修改,保留1.x版本还是更方便。

直接在仓库的issue中搜索,能找到这个解决方案:https://github.com/xingyizhou/CenterNet/issues/7

这个方案的环境是PyTorch1.1+CUDA10.1+Win10.

方案中首先编译了nms

cd CenterNet\src\lib\external
#python setup.py install
python setup.py build_ext --inplace

这一步在我这里成功完成。

遇到的deprecated问题,回答中是建议将原repo中的DCNv2替换成https://github.com/CharlesShang/DCNv2

cd CenterNet\src\lib\models\networks
rm -rf DCNv2
git clone https://github.com/CharlesShang/DCNv2
cd DCNv2

./make.sh

这时候出现了新的报错:

RuntimeError: Error compiling objects for extension

在CharlesShang的repo里搜issue,里面提到PyTorch1.1应该是可以正常编译的,但高于1.1版本就会遇到这个错误。同事,里面指路用一个更新版本的DCNv2,https://github.com/jinfagang/DCNv2_latest

cd CenterNet/src/lib/models/networks
rm -rf DCNv2
git clone https://github.com/jinfagang/DCNv2_latest
cd DCNv2_latest DCNv2

./make.sh

前一个错误消失了。报了新的错误,更奇怪了

ImportError: No module named torch

这就非常奇怪了,coda list环境里一切都是正常的,进入python再import torch也没有任何问题。

检查了一下make.sh

#!/usr/bin/env bash

sudo rm *.so
sudo rm -r build/
sudo python3 setup.py build develop

看完这个我明白了,sudo的使用使得编译使使用的不是Anaconda虚拟环境中的python,而是用了系统的python

#!/usr/bin/env bash

sudo rm *.so
sudo rm -r build/
python3 setup.py build develop

重新运行./make.sh,这次编译成功了。
运行一下

cd CenterNet/src/lib/models/networks/DCNv2
python testcpu.py
python testcuda.py

如果有正常的输出,那说明已经安装成功了,现在可以用CenterNet了。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值