detectron2中利用自定义的数据集来训练(针对目标检测)
两个步骤
1、注册自定义的数据集(告诉数据集怎样获得数据集)
2、(可选择)为数据集注册metadata
1、注册数据集
数据集名称:my_dataset
定义my_dataset_function按照顺序来返回数据集中所有的数据。斯普哦
def my_dataset_function():
...
return list[dict] in the following format
from detectron2.data import DatasetCatalog
DatasetCatalog.register("my_dataset", my_dataset_function)
# later, to access the data:
data: List[Dict] = DatasetCatalog.get("my_dataset")
返回数据形式:list[dict](列表[字典]),每一个字典里面的内容有以下两种形式:
1、标准的detectron2数据集字典格式(推荐)
2、自定义格式
1.1标准的detectron2数据集字典格式
跟COCO数据集的annotations格式相近。每个dict包含一张图片的信息,对于目标检测任务有:
通用的keys | value |
---|---|
file_name | 图片文件的完整路径 |
height,weight | 图片大小 |
image_id(str或者int) | 图片的id |
目标检测任务 | keys | value |
---|---|---|
annotations | bbox(list[dict]) | |
bbox_mode(int) | bbox的格式:BoxMode.XYXY_ABS, BoxMode.XYWH_ABS | |
category_id (int) | 范围是0-num_class-1 |
2、自定义数据集的metadata
metadata是包含整个数据集共享信息的key-value map,通常用来描述数据集里面是什么,比如:种类数量、种类颜色、文件根目录等等。
每个数据集都有metadata,通过MetadataCatalog.get(dataset_name).some_metadata接入。
metadata的的结构取决于相关的代码流需要什么。
如果通过DatasetCatalog.register注册了一个新的数据集,那可以通过MetadataCatalog.get(dataset_name).some_key = some_value来加入相关的metadata,metadate的keys:
key | value |
---|---|
thing_classes (list[str]) | 每个实例类别的名字列表 |
thing_colors (list[tuple(r, g, b)]) | 每个类别的预先定义的颜色,主要用于可视化,不定义就随机颜色 |
其他不用于目标检测的key-value没写,自行查阅官方文档
3、更新新数据集的配置文件
注册新数据集以后可以在cfg.DATASETS.{TRAIN,TEST}中使用数据集名字(my_dataset)
MODEL.ROI_HEADS.NUM_CLASSES
MODEL.RETINANET.NUM_CLASSES
MODEL.ROI_KEYPOINT_HEAD.NUM_KEYPOINTS
TEST.DETECTIONS_PER_IMAGE
参考文档:detectron2官方文档