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
此时运行可视化代码和测试代码都是没有问题的:
可视化:
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
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
终端进入到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
终端进入到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
git clone https://github.com/xingyizhou/CenterNet.git
conda create --name CenterNet python=3.6
选择yes然后等待安装完基础文件,安装完毕后切换为CenterNet虚拟环境
conda activate CenterNet
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/
法一:命令行安装
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.whl
和torchvision-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
,查看是否有pyrtoch
和torchvision
验证是否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
git clone https://github.com/cocodataset/cocoapi.git
cd cocoapi/PythonAPI
make
python setup.py install --user
注意要换成你自己的文件地址!!
cd ~/Code/CenterNet/src/lib/external
python setup.py build_ext --inplace
没有报error即为成功
注意要换成你自己的文件地址!!
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
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
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
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
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
链接: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
会退出。
(如果你直接用鼠标点左上角交叉关闭的话,程序是依然会运行的,不会真正的停下来)
官方提供的数据准备流程在此:Dataset preparation
因为我只需要弄2D的目标检测,所以只需要下载COCO数据集。
${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
进入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
终止他,采用自己手动下载的方式。
在报错信息中你可以看到这个文件会下载到那里,把这个地址记住即可,例如我的文件放置地址是/home/vincent/.torch/models/
(你也可以在终端输入locate .torch
,就会显示这个文件夹在哪)
链接:https://pan.baidu.com/s/1I1oW_l2Xe2-LV1gIjViPTg
提取码:2pt0
(以上文件来源为(绝对详细)CenterNet训练自己的数据(pytorch0.4.1))
下载完后,将他放到步骤9.1的目录下。
进入src
文件夹,运行测试代码:
python test.py ctdet --exp_id coco_dla --keep_res --load_model ../models/ctdet_coco_dla_2x.pth
这时会去计算mAP,正常情况下会显示:
conda activate CenterNet
进入虚拟环境;--num_workers 0
参数如果不加的话,一般会报错EOFError: Ran out of input。main.py
第48行num_workers=1
,改为num_workers=0
;至此,Ubuntu16.04+RTX2070+CUDA10+pytorch1.1下CenterNet环境搭建完毕。