【目标检测】Ubuntu16.04+RTX2070+CUDA10.0+pytorch1.1搭建CenterNet环境

一、前言

CenterNet有两个,本文的CenterNet对应的论文是:Objects as Points
对应Github地址:xingyizhou/CenterNet

Win10版本点击这里:【目标检测】Win10+CUDA10.0+CUDNN7.5搭建CenterNet环境

下面这两篇博客也对我帮助很大:
在SeaShips数据集上训练CenterNet网络
(绝对详细)CenterNet训练自己的数据(pytorch0.4.1)

本电脑环境为:

Ubuntu 16.04
GPU RTX2070 Advanced OC 8G
GPU驱动 418.87.00
gcc version 5.4.0
CUDA 10.0.130
CUDNN 7.6.0
python 3.6.9
pytorch 1.1.0
torchvision 0.3.0

二、关于CUDA版本

此时运行可视化代码和测试代码都是没有问题的:
可视化:

python demo.py ctdet --demo /home/vincent/Code/CenterNet/images/ --load_model /home/vincent/Code/CenterNet/models/ctdet_coco_dla_2x.pth

测试:

python test.py ctdet --exp_id coco_dla --keep_res --load_model ../models/ctdet_coco_dla_2x.pth

但是当我运行训练代码的时候就会报错:
训练:

python main.py ctdet --exp_id coco_dla --batch_size 5  --lr 1.25e-4 --gpus 0 --num_workers 0

报错内容的最后一行:
RuntimeError: cuda runtime error (11) : invalid argument at /opt/conda/conda-bld/pytorch_1535491974311/work/aten/src/THC/THCGeneral.cpp:663
完整报错内容点击这里
但是找了很久也没发现是什么原因,最后跟着Error for run demo.py #356换了个CUDA版本然后就可以了,所以目前用的是CUDA10.0

三、环境安装

1. 安装CUDA和CUDNN
1.1 下载

CUDA下载网址:CUDA Toolkit 10.0 Archive
两个文件都需要下载下来
在这里插入图片描述
CUDANN下载网址:cuDNN Archive
选择Download cuDNN v7.6.0 (May 20, 2019), for CUDA 10.0,下载cuDNN Library for Linux
在这里插入图片描述

1.2 安装CUDA

终端进入到CUDA文件地址:
首先安装基础包:

sudo sh cuda_10.0.130_410.48_linux.run

在安装过程中,会出现几个是否选装和安装位置的选项,其中第二个不需要安装NVIDIA驱动(系统已安装),其余都选择yes或者敲回车。
然后安装更新包:

sudo sh cuda_10.0.130.1_linux.run

验证CUDA是否安装成功
在终端下运行nvcc -V,正常情况下会显示:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:01_CDT_2018
Cuda compilation tools, release 10.0, V10.0.130
1.3 安装CUDNN

终端进入到CUDNN文件地址:

tar xvf cudnn-10.0-linux-x64-v7.6.0.64.tgz 
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/ 
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

验证CUDNN是否安装成功
在终端下运行

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

正常情况下会显示:

#define CUDNN_MAJOR 7
#define CUDNN_MINOR 6
#define CUDNN_PATCHLEVEL 0
2. 下载源码
git clone https://github.com/xingyizhou/CenterNet.git
3. 用Conda建立虚拟环境
conda create --name CenterNet python=3.6

选择yes然后等待安装完基础文件,安装完毕后切换为CenterNet虚拟环境

conda activate CenterNet
4. 安装其他python库
4.1 安装requirements.txt
cd CenterNet
pip install -r requirements.txt

如果下载速度太慢的话,可以在命令末尾加上-i 国内下载源地址,例如:

pip install -r requirements.txt -i https://pypi.douban.com/simple/

(1)阿里云:http://mirrors.aliyun.com/pypi/simple/
(2)豆瓣:https://pypi.douban.com/simple/
(3)清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/
(4)中国科学技术大学:https://pypi.mirrors.ustc.edu.cn/simple/

还要安装其他包

pip install pillow -i https://pypi.douban.com/simple/
4.2 安装pyrtoch和torchvision

法一:命令行安装

conda install pytorch=1.1 torchvision

如果用命令行的方式安装顺利的话,pytorch为1.1.0,torchvision为0.3.0。

如果速度很慢的话,可以将conda源换为国内源,步骤如下:

sudo gedit ~/.condarc

然后将内容替换下列内容,并保存。

channels:
  - https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
  - https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  - defaults
show_channel_urls: true

然后重新运行conda下载指令即可

法二:whl安装
如果显示下载失败或者下载速度慢到令人发指的话,采用whl手动安装的方式:whl下载地址
搜索并下载torch-1.1.0-cp36-cp36m-linux_x86_64.whltorchvision-0.3.0-cp36-cp36m-linux_x86_64.whl
在这里插入图片描述在这里插入图片描述
终端进入到文件下载目录,然后:

pip install torch-1.1.0-cp36-cp36m-linux_x86_64.whl
pip install torchvision-0.3.0-cp36-cp36m-linux_x86_64.whl

验证是否安装成功:
安装完成后在终端输入conda list,查看是否有pyrtochtorchvision

验证是否pytorch是否能够使用CUDA和CUDNN
在pyhon中运行下列代码:

import torch
a = torch.tensor(1.)
print(a.cuda())
from torch.backends import cudnn
print(cudnn.is_available())
print(cudnn.is_acceptable(a.cuda()))

若正常,则应该返回:

tensor(1., device='cuda:0')
True
True
4.3 安装COCOAPI
git clone https://github.com/cocodataset/cocoapi.git
cd cocoapi/PythonAPI
make
python setup.py install --user
5. 编译

注意要换成你自己的文件地址!!

cd ~/Code/CenterNet/src/lib/external
python setup.py build_ext --inplace

没有报error即为成功

6. 安装DCNv2

注意要换成你自己的文件地址!!

cd ~/Code/CenterNet/src/lib/models/networks
rm -r DCNv2
git clone https://github.com/CharlesShang/DCNv2.git
cd DCNv2
python setup.py build develop

会出现一大堆东西,但是只要不报error就可以,正常情况下会显示

Processing dependencies for DCNv2==0.1
Finished processing dependencies for DCNv2==0.1

如果报类似import _ext as _backend的错,并且说的是undefined symbol: _ZN3c105ErrorC1ENS_14SourceLocationERKSs,大概率是你用的python3.7,换成python3.6就好

Fix size testing.
training chunk_sizes: [4]
The output will be saved to  /home/vincent/Code/CenterNet-cuda10-multi-spectral/src/lib/../../exp/ctdet/default/rgb
################## Dataset about rgb ##################
Traceback (most recent call last):
  File "main.py", line 12, in <module>
    from models.model import create_model, load_model, save_model
  File "/home/vincent/Code/CenterNet-cuda10-multi-spectral/src/lib/models/model.py", line 12, in <module>
    from .networks.pose_dla_dcn import get_pose_net as get_dla_dcn
  File "/home/vincent/Code/CenterNet-cuda10-multi-spectral/src/lib/models/networks/pose_dla_dcn.py", line 16, in <module>
    from .DCNv2.dcn_v2 import DCN
  File "/home/vincent/Code/CenterNet-cuda10-multi-spectral/src/lib/models/networks/DCNv2/dcn_v2.py", line 13, in <module>
    import _ext as _backend
ImportError: /home/vincent/Code/CenterNet-cuda10-multi-spectral/src/lib/models/networks/DCNv2/_ext.cpython-37m-x86_64-linux-gnu.so: undefined symbol: _ZN3c105ErrorC1ENS_14SourceLocationERKSs

7. 下载别人训练好的模型

链接:https://pan.baidu.com/s/1QOmIwy8lXJBuLv5hH5j3ag
提取码:vwk4
(以上文件来源为(绝对详细)CenterNet训练自己的数据(pytorch0.4.1)
更多官方训练好的模型在此

下载完毕后,将ctdet_coco_dla_2x放到models文件夹下。
完成这一步后,就可以运行可视化代码了,终端进入到src文件夹并运行:

python demo.py ctdet --demo /home/vincent/Code/CenterNet/images/ --load_model /home/vincent/Code/CenterNet/models/ctdet_coco_dla_2x.pth

注意文件的地址要改成你自己的地址!
正常的话弹出一个图片框,按下任意键会切换到下一张图片,按Esc会退出。
(如果你直接用鼠标点左上角交叉关闭的话,程序是依然会运行的,不会真正的停下来)
在这里插入图片描述

8. 下载数据集

官方提供的数据准备流程在此:Dataset preparation
因为我只需要弄2D的目标检测,所以只需要下载COCO数据集。

  1. 下载图片数据集:2017 Train、2017 Val、2017 Test
  2. 下载注释文件:2017 train/val and test image info
  3. 将文件放至下列形式
${CenterNet_ROOT}
|-- data
`-- |-- coco
    `-- |-- annotations
        |   |-- instances_train2017.json
        |   |-- instances_val2017.json
        |   |-- person_keypoints_train2017.json
        |   |-- person_keypoints_val2017.json
        |   |-- image_info_test-dev2017.json
        | 
        |---|-- train2017
        |---|-- val2017
        `---|-- test2017
9. 训练代码

进入src文件夹,运行训练代码:

python main.py ctdet --exp_id coco_dla --batch_size 5  --lr 1.25e-4 --gpus 0 --num_workers 0

这时候会下载一个文件dla34-ba72cf86.pth,但是速度会很慢,我们ctrl+c终止他,采用自己手动下载的方式。

9.1 找到文件放置目录

在报错信息中你可以看到这个文件会下载到那里,把这个地址记住即可,例如我的文件放置地址是/home/vincent/.torch/models/
(你也可以在终端输入locate .torch,就会显示这个文件夹在哪)

9.2 下载刚才没有下载成功的文件

链接:https://pan.baidu.com/s/1I1oW_l2Xe2-LV1gIjViPTg
提取码:2pt0
(以上文件来源为(绝对详细)CenterNet训练自己的数据(pytorch0.4.1)

下载完后,将他放到步骤9.1的目录下。

此时,再次运行训练代码,正常的话将会显示:
在这里插入图片描述

10. 测试代码

进入src文件夹,运行测试代码:

python test.py ctdet --exp_id coco_dla --keep_res --load_model ../models/ctdet_coco_dla_2x.pth

这时会去计算mAP,正常情况下会显示:
在这里插入图片描述

11. 备注
  1. 以上命令行在调用的时候记得改成你自己的地址;
  2. 如果重开了终端的话,记得要conda activate CenterNet进入虚拟环境;
  3. 训练代码中的--num_workers 0参数如果不加的话,一般会报错EOFError: Ran out of input。
    如果加上之后依然报错的话(val的时候可能会错),修改main.py第48行num_workers=1,改为num_workers=0
  4. 如果在安装过程中发现系统缺少某些软件(例如提示没有gcc,导致编译失败),则百度相关教程安装即可。

至此,Ubuntu16.04+RTX2070+CUDA10+pytorch1.1下CenterNet环境搭建完毕。

猜你喜欢

转载自blog.csdn.net/weixin_38705903/article/details/102598339
今日推荐