mmdetection训练自己的数据集
数据的标注
在介绍mmdetection之前,先来讲讲如何制作一个coco格式的数据集
via标注工具
标注数据集用的是via标注工具
VGG Image Annotator (VIA)是一款开源的图像标注工具, 由Visual Geometry Group开发
这里我上传了一份到gitpage方便在线使用
via标注工具打开via标注工具,首先导入图片,可以单张导入也可以批量导入
在左侧选择标注框来进行标注,因为我做的是目标检测,所以选择的是bbox
在标注的过程中,如果我们觉得数字labels影响精细标注了,则可以在view这里暂时隐藏掉label
用ctrl+鼠标滚轮可以放大缩小图片,可以更细致地标注内容
接下来我们给标注的内容添加类别,因为我制作的数据集只有一个类也就是tree,所以后期直接用python处理统一添加即可,如果有好几个类,则建议直接在via标注工具中添加类别
添加方式如下图 (Snipaste真好用)
最后讲一下保存和载入,因为我们是打了类别标注的,所以要整个工程一起存储方便下次导入继续标注,region/file attributes的导入与导出是把创建的类别导入进来,免得下次标注要重新创建,不过类别少的导师无所谓
因为可能是多人共同完成的标注,所以标注文件有时候会需要合并,则需要每个工程导出为一个json文件,然后将导出的内容一起导入,再统一导出即可 (工程文件不能同时导入多个)
这样子标注就完成了 (最后导出为coco格式)
COCO数据集格式介绍
coco数据集本身是一个字典,里面包含五块内容,info,licenses,images,annotations以及categories
我们在训练时需要的部分是图片images,标注annotations以及类别categories
annotations的格式如下
1 | annotation{ |
id是标注的编号,要求同一份数据集里面不能重复,所以在做数据集合并的时候需要注意
image_id是图片在数据集中的编号,这里的image_id要求使用int,但是不知道为什么via标注导出的是个字符串,所以一会儿得要处理
catagory_id对应的是类别的id
image的格式没有特别需要注意的地方,同样也是id不能重复
catagory因为我只有一个类别所以处理的时候最后直接加上
数据集处理
首先是标注文件的合并,因为有一堆信息 (比如image_id得是int) 要处理,所以我合并文件直接用python处理的
1 | import os |
然后划分训练集和验证集
1 | import os |
至此,算是彻底完成了一个自定义的coco格式的数据集
mmdetection的使用
先在git上clone一个mmdetection到服务器上,或者直接下载上传到服务器
然后到这个mmdetection文件夹下
我的安装列表如下
1 | pip install torch==1.6.0 |
注意要装mmcv-full,而不是mmcv,同时如果mmcv-full安装不了就看看有没有ninja,没有的话安装一个
这些步骤都执行完之后按照官网的代码测试一下
然后在文件夹下创建一个data文件夹
内容如下
1 | data |
其中val2017和train2017是验证集和测试集的图片文件夹,instances_train2017.json和instances_val2017.json是训练集和验证集的标注文件 (当然这里可以用自己的名字然后去代码里面改,但是要改的东西更多)
接着我们来整一个模型配置文件
首先看一下configs/_base_/models/
目录,这里面是各个模型对应的参数,我们先尝试改一个fasterRCNN,我们打开faster_rcnn_r50_fpn.py
搜索num_classes,将类的数量改为自己数据集类的数量,不需要因为背景+1,因为mmdetection会自动处理
1 | # num_classes=80, |
然后修改coco数据集对应的类,在mmdet/core/evaluation/class_names.py
中,找到coco数据集,进行修改
1 | def coco_classes(): |
在mmdet/datasets/coco.py
中也要做对应的修改
1 | ''' |
完成,然后我们用tool/train.py
来生成对应的配置文件
1 | python tools/train.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py --work-dir record |
--work-dir
的意思是指定工作目录,一会儿会在这里生成配置文件,生成配置文件之后,我们可以中断掉,然后在工作目录中找到这个配置文件,做修改之后 (各种微调,比如学习率,训练次数,继续上次的训练文件等) 再运行这个配置文件即可
1 | python tools/train.py record/faster_rcnn_r50_fpn_1x_coco.py |