商汤科技(2018 COCO目标检测挑战赛冠军)开源了基于Pytorch的目标检测工具mmdetection,支持Mask-RCNN,Fast-RCNN,Faster-RCNN等主流的目标检测框架。
作者称mmdetection有三点优势:测试结果、训练速度、所需显存都有所改善。
下面将记录一下我的测试过程。
mmdetection支持coco格式和voc格式的数据集,分别介绍这两种数据集的使用方式。
coco数据集
官方推荐coco数据集按照以下目录形式存储,以coco2017数据集为例
mmdetection
├── mmdet
├── tools
├── configs
├── data
│ ├── coco
│ │ ├── annotations
│ │ ├── train2017
│ │ ├── val2017
│ │ ├── test2017
推荐以软连接的方式创建data文件夹,下面是创建软连接的步骤
cd mmdetection
mkdir data
ln -s $COCO_ROOT data
其中,$COCO_ROOT需改为你的coco数据集根目录
voc数据集
与coco数据集类似,将voc数据集按照以下的目录形式存储,以VOC2007为例
mmdetection
├── mmdet
├── tools
├── configs
├── data
│ ├── VOCdevkit
│ │ ├── VOC2007
│ │ │ ├── Annotations
│ │ │ ├── JPEGImages
│ │ │ ├── ImageSets
│ │ │ │ ├── Main
│ │ │ │ │ ├── test.txt
│ │ │ │ │ ├── trainval.txt
同样推荐以软连接的方式创建
cd mmdetection
mkdir data
ln -s $VOC2007_ROOT data/VOCdevkit
其中,$VOC2007_ROOT需改为你的VOC2007数据集根目录
切图->json文件分类->img放入相应json文件中->按照各类数据集数量均衡合成数据集(通过各类数量可视化)->通过labelme过一遍数据集有无错误->将img和json分train和val->生成相应的mask->生成一个json文件,再修正label中train和test的类别对应格式。文件目录如上图所示,准备进行训练。
mmdet /core/evaluation/class_name.py中的coco_classes
mmdet/datasets/coco.py中的class CocoDataset(CustomDataset)中的CLASSES
mmdet/datasets/coco.py中的def evaluate()中的 classwise=true
train出来—>pyconfig文件参数修改,如:image_scale,epoch,lr,batch-size等
官方推荐使用分布式的训练方式,这样速度更快,如果是coco训练集,修改CONFIG_FILE中的pretrained参数,改为你的模型路径,然后运行下方代码
bash ./tools/dist_train.sh [optional arguments]
如果不想采用分布式的训练方式,或者你只有一块显卡,则运行下方的代码
python tools/train.py --gpus --work-dir
如果一切顺利的话,你的模型应该就开始训练了
使用如下代码进行测试
bash tools/dist_test.sh path/to/model —format-only —eval-options "jsonfile_prefix=./xxx"
生成.seg和.bbox的json文件,并进行可视化测试或者通过其他测试方式进行具体测试分析。