如何在colab上使用mmdetection训练自己的数据集

如何在colab上使用mmdetection训练自己的数据集

这次受新冠肺炎疫情的影响,开学延期,但是导师要求在mmdetection平台上训练一个特殊的数据集,由于不在实验室缺乏相关的机器设备支撑实验(我自己只有一台gtx860的笔记本)所以考虑使用google免费的colab进行实验,之前没有使用过colab,所以记录一下全部过程。

一、Colab的使用

1. 访问google
首先,使用谷歌的colab需要学会*,这里就不介绍了。

2. 使用GPU
在第一次使用colab时,登录你的google云盘,然后新建Colaboratory
如何在colab上使用mmdetection训练自己的数据集
新建完之后,我们会来到一个类似于jupyter notebook的界面,这里就是我们编辑代码的地方,接下来我们要选择是否使用GPU加速训练。选择代码执行程序>更改运行时类型>硬件加速器(我们一般选择GPU)
如何在colab上使用mmdetection训练自己的数据集如何在colab上使用mmdetection训练自己的数据集

二. 进行mmdetection的配置

  1. 挂载google云盘
    这一步很重要,Colab的运行原理实际上就是给你分配一台远程的带GPU的主机,所以它的原始路径不是你的谷歌云盘(也 就是你的代码文件)所在的路径。所以第一步我们先要把谷歌云盘挂载带到那台远程主机上:

    from google.colab import drive
    drive.mount('/content/gdrive')
    

    接着输入验证码完成挂载。

  2. 配置mmdetection
    (1)完成挂载后,我们将mmdetection的代码上传到google云盘的'/content/gdrive/My Drive/'目录下。
    (2)在代码根目录下新建data文件夹,或者依据自身情况建立软链接。

    	进入data文件夹,创建文件夹:
    	
    	annotations
    	
    	pretrained
    	
    	results
    	
    	submit
    
    	将我们的训练和测试数据解压到data目录中,产生:
    	
    	train
    	
    	test-A-image
    

    (3)cd 到mmdetection代码目录进行环境配置,主要是安装依赖和cuda的编译等。

    !pip install mmcv
    
    !pip install cython && pip --no-cache-dir install -r requirements.txt
    
    !python setup.py develop
    
  3. label文件格式转换
    由于我们自己的数据集的标签格式是.xml的数据格式,我们习惯在mmdetection上使用COCO的格式进行训练,所以我们进行标签格式的转换。使用 tools/data_process/xml2coco.py 将label文件转换为COCO格式,新的label文件 train.json 会保存在 data/train/annotations目录下。

    !python tools/data_process/xml2coco.py
    

    为了方便利用mmd多进程测试(速度较快),我们对test数据也生成一个伪标签文件,运行tools/data_process/generate_test_json.py 生成 testA.json, 伪标签文件会保存在data/train/annotations目录下。

    !python tools/data_process/generate_test_json.py
    
  4. 使用自己的数据集训练
    我们按照官方文档里面的要求继承一个新的类(以我们的underwater数据集为例)
    mmdet/datasets/underwater.py

    from .custom import CustomDataset
    from .registry import DATASETS
    
    
    @DATASETS.register_module
    class Underwater(CustomDataset):
    

    mmdet/datasets/__init__.py中:

    from .underwater import Underwater
    

    并在所有的数据类别中添加你的数据集类别Underwater:

    __all__ = [
        'CustomDataset', 'XMLDataset', 'CocoDataset', 'VOCDataset',
        'CityscapesDataset', 'GroupSampler', 'DistributedGroupSampler',
        'build_dataloader', 'ConcatDataset', 'RepeatDataset', 'WIDERFaceDataset',
        'DATASETS', 'build_dataset', 'Underwater'
    ]
    
  5. 下载预训练权重(以casacde-rcnn-r50-fpn-1x为例)
    下载mmdetection官方开源的casacde-rcnn-r50-fpn-1x的COCO预训练模型 cascade_rcnn_r50_fpn_20e_20181123-db483a09.pth并放置于 data/pretrained 目录下。自此所有的准备工作全部完成。

  6. 训练

    chmod +x tools/dist_train.sh
    
    ./tools/dist_train.sh configs/underwater/cas_r50/cascade_rcnn_r50_fpn_1x.py 1
    

    运行以上指令就开始训练了
    如何在colab上使用mmdetection训练自己的数据集
    最后,总结一下。colab为那些对深度学习感兴趣的朋友提供了免费的平台,还是相当给力的。但是,colab会一段时间断一下,如果你的数据集训练时间很长的话建议开启resume,果然天下没有免费的午餐呐!
    如果你是刚入门的深度学习小白并且缺少设备的话推荐你去尝试下这款免费的云端服务器,希望这篇文章可以为你提供帮助。

上一篇:mmdetection配置


下一篇:MMDetection 快速开始,训练自定义数据集