Faster|mmdetection 商汤开源库 FasterRCNN 训练自己的数据集 VOC2007, 結果可視化 2019
目前為止玩过了兩個目标检测库
一個是陈云大神的simple-faster-rcnn
一个就是商汤科技的mmdetection
这篇主要讲一下商汤的 mmdetection 如何训练自己的数据集
个人认为必须要养成看官方文档的习惯, 而且要做笔记, 尤其开始学习一个新的库的时候
主要的步骤将分为
- 安装库
- 配置数据集
- 调整网络参数进行训练
- 结果可视化
第一步 安装mmdetection
注意一下, 官方是基于conda环境下创建虚拟环境来做的
我们就完全照着官方做法, 虚拟环境的好处就是可以依照需求在不同的环境安装不同的库
这样不会打扰你原来的项目
- 终端键入创造虚拟环境
conda create -n open-mmlab python=3.7 -y
意思是说create 一个 名叫 open-mmlab的虚拟环境
- 创建好之后, 键入
conda activate open-mmlab
就能进入环境
如果conda版本比较老, 可能要用source activate open-mmlab
- 【Faster|mmdetection 商汤开源库 FasterRCNN 训练自己的数据集 VOC2007, 結果可視化 2019】为这个虚拟环境装一下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
, 就直接开启
# 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')
接下来只要进行训练就行
- 回到 /mmdetection 然后
官方给与的命令行参数是这样python tools/train.py ${CONFIG_FILE}
所以我们键入
python tools/train.py configs/faster_rcnn_r101_fpn_1x.py
这是最基本的single GPU的训练, 预训练模型如果没有的话会自动开始下载的
如果想要指定路径也可以
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给我看有什么需要改的地方欢迎反应 !
谢谢各位
推荐阅读
- 视觉检测图像分割干货|浅谈BiFPN结构并在mmdetection中从Registry开始逐步实现
- 论文学习笔记|论文学习笔记-t-SNE-1
- DeepLearning|AnnaAraslanova/FBNet 程序分析
- 人生经验|我组18篇论文被ACL 2022录用
- 人工智能|AAAI-22 预征稿通知
- 深度学习|系统学习深度学习--Batch Normalization
- 论文笔记|【论文笔记】基于深度卷积神经网络的传感器融合实现自主驾驶
- 人脸识别|推荐 6 个 yyds 的人脸识别系统
- 深度学习|神经网络中的激活函数与损失函数&深入理解推导softmax交叉熵