mmdetection 商汤开源库 FasterRCNN 训练自己的数据集 VOC2007, 結果可視化 2019

目前為止玩过了兩個目标检测库

一個是陈云大神的simple-faster-rcnn
一个就是商汤科技的mmdetection

这篇主要讲一下商汤的 mmdetection 如何训练自己的数据集

个人认为必须要养成看官方文档的习惯, 而且要做笔记, 尤其开始学习一个新的库的时候

主要的步骤将分为

  1. 安装库
  2. 配置数据集
  3. 调整网络参数进行训练
  4. 结果可视化

数据集格式: VOC2007来举例



第一步 安装mmdetection

注意一下, 官方是基于conda环境下创建虚拟环境来做的
我们就完全照着官方做法, 虚拟环境的好处就是可以依照需求在不同的环境安装不同的库
这样不会打扰你原来的项目

  1. 终端键入创造虚拟环境
    conda create -n open-mmlab python=3.7 -y

这边照着键入就可以了, python版本依照自己环境改一下
意思是说create 一个 名叫 open-mmlab的虚拟环境

  1. 创建好之后, 键入 conda activate open-mmlab就能进入环境
    如果conda版本比较老, 可能要用source activate open-mmlab

  2. 为这个虚拟环境装一下pytorch及torchvision
    conda install pytorch torchvision -c pytorch

  3. 都安装完成之后
    git clone https://github.com/open-mmlab/mmdetection.git cd mmdetection 安装主程序

  4. 键入cd mmdetection到主目录下, 键入python setup.py develop
    其他的依赖包会开始安装, 要是没装成, 就看缺什么在装什么就行了·

第二步 安装mmdetection

配置好环境之后, 开始将自己的数据集放到指定的目录下
具体路径依照下面的格式, 也是官方给的

mmdetection
├── mmdet
├── tools
├── configs
├── data
│   ├── coco
│   │   ├── annotations
│   │   ├── train2017
│   │   ├── val2017
│   │   ├── test2017
│   ├── cityscapes
│   │   ├── annotations
│   │   ├── train
│   │   ├── val
│   ├── VOCdevkit
│   │   ├── VOC2007
│   │   ├── VOC2012

这边用VOC2007来说明

首先VOC 数据的格式大家应该都清楚, 再来复习一下

VOC2007 文件夹底下包含三个子目录
1. annotations 
	- xml档案(数量与JPEGImages一致)
2. ImageSets
	- Main
		- test.txt
		- train.txt
		- trainval.txt
		- val.txt
3. JPEGImages
	- 所有的图像(必须跟标注文件一样多)

整个数据集完整搬到mmdetection/data下, 这个data当初我安装的时候是没有的, 如果没有的话就自行mkdir data就行, 当然你也可以用软连接的方式, 但我自己的习惯是直接将数据搬到指定的路径, 省的有问题要查半天, 路径算是最好解决的问题

第三步 调整网络参数

  1. 首先移步到
    cd mmdetection/configs/

  2. configs下会有许多的网络结构,选择你要用来训练的结构并且开启
    例如我跑的是fast_mask_rcnn_r101_fpn_1x.py, 就直接开启

注意, 原始文件都是默认COCO, 所以如要修改成其他格式,主要以下几个路径修改

# dataset settings
dataset_type = 'VOCDataset'
data_root = 'data/VOCdevkit/'
#train
ann_file=data_root + 'VOC2007/ImageSets/Main/trainval.txt',
img_prefix=data_root + 'VOC2007/',

#val
ann_file=data_root + 'VOC2007/ImageSets/Main/val.txt',
img_prefix=data_root + 'VOC2007/',

#test
ann_file=data_root + 'VOC2007/ImageSets/Main/test.txt',
img_prefix=data_root + 'VOC2007/',

total_epoch = 12 #这可以修改迭代次数, 在最下方

还有要修正类别数量 , 记得只要有这个参数都要修改, 一个文件出现多少num_classes取决你用的网络

num_classes = 你的类别数 +1 (背景)



然后到 `mmdetection/mmdet/core/evaluation下的class_names.py中的voc_classes`这个文件
def voc_classes():
    return [
        #改成自己的类别就可以 建议注释掉原来的 额外创建新的
    ]

接着还没完, 最主要的类别需要到下面的文件进行修改
mmdetection/mmdet/datasets/voc.py

只要将原来的CLASSES注释掉, 添加自己类别里面的就可以了

from .registry import DATASETS
from .xml_style import XMLDataset
from .my_dataset import MyDataset

@DATASETS.register_module
class VOCDataset(XMLDataset):

    #CLASSES = ('aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car',
               #'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse',
               #'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train',
               #'tvmonitor')
	CLASSES = ('man', 'woman', 'child') 

    def __init__(self, **kwargs):
        super(VOCDataset, self).__init__(**kwargs)
        if 'VOC2007' in self.img_prefix:
            self.year = 2007
        elif 'VOC2012' in self.img_prefix:
            self.year = 2012
        else:
            raise ValueError('Cannot infer dataset year from img_prefix')

接下来只要进行训练就行
  1. 回到 /mmdetection 然后
    官方给与的命令行参数是这样 python tools/train.py ${CONFIG_FILE}
    所以我们键入
    python tools/train.py configs/faster_rcnn_r101_fpn_1x.py
    这是最基本的single GPU的训练, 预训练模型如果没有的话会自动开始下载的

默认的情况训练完之后会出现work_dir 文件夹里面装了训练的结果在mmdetection下
如果想要指定路径也可以
python tools/train.py configs/faster_rcnn_r101_fpn_1x.py --work_dir 路径

官方也提供多GPU的选择
./tools/dist_train.sh ${CONFIG_FILE} ${GPU_NUM} [optional arguments]`
主要可选择的参数有下面三者, 这里不多介绍

--validate (strongly recommended): Perform evaluation at every k (default value is 1, which can be modified like this) epochs during the training.
--work_dir ${WORK_DIR}: Override the working directory specified in the config file.
--resume_from ${CHECKPOINT_FILE}: Resume from a previous checkpoint file.

第四步 训练结果可视化

漫长的等待训练结果后
在mmdetection下会生成work_dir资料夹, 里面装着训练的结果以及训练好的模型
最新的模型默认就是latest.pth, 而你的训练log会有txt以及json两种档案

官方目前尚未提供一个好的可视化方案, 据说是pytorch 目前对tensorboardX支持上有bug

所以基本上要自己写才行
我网络上搜了很久没有可以直接使用的可视化方案,
所以我觉得自己写了一份专用的可视化程序, 只要读取json档案就能生成图标
大概是这像这样的效果

使用说明就不在阐述, 非常简单易用

mmdetection_visualize
如果觉得好用也可以帮我点个Star, 希望可以多帮大家解决问题一起进步!

有问题随时留言, 可视化的部分也可以提issue给我看有什么需要改的地方欢迎反应 !

谢谢各位

MMDetection是一个开源项目,由商汤和香港中文大学推出,用于目标检测任务。它基于Pytorch实现了许多目标检测模型,其中包括maskrcnn。相比其他代码MMDetection训练速度要更快或者相当。如果你想使用MMDetection进行训练,你可以通过导入相应的函数来推理训练好的模型。具体地说,可以使用`from mmdet.apis import inference_detector`来导入`inference_detector`函数。同时,一些分割任务现在更适合使用更大的模型,例如detic。据亲测,detic的预训练模型效果要好于经过训练的maskrcnn,并且maskrcnn的分割结果很糟糕。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [mmdetection训练自己的maskrcnn记录](https://blog.csdn.net/m0_49687072/article/details/130929996)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [MMDetection实战:MMDetection训练与测试](https://download.csdn.net/download/hhhhhhhhhhwwwwwwwwww/85331635)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值