当前位置:   article > 正文

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

mmdetection fasterrcnn调试

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

一個是陈云大神的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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

这边用VOC2007来说明

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

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

整个数据集完整搬到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 #这可以修改迭代次数, 在最下方
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

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

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



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

接着还没完, 最主要的类别需要到下面的文件进行修改
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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
接下来只要进行训练就行
  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.
  • 1
  • 2
  • 3

第四步 训练结果可视化

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

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

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

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

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

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

谢谢各位

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/695544
推荐阅读
相关标签
  

闽ICP备14008679号