detectron2关于coco数据集的格式以及注册

首先我们应该知道coco数据集的格式。

https://blog.csdn.net/sophia_xw/article/details/102954932?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase

这里面提到了coco数据集文件夹的结构。文件夹结构大致分成了标注文件,训练图像文件,测试图形文件

https://blog.csdn.net/u012609509/article/details/88680841

这个地址里面提到了json标注文件的格式。

当我们把自己的数据集转换成coco格式之后,就应该考虑怎么在detectron2的框架下把数据加载进去。

第一步是要注册自己的数据集

借鉴https://blog.csdn.net/weixin_39916966/article/details/103299051?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.nonecase

那什么是“注册”呢?其实就是让框架能够找到你的数据并解析成相应的数据格式。

具体注册数据集的逻辑思路参见下面几个函数

data/datasets/buildin.py/register_all_coco(root="datasets") 
data/datasets/buildin_meta.py/_get_builtin_metadata(dataset_name) 
data/datasets/buildin_meta.py/_get_coco_instances_meta() 
data/datasets/register_coco.py/register_coco_instances(name, metadata, json_file, image_root)
data/datasets/coco.py/load_coco_json(json_file, image_root, dataset_name=None, extra_annotation_keys=None)

这里我理一下思路

data/datasets/buildin.py/register_all_coco(root="datasets") 

这个方法就是把所有coco类的数据集的名称和训练集,验证集或测试集的名称和对应的图像路径、标签路径传给data/datasets/register_coco.py/register_coco_instances(name, metadata, json_file, image_root)

这个方法看名字就是注册coco数据集的实例,也就是每幅图像的每个目标。参数“name”指的是训练集等的名字,metadata是指data/datasets/buildin_meta.py/_get_builtin_metadata(dataset_name) ,参数dataset_name指的是你的数据集的名字。

detectron2关于coco数据集的格式以及注册_第1张图片

从上图的代码可以看出,register_coco_instances主要包括DatasetCatalog.register和MetadataCatalog.get(name).set两个方法组成。

DatasetCatalog这个函数实际上就是定义了一个空字典,然后register(name, func)方法通过load_coco_json方法得到一个list[dict],这个list里面包含了我们从图像路径和标签文件提取的文件名、目标框等信息。list[dict]较多,这里不再赘述。所以这个函数就是得到一个字典,键值是训练集或其他集的名字,值就是该集提取出来的目标信息。

因为数据集中有很多公用的属性,将这些属性单列出来,就是用MetadataCatalog.get(name).set

data/datasets/buildin_meta.py/_get_builtin_metadata(dataset_name) 中包括许多不同数据集的获取公用属性的方法,data/datasets/buildin_meta.py/_get_coco_instances_meta() 就是一种一个方法。

如果我们自己定义一个数据集,其实只需要DatasetCatalog.register和MetadataCatalog.get(name).set方法就可以了。DatasetCatalog.register里面包括load_coco_json方法提取出来的list[dict],其实就是根据训练集等集的名字得到对应的提取的信息数据。然后通过MetadataCatalog.get(name).set得到通用属性。通用属性可以直接在参数里直接设定,所以不用_get_builtin_metadata和_get_coco_instances_meta()方法。

 

 

你可能感兴趣的:(深度学习目标识别)