如果你要使用自定义的数据集,同时还要重写detectron2的数据加载器, 你将需要

  1. 注册你的数据集(即告诉detectron2如何获取你的数据集)。

  2. (可选)为你的数据集注册元数据。

接下来,我们详细解释上述两个概念。

该Colab Notebook 有如何在自定义格式的数据集注册和训练工作的例子。Colab Notebook:(https://colab.research.google.com/drive/16jcaJoc6bCFAQ96jDe2HwtXj7BMD_-m5)

注册数据集

为了让detectron2知道如何获取名为"my_dataset"的数据集,你需要实现 一个函数,该函数返回数据集中的数据,然后将其告知detectron2 功能:

def get_dicts():  ...  return list[dict] in the following format
from detectron2.data import DatasetCatalogDatasetCatalog.register("my_dataset", get_dicts)

此代码段将数据集"my_dataset"与返回数据的函数相关联。在该过程存在之前,注册将一直有效。

该函数可以将数据从其原始格式处理为以下任意一种格式:

  1. Detectron2的标准数据集字典。它可以与detectron2中的许多内置功能一起使用,因此建议使用它。

  2. 你的自定义数据集字典。你还可以以自己的格式返回任意字典格式,例如为新任务添加额外的键,然后你还需要在下游正确处理它们。请参阅下面的更多细节。。

标准数据集字典

对于标准任务(实例检测,实例/语义/全景分割,关键点检测),我们将原始数据集加载到具有类似于COCO的json注释规范的list [dict]中。这是我们对数据集的标准表示。

每个字典包含有关一个图像的信息。该词典可能具有以下字段。这些字段通常是可选的,某些功能可能需要从其他字段推断某些字段,例如数据加载器将从"file_name"加载图像,并从"sem_seg_file_name"加载"sem_seg"。

  • file_name:图像文件的完整路径。如果图像具有此类exif信息,则将应用旋转和翻转。

  • sem_seg_file_name:语义分割GT的路径。

  • sem_seg:2Dtorch.Tensor中的语义分割GT。数组中的值表示类别标签从0开始。

  • height,width:整数。图像的尺寸。

  • image_id(str或int):标识此图像的唯一ID。在评估期间用于识别图像,但数据集可将其用于不同目的。

  • annotations(list [dict]):每个字典对应此图片中一个实例的注释。annotations默认情况下,具有空图像的图像将从训练中删除,但可以使用添加DATALOADER.FILTER_EMPTY_ANNOTATIONS。每个字典可能包含以下键:

    请注意,COCO格式的坐标注释是[0,H-1或W-1]范围内的整数。默认情况下,detectron2向绝对关键点坐标添加0.5,以将其从离散像素索引转换为浮点坐标。

    • iscrowd:0或1。是否将此实例标记为COCO的crowd region。如果你不知道这是什么意思,请不要包括此字段。

    • 如果为list [list [float]],则表示多边形列表,每个组件连接一个对象。如果是list [float],则表示为一个简单的多边形,格式为[[x1,y1,...,xn,yn]`。X和Y可以是[0,1]中的相对坐标,也可以是绝对坐标,这取决于"bbox_mode"是否是相对的。

    • 如果为dict,则表示COCO RLE格式中每个像素的segmentation mask。字典应该有键"大小"和"计数"。你可以将0和1的uint8分段掩码转换为RLE格式为pycocotools.mask.encode(np.asarray(mask,order ="F")))

    • bbox(list [float]):4个数字的列表,代表实例的边界框。

    • bbox_mode(int):bbox的格式。

    • 它必须是structures.BoxMode((https://detectron2.readthedocs.io/modules/structures.html#detectron2.structures.BoxMode) 的成员。目前支持:BoxMode.XYXY_ABS,BoxMode.XYWH_ABS

    • category_id(int):表示类别标签,[0,num_categories)范围内的整数。保留值num_categories表示"背景"类别(如果适用)。

    • segmentation(list [list [float]]或dict):

    • keypoints(list [float]):格式为[x1,y1,v1,...,xn,yn,vn]。v [i]表示此关键点的可见性(http://cocodataset.org/#format-data)。n必须等于关键点类别的数量。X和Y可以是[0,1]中的相对坐标,也可以是绝对坐标,取决于"bbox_mode"是否是相对的。

按照Fast R-CNN风格训练则使用以下键。

  • proposal_boxes(数组):形状为(K,4)的2D numpy数组,表示该图像的K个预先计算的proposal box。

  • proposal_objectness_logits(array):形状为(K,)的numpy数组,对应于"proposal_boxes"中proposals的objectness logits。

  • proposal_bbox_mode(int):预先计算的proposal bbox的格式。它必须是structure.BoxMode(https://detectron2.readthedocs.io/modules/structures.html#detectron2.structures.BoxMode) 的成员 。默认值为BoxMode.XYXY_ABS。

如果你的数据集已经是COCO格式的json文件,则只需通过以下方式进行注册:

from detectron2.data.datasets import register_coco_instancesregister_coco_instances("my_dataset", {}, "json_annotation.json", "path/to/image/dir")

它将为你处理一切(包括元数据)。

如果你的数据集为带有自定义带有实例注释的COCO格式, 可以使用load_coco_json(https://detectron2.readthedocs.io/modules/data.html#detectron2.data.datasets.load_coco_json)函数。

自定义数据集字典

在你的函数返回的list [dict]数据集中,字典也可以具有任意的自定义数据。当你执行新任务并且需要sklearn不支持的其他信息时,这可能需要自定义数据集字典。在这种情况下,你需要确保下游代码可以处理你的数据,这需要为数据加载器编写一个新的"映射器"(请参阅使用自定义数据加载器(https://detectron2.readthedocs.io/tutorials/data_loading.html)

在设计自定义格式时,请注意所有字典都存储在内存中(有时会序列化并带有多个副本)。为了节省内存,每个字典旨包含每个样本的少量但足够的信息,例如文件名和注释。加载完整样本通常在数据加载器中进行。

对于在整个数据集中共享的属性,请使用Metadata(请参阅下文)。为避免内存不足,请勿为每个样本重复保存此类信息。

数据集的"元数据"

每个数据集都与一些元数据相关联,可通过MetadataCatalog.get(dataset_name).some_metadata来访问这些元数据。元数据是一个键值映射,其中包含在整个数据集中共享的信息,用于解释数据集中的内容,例如类的名称、类的颜色、文件的根目录等。这些信息元数据的结构取决于相应下游代码的需求。

如果你通过DatasetCatalog.register注册新的数据集,则可能还需要通过MetadataCatalog.get(dataset_name).set(name, value)来添加其相应的元数据 ,以启用需要元数据的任何功能。你可以这样做(以元数据字段"thing_classes"为例):

from detectron2.data import MetadataCatalogMetadataCatalog.get("my_dataset").thing_classes = ["person", "dog"]

这是detectron2中内置功能使用的元数据键值列表。如果你没有添加这些元数据到自己的数据集中,则某些功能可能是你无法使用:

  • thing_classes(list [str]):所有实例检测或分段任务需要使用的。每个实例/事物类别的名称列表。如果你加载COCO格式的数据集,它将由函数load_coco_json自动设置。

  • thing_colors(list [tuple(r,g,b)]):每个事物类别预定义的颜色(在[0,255]中)。用于可视化。如果未给出,则使用随机颜色。

  • stuff_classes(list [str]):用于语义和情景分割任务。每个物体类别的名称列表。

  • stuff_colors(list [tuple(r,g,b)]):每个填充类别的预定义颜色(在[0,255]中)。用于可视化。如果未给出,则使用随机颜色。

  • keypoint_names(list [str]):检测关键点任务需要使用。每个关键点的名称列表。

  • keypoint_flip_map(list[tuple [str]]):检测关键点任务需要使用。名称对列表,其中每对是在增强过程中翻转图像时应翻转的两个关键点。

  • keypoint_connection_rules:list [tuple(str,str,(r,g,b))]。列表[tuple(str,str,(r,g,b))]。每个元组指定一对已连接的关键点,以及在可视化时用于它们之间的线颜色。

一些特定于某些数据集评估的其他元数据(例如COCO):

  • thing_dataset_id_to_contiguous_id(dict [int-> int]):由COCO格式的所有实例检测/分段任务使用。从数据集中的实例类ID到[0,#class)范围内的连续ID的映射。将由load_coco_json函数自动设置。

  • stuff_dataset_id_to_contiguous_id(dict [int-> int]):在生成用于语义/全景分割的预测json文件时使用。从数据集中的语义分类ID到[0,num_categories)中的连续ID的映射。它仅对评估有用。

  • json_file:COCO注释的json文件。由COCO评估用于COCO格式的数据集。

  • panoptic_root,panoptic_json:由情景分割评估使用。

  • evaluator_type:内置的主要训练脚本用来选择评估器。如果你编写自己的脚本,则无需使用它。你可以直接在脚本中为数据集提供DatasetEvaluator(https://detectron2.readthedocs.io/modules/evaluation.html#detectron2.evaluation.DatasetEvaluator)。

注意:有关"thing"和"stuff"概念的背景知识,请参见 关于看到的东西:人与机器对材料的感知(http://persci.mit.edu/pub_pdfs/adelson_spie_01.pdf)。在detectron2中,术语"thing"用于实例级任务,"stuff"用于语义分割任务。两者都用于情景分割。

更新新数据集的配置

注册数据集后,你可以在DATASETS.{TRAIN,TEST}中使用数据集的名称(例如,上面示例中的"my_dataset")。你可能还需要更改其他配置以对新数据集进行训练或评估:

  • MODEL.ROI_HEADS.NUM_CLASSESMODEL.RETINANET.NUM_CLASSES是物体类的数量,适用于R-CNN和RetinaNet模型。

  • MODEL.ROI_KEYPOINT_HEAD.NUM_KEYPOINTS设置关键点的数量。你还需要设置Keypoint OKS(http://cocodataset.org/#keypoints-eval)与TEST.KEYPOINT_OKS_SIGMAS一起进行评估。

  • MODEL.SEM_SEG_HEAD.NUM_CLASSES设置语义FPN和Panoptic FPN的物体类的数量。

  • 如果你要训练Fast R-CNN(包含预先计算过程), DATASETS.PROPOSAL_FILES_ {TRAIN,TEST}需要匹配数据。proposal文件的格式已记录在案,此处(https://detectron2.readthedocs.io/modules/data.html#detectron2.data.load_proposals_into_dataset)。

原文链接:https://detectron2.readthedocs.io/tutorials/

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 mthler」,每日朋友圈更新一篇高质量博文(无广告)。

扫描二维码添加小编↓

detectron2使用自定义的数据集相关推荐

  1. detectron2使用自定义数据集及数据加载

    1.使用自定义数据集 数据集中列出了detectron2中内置支持的数据集.如果要使用自定义数据集,同时还重复使用detectron2的数据加载器,则需要: 1)注册您的数据集(即,告诉detectr ...

  2. 自定义AVA数据集流程及在SlowFast中训练

    目录 前言 一,视频的处理 1.1视频准备 1.2切割视频为图片 二.数据集文件 2.1数据集文件总览 2.2annotations 2.2.1ava_train_v2.2.csv 2.2.2ava_ ...

  3. 在自定义的数据集上训练YOLOv5详细教程分享

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 YOLO系列的目标检测模型随着YOLOv5的引入变得越来越强大了. ...

  4. 08【mmaction2 行为识别商用级别】自定义ava数据集 之 将视频裁剪为帧

    github(新版):https://github.com/Whiffe/mmaction2_YF 码云(新版):https://gitee.com/YFwinston/mmaction2_YF.gi ...

  5. 自定义ava数据集及训练与测试 完整版 时空动作/行为 视频数据集制作 yolov5, deep sort, VIA MMAction, SlowFast

    前言 这一篇博客应该是我花时间最多的一次了,从2022年1月底至2022年4月底. 我已经将这篇博客的内容写为论文,上传至arxiv:https://arxiv.org/pdf/2204.10160. ...

  6. 《我的PaddlePaddle学习之路》笔记四——自定义图像数据集的识别

    原文博客:Doi技术团队 链接地址:https://blog.doiduoyi.com/authors/1584446358138 初心:记录优秀的Doi技术团队学习经历 *本篇文章基于 Paddle ...

  7. 如何在自定义的数据集上训练YOLOv5

    YOLO系列的目标检测模型随着YOLOv5的引入变得越来越强大了.在这篇文章中,我们将介绍如何训练YOLOv5为你识别自己定制的对象. 本文我们使用公共血细胞检测数据集,你可以自己导出,也可以在自己自 ...

  8. (!详解 Pytorch实战:①)kaggle猫狗数据集二分类:加载(集成/自定义)数据集

    这系列的文章是我对Pytorch入门之后的一个总结,特别是对数据集生成加载这一块加强学习 另外,这里有一些比较常用的数据集,大家可以进行下载: 需要注意的是,本篇文章使用的PyTorch的版本是v0. ...

  9. detectron2训练自己的数据集(只包含一类数据)

    detectron2训练自己的coco格式数据集(只包含一类数据) detectron2的安装 Linux 或 macOS 或者windows与 Python ≥ 3.6 PyTorch ≥ 1.8 ...

最新文章

  1. Gooogle Test中的TEST()宏代码分析
  2. nb-iot链路层加密_Google为低端Android手机和IoT设备创建了更快的加密
  3. 【BZOJ1085】骑士精神
  4. 前端项目引入js文件写绝对目录还是相对目录_flask入门(三)静态文件
  5. Spring基于注解的方式二
  6. sql2008中打开“外围应用配置器”和启用 OpenRowSet 和 OpenDataSource函数
  7. qml tableview 滚动条加宽_qt qtableview 样式设置
  8. WORD2010每次启动都要配置
  9. hibernate在不联网或者网络异常时不能解析配置文件
  10. python实现超市商品销售管理系统_python实现超市商品销售管理系统
  11. 变更DirectX SDK版本-DirectX8升级DirectX9
  12. shader篇-纹理-遮罩纹理
  13. X-Ways Forensics: 综合取证分析工具
  14. Wikidata知识图谱介绍与数据处理
  15. c++语言表白超炫图形_数学公式的超酷表白我爱你
  16. python系列——多进程之进程池(pool)
  17. Primavera P6或项目管理站点/论坛地址,交流群组
  18. c语言涛涛,首批国家级一流本科课程!国科大这些“金课”入选啦
  19. 认识LTE(六): LTE中的信道特征以及信道估计技术
  20. 秋招复盘 — 不忘初心,砥砺前行

热门文章

  1. 计算机科学的发展历程和未来发展方向
  2. 身份证验证—Java循环条件判断练习题
  3. BOM——浏览器对象模型(Browser Object Model)
  4. 风雨欲来:网络设备商竞速下一代防火墙
  5. 不要问别人我该怎么做,因为成功是不可复制,但失败却可以
  6. 平安7年精益敏捷转型之路
  7. Inconvenient Pairs(线段树/二分)
  8. HTML禁止复制粘贴以及禁止下载图片
  9. linux串口蜂鸣器报警电路,基于51单片机的蜂鸣器鸣叫震动主从机同步报警设计-BELL--(电路图+程序源码)...
  10. 关于Android中将PCM转AMR的问题探讨