mmdetection的安装并训练自己的VOC数据集

mmdetection的安装与VOC数据集的训练

目前网络上有很多mmdetection的安装方法和训练VOC的方法,大多使用conda安装,但最近清华源被禁用以及mmdetection跟新之后,很多博客的方法不适用了,本人也踩了很多坑终于训练成功,希望本篇博客能给大家一些帮助。

一. mmdetection的安装

1.使用conda创建虚拟环境

// 创建名为mmdetection的虚拟环境
conda create -n mmdetection python=3.7
// 进入虚拟环境
conda activate mmdetection

2.安装Cython

conda install cython

3.安装mmcv

本人首先采用官网的方式pip安装mmcv,但是在运行mmdetection时,报了一个调用mmcv里面一个函数的错误,卸载重装都没用。故采用其他方法安装
git clone https://github.com/open-mmlab/mmcv.git
cd mmcv
pip install .

4.安装pytorch

因为清华源被禁用,所以首先采用默认源进行下载

// 移除清华源,恢复默认源
conda config --remove-key channels
// 下载pytorch1.1.0版本,本人使用的是cuda9.0
conda install pytorch=1.1.0 cuda90 //官网给出后面还要加上 -c pytorch,因为使用默认源,所以不用加

5.安装mmdetection

git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
python3 setup.py develop

二. 使用mmdetection训练自己的VOC数据集

1. 目录结构

mmdetection
├── mmdet
├── tools
├── configs
├── data #手动创建data、VOCdevkit、VOC2007、Annotations、JPEGImages、ImageSets、Main这些文件夹
│   ├── VOCdevkit
│   │   ├── VOC2007
│   │   │   ├── Annotations #把test.txt、trainval.txt对应的xml文件放在这
│   │   │   ├── JPEGImages #把test.txt、trainval.txt对应的图片放在这
│   │   │   ├── ImageSets
│   │   │   │   ├── Main
│   │   │   │   │   ├── test.txt 
│   │   │   │   │   ├── trainval.txt

2. 修改class_names.py文件

修改mmdetection/mmdet/core/evaluation下的class_names.py中的voc_classes,将 其改为要训练的数据集的类别名称。如果不改的话,最后测试的结果的名称还会是’aeroplane’, ‘bicycle’, ‘bird’, ‘boat’,…这些。改完后如图:
图中的label名称改成自己的

3. 修改voc.py文件

修改mmdetection/mmdet/datasets/voc.py 下的类别,如果只有一个类,要加上一个逗号,否则将会报错,如图:
在这里插入图片描述

4. 修改配置文件

这里的配置文件指的是mmdetection/configs下一堆的名称诸如cascade_rcnn_r50_fpn_1x.py的文件,也就是你要训练的网络,不过mmdetecion已经把模型搭好,直接调用就好。默认情况下,这些配置文件的使用的是coco格式,只有mmdetection/pascal_voc文件夹下的模型是使用voc格式,不过数量很少,只有三个。

如果要使用其他模型,则需要修改配置文件,这里以cascade_rcnn_r50_fpn_1x.py为例

cascade_rcnn_r50_fpn_1x.py的位置在mmdetection/configs/cascade_rcnn_r50_fpn_1x.py

4.1 修改cascade_rcnn_r50_fpn_1x.py里的num_classes变量

首先,全局搜索num_classes,将其值改为: 类别数+1(我有38类,因此改为39)。把搜索到的num_classes全改掉,cascade_rcnn_r50_fpn_1x.py改了三次。如图:
在这里插入图片描述

4.2 修改cascade_rcnn_r50_fpn_1x.py里的data settings

接着修改cascade_rcnn_r50_fpn_1x.py中的dataset settings,全局搜索dataset settings就能找到在哪。修改后如图:
在这里插入图片描述
在这里插入图片描述

4.3 修改mmdet/datasets/loader/build_loader.py文件

正常来说经过4.2步骤后就可以进行训练了,但本人在运行train.py时,遇到如下错误:
在这里插入图片描述
通过debug找到了问题所在,build_loader.py中的batch_size变量赋值为0,所以本人直接手动给batch_size赋值为2,问题解决。由于还没有细致的解读源码,不知这样更改是否合适,如有错误,还请不瑟吝教。
在这里插入图片描述

5. 训练

进入mmdetection所在文件夹,输入:

python3 tools/train.py configs/cascade_rcnn_r50_fpn_1x.py

不出意外的话,你的终端就已经开始输出训练过程了。

每迭代完一个epoch,会保存一次模型参数(后缀为.pth),位于mmdetection/work_dirs/cascade_rcnn_r50_fpn_1x/。其中work_dirs为自动生成不需要手动创建。

6. 测试

由于本人的工作原因,并没有跑完模型,所以没有测试。如需测试模型,请转到此篇文章https://zhuanlan.zhihu.com/p/70545482

  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值