【Detectron2】入门02-使用自己的数据集

2023-10-28

Detectron2 official Documents: https://detectron2.readthedocs.io/tutorials/datasets.html

目录

COCO格式数据集

Standard dataset dict

Datasets的Metadata


COCO格式数据集

ref: COCO - Common Objects in Contexticon-default.png?t=L9C2https://cocodataset.org/#format-data

有两种方法,第一种是Detectron2官方提供的组织数据集格式:Standard Dataset Dict;第二种是将数据集转换为COCO format,然后用register_coco_instances()函数注册数据集。

from detectron2.data.datasets import register_coco_instances

register_coco_instances(dataset_name, {}, json_file, image_root)

在COCO格式下,所有图片需放在一个文件夹下,另有一个单独的json文件。这个json文件包含了所有的annotations, metadata, categories。如果想要对数据集做划分,那么就建立多个文件夹,并用不同的json文件。 具体来说:

  • the coco dataset's json is a dict, and its keys is categories, images, annotations;
  • the categories is a list, and each item is a dict which keys are supercategory,id,name;
  • the images is a list, and each item is a dict which keys are file_name,height,width,id,depth;
  • the annotations is a list, and each item is a dict which keys are category_id,segmentation,area,id,iscrowd

Standard dataset dict

dataset APIs: DatasetCatalog, MetadataCatalog

建立自己的数据集,包含两步:

  1. 登记数据集,告诉detectron2如何获得数据集;
  2. 为数据集登录Metadata

建立函数,范数返回如下格式的数据:

  1. Detectron2的Standard dataset dict
  2. 增加额外的key,方便在之后的downstream的任务中处理他们

对于标准任务:instance detection, instance/semantic/panoptic segmentation, keypoint detection。我们把原始数据载入到list[dict]中,类似于COCO的annotations。每一个字典包含一张照片的信息,字典应该有以下部分:

  • file_name:到这张图片的完整路径,如果图片有EXIF metadata,可能会在图片上做随机旋转或反转
  • height, width:整型,图片的形状
  • image_id:整型/字符,unique id
  • annotations:list[dict],每一个dict对应图片中一个instance,如果annotations是空表,则代表该图片没有目标,会在训练中被去除,具体每个dict包含:

bbox list[float]:代表bbox的四个数

bbox_mode:整型,bbox的格式,必须是structures.BoxMode的成员,目前支持BoxMode.XYXY_ABS和BoxMode.XYWH_ABS

category_id:整型,属于[0, num_categories - 1]

  • 对于Fast R-CNN (with precomputed proposals),还有一些额外的keys需要:

proposal_bboxes (array) 2维numpy array,形状是(K, 4),代表K个precomputed proposal boxes

proposal_objectness_logits numpy array,形状是(K, )和proposal在proposal_boxes的objectness logits相关

proposal_bbox_mode 类似于bbox_mode

Datasets的Metadata

通过MetadataCatalog.get(dataset_name).some_metadata获取,Metadata是一个键值对,包含了整个数据的一些信息,例如,类别的名字,类别的颜色,文件的根目录。这对于augmentation,evaluation,visualization,Logging等有用。

通过MetadataCatalog.get(dataset_name).some_key = some_value来填充

  • thing_classes: list[str]
  • thing_colors: list[tuple(r, g, b)] r,g,b in [0,255],如果不给,则随机产生

另外还需更新新数据集的config:

cfg.Datasets.TRAIN或cfg.Datasets.TEST

MODEL.ROI_HEADS.NUM_CLASSES和MODEL.RETINANET.NUM_CLASSES是R-CNN和RetinaNet的类

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Detectron2】入门02-使用自己的数据集 的相关文章

  • 几种不同的推荐引擎比较

    以前也用了一些推荐算法写过一些应用 最近用上了网易云音乐 于是便想写篇推荐引擎的文章 一 推荐引擎 主动发现用户当前或潜在需求 并主动推送信息给用户的信息网络 挖掘用户的喜好和需求 主动向用户推荐其感兴趣或者需要的对象 二 推荐引擎的分类
  • Allegro学习笔记---2.新建PCB+导入网表+元器件快速导入PCB

    一 前期准备 1 将需要用到的PCB封装库和焊盘库准备好 如下图 一般是将 dra psm pad文件都放到同一个文件夹A下面 dra 可编辑的pcb封装文件 psm 被调用的pcb封装文件 不可编辑 pad 焊盘文件 2 先用orcad
  • 如何修改AD中PCB背景黑色域的大小

    方法 1 先将pcb选在keep out layer层 2 用线命令画出一个封闭的区域 得封闭 线命令就是line 选择多条封闭区域可用shift键 3 选中如图上个命令就可以 操作过程可能遇到的问题 遇到这个问题是因为 封闭区域没有全选中
  • Tecplot绘制流体后处理图的问题

    使用的软件为Tecplot Chorus 2017 R3 来处理Fluent17 0的流体仿真数据 看了点击打开链接的官方文档 一直没有搞清楚什么样的格式可以像他给出的一样做多组数据的对比 一开始导入fluent计算产生的data文件 发现
  • 全国计算机等级考试C语言(未来教育平台)

    未来教育 全国计算机等级考试 qq com https mp weixin qq com s biz MzkyNjQwODc2MA mid 2247483676 idx 1 sn 96daf350e5cb0542bbab621cbc8434
  • 步步为营 .NET 代码重构学习笔记 六、移动函数和移动值域(Move Method And Move Field)...

    Move Method 概述 程序中 有个函数与其所驻class之外的另一个class进行更多交流 调用后者或被后者调用 动机 Motivation 如果一个class有太多行为 或如果一个class与另一个class有太多合作而形成高度耦

随机推荐