赞
踩
目前為止玩过了兩個目标检测库
一個是陈云大神的simple-faster-rcnn
一个就是商汤科技的mmdetection
这篇主要讲一下商汤的 mmdetection 如何训练自己的数据集
个人认为必须要养成看官方文档的习惯, 而且要做笔记, 尤其开始学习一个新的库的时候
主要的步骤将分为
数据集格式: VOC2007来举例
注意一下, 官方是基于conda环境下创建虚拟环境来做的
我们就完全照着官方做法, 虚拟环境的好处就是可以依照需求在不同的环境安装不同的库
这样不会打扰你原来的项目
conda create -n open-mmlab python=3.7 -y
这边照着键入就可以了, python版本依照自己环境改一下
意思是说create 一个 名叫 open-mmlab的虚拟环境
创建好之后, 键入 conda activate open-mmlab
就能进入环境
如果conda版本比较老, 可能要用source activate open-mmlab
为这个虚拟环境装一下pytorch及torchvision
conda install pytorch torchvision -c pytorch
都安装完成之后
git clone https://github.com/open-mmlab/mmdetection.git cd mmdetection
安装主程序
键入cd mmdetection
到主目录下, 键入python setup.py develop
其他的依赖包会开始安装, 要是没装成, 就看缺什么在装什么就行了·
配置好环境之后, 开始将自己的数据集放到指定的目录下
具体路径依照下面的格式, 也是官方给的
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
就行, 当然你也可以用软连接的方式, 但我自己的习惯是直接将数据搬到指定的路径, 省的有问题要查半天, 路径算是最好解决的问题
首先移步到
cd mmdetection/configs/
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 (背景)
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')
python tools/train.py ${CONFIG_FILE}
python tools/train.py configs/faster_rcnn_r101_fpn_1x.py
默认的情况训练完之后会出现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给我看有什么需要改的地方欢迎反应 !
谢谢各位
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。