测试环境:
OS: Win10
CUDA: 11.0
pytorch: 1.7.1
GPU: 3060Ti
python:3.8
Detectron: 0.3(笔者可以在win环境成功编译安装detectron2
Detectron2模型数量虽然比mmdetection少,不过有些论文还是用Detectron2做的,因此有必要了解一下如何用Detectron2训练自定义数据集。
关于mmdetection下训练coco格式的自定义数据请移步笔者另一篇博文:mmdetection-v2.3安装配置及训练自定义数据集
以笔者目前的经验来看,要想对自己领域内的图像做目标检测任务,最好的方法是制作成COCO格式数据集,个人习惯用labelimg先制作成voc格式,然后用脚本转换为coco格式,转换脚本可见笔者的github库:https://github.com/ouening/OD_dataset_conversion_scripts 。制作成COCO格式的好处是目前大部分OD框架都支持该数据格式,直接调用API或者简单修改就可以用,当然VOC格式也是基本都支持的,但是COCO在指标评价上更加丰富,VOC只有传统的mAP,COCO指标有AP,AP0.5,AP0.75,APs,APm,APl,AR1,AR10,AR100等。
下面以AdelaiDet(基于Detectron2,需要先安装此库)检测框架为例介绍使用coco格式的自定义数据集训练FCOS模型。
按照教程安装完AdelaiDet之后,我们可以看到该库支持一下几种模型:
我们进入FCOS-Detection文件夹查看一下FCOS模型相关的配置文件:
官方帮助文档的教程提示是使用R_50_1x.yaml这个配置文件,打开这个配置文件可以看到依赖于Base-FCOS.yaml这个文件,而这个配置文件就是最基础的,包括了模型结构,数据集,求解器等参数,因此训练自己的数据集需要修改这里的数据集,batch size也可以在此文件修改。
假设我已经制作好了自己的数据集,其组织形式如下:
修改训练脚本tools/train_net
,在程序开头位置注册数据集信息,代码很简单,因为使用的是coco格式数据集,detectron2提供相关api进行设置,代码如下:
##===============注册自定义数据集================##
from detectron2.data.datasets import register_coco_instances
register_coco_instances("SimpleOD_train", {
}, json_file=r"D:\simpleod\YOLODataset\CocoDataset\annotations\instances_trainval.json",
image_root = r"D:\simpleod\YOLODataset\CocoDataset\trainval")
register_coco_instances("SimpleOD_test", {
}, r"D:\simpleod\YOLODataset\CocoDataset\annotations\instances_test.json",
r"D:\simpleod\YOLODataset\CocoDataset\test")
# 设置类别
from detectron2.data import MetadataCatalog
MetadataCatalog.get("SimpleOD_train").thing_classes = ['xianjia','fangzhenchui','insulator']
MetadataCatalog.get("SimpleOD_test").thing_classes = ['xianjia','fangzhenchui','insulator']
##================ END =========================##
接下来是修改配置文件Base-FCOS.yaml
,如下图所示:
最后执行命令:
python tools/train_net.py --config-file configs/FCOS-Detection/R_50_1x.yaml --num-gpus 1 OUTPUT_DIR training_dir/fcos_R_50_1x
如果顺利的话就可以正常运行了。
来源:oschina
链接:https://my.oschina.net/u/4377926/blog/4836336