CenterNet训练自己的数据集

重点!

首先说一下具体的代码能运行成功所需要的条件:
cuda9.0
与cuda9.0相匹配的cudnn
pytorch0.4.0版本

然后就是自己遇到的一系列问题了:
Q1
首先我是想在自己原来的cuda10.0和cudnn下运行的,但是出现了很多问题,尤其是在编译DCNv2的时候,于是我参考了这篇博客,发现问题并没有解决,主要问题是想要和cuda10.0匹配,那么pytorch就不能是0.4.1版本的,就一定会高于这个版本,那么出现的ImportError: torch.utils.ffi is deprecated. Please use cpp extensions instead.问题和TypeError: dist must be a Distribution instance问题就不可避免,想要解决就只能自己重写DCNv2的代码,所以我放弃了。
选择重新安装cuda9.0

前提:

自己的电脑是2080Ti的,已经有的环境是cuda10.0+与cuda10.0匹配的cudnn7.6.5
由于代码在cuda10.0下会出现很多错误,所以我先把cuda10.0换成了cuda9.0。详细请参考另一篇博客:安装另一个版本cuda和cudnn

搭建环境

cuda和cudnn已经安装好了,开始利用Anaconda搭建一个新的环境,来运行CenterNet网络。

  1. 创建虚拟conda 环境
    conda create --name CenterNet python=3.6
  2. 激活环境
    conda activate CenterNet
    以后运行CenterNet都要在这个环境中运行,关闭终端,再开启新的终端的时候,一定记得切换环境,否则肯定会有问题的。如果使用pycharm,也要记得加载新的环境。
    pycharm加载新的环境方法:Files——settings——Project: CenterNet-master——Project Interpreter——点击Project Interpreter后面的设置符号,出现两个选项,选择Add那一项——选择conda Environment——Existing environment——选择自己刚才新建的环境CenterNet。
  3. 安装pytorch0.4.1版本:
    pip install torch==0.4.1
  4. 安装 torchvision
    pip install torchvision==0.2.2

一定一定!!!记住就是打开终端的时候记得切换环境!后面的很多操作,我没有强调切换环境,但是只要你是重新开启了新的终端就一定要切换环境!切换到CenterNet。

这样暂时算环境搭建完毕,现在想试试demo能不能跑起来。

测试demo

  1. 安装cocoapi
    自己去下载一个cocoapi,github上有很多:参考
    下载完,放在CenterNet目录下就可以了,然后进入到目录./cocoapi/PythonAPI 运行 make
    然后在运行:python setup.py install --user
  2. 安装需要用到的依赖库:
    来到CenterNet的目录下,打开终端执行pip install -r requirements.txt下载需要用到的依赖库。
  3. 编译 Compile deformable convolutional (from DCNv2).
    进入到指定路径CenterNet_ROOT/src/lib/models/networks/DCNv2下,运行make.sh文件即可。
  4. 编译一下NMS,来到external文件下,打开终端,环境切换到CenterNet下,编译一下,make
  5. 下载预训练的模型放置到models文件夹下,这里下载的是目标检测,选了一个最高分的。在这个网址中下载一个训练好的模型,我下载了第一个model。下载完了,放在models下。
  6. 然后开始可以测试demo,来到src文件下,打开终端,输入:
    python demo.py ctdet --demo /home/dlut/网络/CenterNet-master/images/ --load_model /home/dlut/网络/CenterNet-master/models/ctdet_coco_dla_2x.pth
    注意这个路径要改成自己的绝对路径。就可以看到测试的结果了。

我在运行的时候遇到了问题:RuntimeError: cuda runtime error (11) : invalid argument at /pytorch/aten/src/THC/THCGeneral.cpp:663
解决办法是:在demo.py中加了:
import torch
torch.backends.cudnn.enabled = False #加上这两句就可以跑通代码

准备自己的数据集

一般,我们自己的数据集都是VOC格式的,这个需要转换成coco格式的数据集,参考另一篇博客

  1. 当我们生成三个json文件(train.json;val.json;test.json)之后,来到CenterNet-master这个工程里,在data文件夹下新建一个文件夹,名字就是你数据集的名字。
    在这里插入图片描述
  2. 再在这个文件夹里面建两个文件夹(annotations里面存放的是我们之前生成的那三个json文件;images存放的是所有的图片,包括训练测试验证三个,所有的):在这里插入图片描述
  3. 在src/lib/datasets/dataset里面新建一个“insulatorBolt.py”,文件内容照着文件夹下coco.py改成自己的。
    (1)将COCO类改成自己的名字
    class InsulatorBolt(data.Dataset):
    (2)第14行num_classes=80改成自己的类别数,我的是四类,所以改为了num_classes=4
    (3)第15行default_resolution(这个参数有两种(300,300)或者(512,512),很明显512的参数计算量大,300计算量小,我用的是512),所以为:default_resolution = [512, 512]
    (4)接下来的mean和std改成自己图片数据集的均值和方差,脚本链接: Python计算图片数据集的均值方差
    通过计算,我的均值和方差改为了:
mean = np.array([1.816706, 1.856168, 1.751525],
                  dtype=np.float32).reshape(1, 1, 
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值