ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Vision Mamba 项目内置数据集完整指南:Detectron2 数据目录结构、Catalog 注册机制与准备脚本详解

Vision Mamba 项目内置数据集完整指南:Detectron2 数据目录结构、Catalog 注册机制与准备脚本详解 人工智能计算机视觉深度学习预训练微调【免费下载链接】Vim[ICML 2024] Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Model项目地址https://gitcode.com/gh_mirrors/vim2/Vim点击查看免费下载在 Vision MambaVim项目的检测分支det/中模型训练与评估依赖一套完整的 Detectron2 数据基础设施。本文以 det/docs/tutorials/builtin_datasets.md 为骨架结合仓库源码det/detectron2/data/catalog.py、det/detectron2/data/datasets/builtin.py等系统讲解内置数据集的目录结构、环境变量配置、六大数据集的准备流程以及数据准备脚本背后的实现原理。读完本文你将能够独立搭建 COCO、LVIS、Cityscapes、Pascal VOC、ADE20K 与 PanopticFPN 所需的数据目录并理解DatasetCatalog/MetadataCatalog的注册与读取机制从而顺利运行仓库提供的训练与评估脚本。一、数据集访问的两大入口DatasetCatalog 与 MetadataCatalog在det/的 Detectron2 框架中任何数据集都通过两个全局注册表被访问DatasetCatalog存储数据集名字 → 解析函数的映射调用get(name)时会执行注册的解析函数返回list[dict]格式的样本列表每个 dict 描述一张图片及其标注MetadataCatalog存储数据集的元信息如类别名称thing_classes、评估器类型evaluator_type等。两者的实现位于 det/detectron2/data/catalog.py_DatasetCatalog.register(name, func)要求func是无参数可调用对象且多次调用返回相同结果catalog.py 的 register 实现_DatasetCatalog.get(name)在名字未注册时会抛出KeyError并列出所有已注册数据集catalog.py 的 get 实现Metadata对象是单例首次MetadataCatalog.get(name)会创建并常驻内存后续调用返回同一实例同一属性不允许被赋成不同值catalog.py 的 Metadata 实现。内置数据集的注册入口在 det/detectron2/data/datasets/builtin.py该文件在__name__.endswith(.builtin)时读取环境变量DETECTRON2_DATASETS默认datasets并依次调用register_all_coco、register_all_lvis、register_all_cityscapes、register_all_cityscapes_panoptic、register_all_pascal_voc、register_all_ade20k完成全部内置数据集注册builtin.py 的注册入口。例如 COCO 的预定义切分表_PREDEFINED_SPLITS_COCO把coco_2017_train、coco_2017_val等名字映射到(图片目录, 标注 json)元组builtin.py 的 COCO 切分表。二、数据集根目录与环境变量 DETECTRON2_DATASETS所有内置数据集都假定存放在由环境变量DETECTRON2_DATASETS指定的根目录下其期望的顶层结构为$DETECTRON2_DATASETS/ coco/ lvis/ cityscapes/ VOC20{07,12}/配置方式export DETECTRON2_DATASETS/path/to/datasets若不设置该变量默认值为当前工作目录下的./datasets见 builtin.py 第 253 行 的os.path.expanduser(os.getenv(DETECTRON2_DATASETS, datasets))。因此从det/目录启动训练时最简单的方式就是把数据放在det/datasets/下。仓库中引用这些内置数据集的模型配置可参考 det/MODEL_ZOO.md而det/configs/下的 YAML 配置如 det/configs/COCO-Detection/faster_rcnn_R_50_FPN_1x.yaml、det/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.yaml中的DATASETS.TRAIN/DATASETS.TEST字段即填写上述注册名如(coco_2017_train,)、(coco_2017_val,)。三、COCO 实例 / 关键点检测数据集3.1 期望的目录结构从 COCO 官网下载页面此处仅作来源说明命令以仓库为准获取标注与图片后需整理为coco/ annotations/ instances_{train,val}2017.json person_keypoints_{train,val}2017.json {train,val}2017/ # 与对应 json 中提及的图片文件同样支持使用 2014 版数据集把train2014/val2014图片目录与instances_train2014.json等标注文件放入coco/即可。从源码看2014 版还预定义了coco_2014_minival与coco_2014_valminusminival切分builtin.py 的 COCO 2014 切分。3.2 加载原理与注册实现COCO 格式标注由 det/detectron2/data/datasets/coco.py 中的load_coco_json解析。关键行为包括通过pycocotools.coco.COCO读取 json并按图片 id 排序保证结果可复现coco.py 的排序逻辑当传入dataset_name时自动从 json 的categories字段生成thing_classes并把非连续的真实类别 id 映射为[0, 类别数)的连续 id存入thing_dataset_id_to_contiguous_idcoco.py 的类别映射过滤点数不足的多边形少于 3 个顶点实例将 bbox 标记为BoxMode.XYWH_ABS关键点坐标加 0.5 以从像素索引转换为浮点坐标coco.py 的标注处理。注册函数register_coco_instances将名字 → 加载函数写入DatasetCatalog同时把json_file、image_root、evaluator_typecoco等写入MetadataCatalogcoco.py 的 register_coco_instances。3.3 快速测试数据集内置的若干测试脚本det/dev/run_*_tests.sh使用一个仅含 100 张图片的迷你 COCO 数据集可通过 det/datasets/prepare_for_tests.sh 一键下载# 在 det/ 目录下执行 ./datasets/prepare_for_tests.sh该脚本会从 Detectron2 的公共文件服务器下载instances_val2017_100.json、person_keypoints_val2017_100.json与val2017_100.tgz解压后得到coco/val2017图片目录并写入$DETECTRON2_DATASETS/coco/annotations/未设置环境变量时即./coco/annotations/。已存在的文件会被自动跳过prepare_for_tests.sh 的下载逻辑。val2017_100切分也在 builtin.py 的切分表 中预注册方便快速跑通训练与评估流程。四、PanopticFPN 全景分割数据集4.1 期望的目录结构从 COCO 官网下载全景标注后需整理为coco/ annotations/ panoptic_{train,val}2017.json panoptic_{train,val}2017/ # png 标注 panoptic_stuff_{train,val}2017/ # 由脚本生成安装panopticapi工具包pip install githttps://github.com/cocodataset/panopticapi.git随后在det/目录下执行 det/datasets/prepare_panoptic_fpn.pypython datasets/prepare_panoptic_fpn.py4.2 脚本原理从全景标注生成语义标注separate_coco_semantic_from_panoptic函数把 COCO 全景标注转换为 PanopticFPN 所需的语义分割标注prepare_panoptic_fpn.py 的核心实现其映射规则是所有 thing物体类别映射为类别 0所有 stuff背景类别映射为从 1 开始的连续 id未标注像素id 0映射为 255忽略标签。实现上先读取panoptic_{train,val}2017.json用panopticapi.utils.rgb2id把 RGB 编码的 png 还原为 id 矩阵再按segments_info逐段写入输出目录并通过multiprocessing.Pool并行处理加速prepare_panoptic_fpn.py 的逐段写入。脚本最后还会下载panoptic_val2017_100.json并通过符号链接生成panoptic_val2017_100与panoptic_stuff_val2017_100迷你验证集prepare_panoptic_fpn.py 的 100 张验证集逻辑。注册层面builtin.py 同时注册了两种全景变体register_coco_panoptic_separated使用panoptic_stuff_*语义标注的分离式版本供 PanopticFPN 使用register_coco_panoptic标准版本供 Panoptic-DeepLab 等使用可参考 det/projects/Panoptic-DeepLab。五、LVIS 长尾实例分割数据集5.1 期望的目录结构LVIS 复用 COCO 的图片标注文件独立存放coco/ {train,val,test}2017/ lvis/ lvis_v0.5_{train,val}.json lvis_v0.5_image_info_test.json lvis_v1_{train,val}.json lvis_v1_image_info_test{,_challenge}.json安装 lvis-apipip install githttps://github.com/lvis-dataset/lvis-api.git注意 LVIS 图片路径依赖 json 中的coco_url字段加载器从该 URL 的最后两段解析出train2017/val2017/test2017子目录并拼接图片路径lvis.py 的 get_file_name因此 LVIS 图片必须按上列结构放入coco/下。5.2 加载器与元数据det/detectron2/data/datasets/lvis.py 中的load_lvis_json通过lvis.LVIS解析标注处理not_exhaustive_category_ids、neg_category_ids等 LVIS 特有字段并将 1 起始的类别 id 减 1 转为 0 起始lvis.py 的标注解析。内置元数据由get_lvis_instances_meta提供v0.5 有 1230 类、v1 有 1203 类类别名取自官方 json 的同义词首项v1 还附带类别图像计数lvis.py 的元数据。5.3 COCOfied LVIS用 COCO 指标评估 LVIS 模型如需用 COCO 标注训练出的模型在 LVIS 标注上评估运行 det/datasets/prepare_cocofied_lvis.pypython datasets/prepare_cocofied_lvis.py脚本通过 WordNet synset 映射表COCO_SYNSET_CATEGORIESprepare_cocofied_lvis.py 的映射表把 LVIS 类别过滤并重映射为 COCO 类别 id输出lvis_v0.5_{train,val}_cocofied.json。过滤原则是剔除所有不在 COCO 中的类别保留与 COCO 有实例交集的类别并同步改写每张图片的not_exhaustive_category_ids与neg_category_idsprepare_cocofied_lvis.py 的 cocofy_lvis。生成的lvis_v0.5_train_cocofied/lvis_v0.5_val_cocofied名字在 builtin.py 的 LVIS 切分表 中预注册。六、Cityscapes 城市街景数据集6.1 期望的目录结构Cityscapes 同时支撑实例分割、语义分割与全景分割三种任务目录结构为cityscapes/ gtFine/ train/ aachen/ color.png, instanceIds.png, labelIds.png, polygons.json, labelTrainIds.png ... val/ test/ # 以下为生成的 Cityscapes 全景标注 cityscapes_panoptic_train.json cityscapes_panoptic_train/ cityscapes_panoptic_val.json cityscapes_panoptic_val/ cityscapes_panoptic_test.json cityscapes_panoptic_test/ leftImg8bit/ train/ val/ test/安装 cityscapes 官方脚本pip install githttps://github.com/mcordts/cityscapesScripts.git6.2 生成 labelTrainIds 与全景标注生成labelTrainIds.png语义分割训练需要实例分割不需要CITYSCAPES_DATASET/path/to/abovementioned/cityscapes python cityscapesscripts/preparation/createTrainIdLabelImgs.py生成 Cityscapes 全景标注语义与实例分割不需要CITYSCAPES_DATASET/path/to/abovementioned/cityscapes python cityscapesscripts/preparation/createPanopticImgs.py6.3 加载器行为det/detectron2/data/datasets/cityscapes.py 中的load_cityscapes_instances会遍历leftImg8bit/split/city/下的图片按文件名前缀匹配gtFine_instanceIds.png、gtFine_labelIds.png与gtFine_polygons.jsoncityscapes.py 的文件匹配从 json 读取多边形标注用多进程预处理进程数取max(cpu_count / world_size / 2, 4)借助cityscapesscripts.helpers.labels把原始 id 映射为连续 idcityscapes.py 的 id 映射。load_cityscapes_semantic则把labelIds替换为labelTrainIds作为语义标注文件并将ignore_label设为 255cityscapes.py 的语义加载。注册后的数据集名为cityscapes_fine_instance_seg_{train,val,test}与cityscapes_fine_sem_seg_{train,val,test}builtin.py 的 Cityscapes 注册。七、Pascal VOC 检测数据集7.1 期望的目录结构VOC20{07,12}/ Annotations/ ImageSets/ Main/ trainval.txt test.txt # 如使用 train/val 切分还需要 train.txt 或 val.txt JPEGImages/其中ImageSets/Main/*.txt每行是一个不含扩展名的图片文件名如000001Annotations/下是对应的 XML 标注JPEGImages/下是对应的.jpg图片。7.2 加载器与预注册切分det/detectron2/data/datasets/pascal_voc.py 中的load_voc_instances通过numpy.loadtxt读取 split 文件用xml.etree.ElementTree解析每个 XMLbbox 坐标减 1.0 从 1 起始像素索引转为 0 起始坐标类别用CLASS_NAMES元组的索引作为连续 idpascal_voc.py 的解析逻辑。CLASS_NAMES是 VOC 的 20 个标准类别pascal_voc.py 的类别表。builtin.py 预注册了voc_2007_trainval、voc_2007_train、voc_2007_val、voc_2007_test以及 2012 版对应的四个切分评估器统一为pascal_voc。仓库中的相关配置示例见 det/configs/PascalVOC-Detection/faster_rcnn_R_50_C4.yaml。八、ADE20K 场景解析数据集8.1 期望的目录结构ADEChallengeData2016/ annotations/ annotations_detectron2/ images/ objectInfo150.txt其中annotations_detectron2目录由脚本生成原始下载的annotations/与images/内需包含training与validation两个子目录分别对应ade20k_sem_seg_train与ade20k_sem_seg_val切分。8.2 生成 annotations_detectron2运行 det/datasets/prepare_ade20k_sem_seg.pypython datasets/prepare_ade20k_sem_seg.py脚本把annotations/{training,validation}下原始 uint8 语义标注的每个像素值减 1原标签 0ignore变成 255其余类别整体平移 1结果写入annotations_detectron2/{training,validation}prepare_ade20k_sem_seg.py 的转换逻辑。这一转换与 Detectron2 语义分割约定的 0 起始连续标签255 为忽略保持一致。8.3 注册与加载builtin.py 的 register_all_ade20k 为 train / val 两个切分注册图片根目录ADEChallengeData2016/images/{training,validation}图片扩展名.jpg标注根目录ADEChallengeData2016/annotations_detectron2/{training,validation}标注扩展名.png元数据包含 150 个 stuff 类别ADE20K_SEM_SEG_CATEGORIES定义于 det/detectron2/data/datasets/builtin_meta.py、evaluator_typesem_seg、ignore_label255。实际解析由 coco.py 的 load_sem_seg 完成它基于相对路径不含扩展名匹配图片与标注若两侧文件数量不一致会取两者的交集并给出告警日志——这一设计也使得val2017_100迷你标注可以配合完整val2017图片使用。九、数据就绪后的验证与运行数据目录准备完成后可以通过以下方式快速验证注册是否生效# 从 det/ 目录运行确认 COCO 等数据集已注册 python -c import detectron2.data.datasets; from detectron2.data import DatasetCatalog; print(len(DatasetCatalog.list())); print(DatasetCatalog.list()[:10])也可直接以模块方式可视化某个数据集例如 coco.py 的模块入口 支持python -m detectron2.data.datasets.coco /path/to/instances_val2017.json /path/to/val2017 coco_2017_val该命令会加载指定 json并用Visualizer把标注画到图片上输出到coco-data-vis/目录便于人工核对数据准备是否正确。LVIS 加载器也有类似的独立入口lvis.py 的模块入口。随后即可使用仓库配置进行训练与评估例如 Vision Mamba 检测配置位于 det/configs/common/models/mask_rcnn_vimdet.py配合 det/scripts/ft_vim_tiny_vimdet.sh 与 det/scripts/eval_vim_tiny_vimdet.sh 运行。注意脚本中DATASETS.TRAIN/DATASETS.TEST指向的数据集名必须与DETECTRON2_DATASETS根目录下的实际数据一一对应否则DatasetCatalog.get会直接抛出未注册异常。十、常见问题排查要点Dataset xxx is not registered!说明该名字未在 builtin.py 中预注册或注册代码未被 import需要import detectron2.data.datasets触发注册可从异常信息中列出的已注册列表核对拼写。No annotations found in ...load_sem_seg在标注目录为空时直接断言失败请检查annotations_detectron2或panoptic_stuff_*是否已由脚本生成。类别 id 不连续告警load_coco_json对非 1 起始、非连续的类别 id 会自动做映射并打印警告coco.py 的映射告警这是正常行为但建议使用官方 json 以避免歧义。符号链接失效prepare_panoptic_fpn.py生成*_100目录时使用相对符号链接请勿移动coco/目录的层级结构。大文件下载中断prepare_for_tests.sh会跳过已存在的目标文件可安全重跑续传。通过以上步骤即可为 Vision Mamba 项目的检测与分割实验搭建完整、可复现的数据环境。赞分享人工智能计算机视觉深度学习预训练微调【免费下载链接】Vim[ICML 2024] Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Model项目地址https://gitcode.com/gh_mirrors/vim2/Vim点击查看免费下载相关推荐Detectron2 内置数据集完全指南目录结构、环境变量与准备脚本详解Detectron2 内置数据集完全指南目录结构、环境变量与准备脚本详解 导读 Detectron2 为对象检测、实例分割、全景分割Panoptic Seg人工智能计算机视觉深度学习机器学习PDF补丁丁 PDFPatcher30 分钟给 300 页 PDF 批量生成书签、统一页面、解除打印限制PDF补丁丁 PDFPatcher30 分钟给 300 页 PDF 批量生成书签、统一页面、解除打印限制 上周五收到一份 300 页的扫描电子书左侧书签栏是桌面应用文档PaddleGAN 数据准备完全指南数据集目录结构、下载脚本与自制数据集PaddleGAN 数据准备完全指南数据集目录结构、下载脚本与自制数据集 导读 数据集的正确组织与路径配置是 PaddleGAN 中 CycleGAN、Pi人工智能深度学习计算机视觉媒体生成视频处理图像处理上一篇如何快速上手COMET你的终极翻译质量评估指南 下一篇如何高效使用Illustrator脚本库5个自动化工具提升设计效率20倍创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表