Faster|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. 【Faster|mmdetection 商汤开源库 FasterRCNN 训练自己的数据集 VOC2007, 結果可視化 2019】为这个虚拟环境装一下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档案就能生成图标
大概是这像这样的效果
Faster|mmdetection 商汤开源库 FasterRCNN 训练自己的数据集 VOC2007, 結果可視化 2019
文章图片

使用说明就不在阐述, 非常简单易用
mmdetection_visualize
如果觉得好用也可以帮我点个Star, 希望可以多帮大家解决问题一起进步!
有问题随时留言, 可视化的部分也可以提issue给我看有什么需要改的地方欢迎反应 !
谢谢各位

    推荐阅读