news 2026/9/13 8:26:55

如何为 Detectron2 摆放 COCO、LVIS 等内置数据集并设置 DETECTRON2_DATASETS 目录结构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何为 Detectron2 摆放 COCO、LVIS 等内置数据集并设置 DETECTRON2_DATASETS 目录结构

如何为 Detectron2 摆放 COCO、LVIS 等内置数据集并设置 DETECTRON2_DATASETS 目录结构

【免费下载链接】detectron2Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.项目地址: https://gitcode.com/GitHub_Trending/de/detectron2

用 Detectron2 的 model zoo 配置训练、评测,或者运行内置测试脚本之前,数据集文件必须先按库约定的目录结构放好。Detectron2 通过环境变量DETECTRON2_DATASETS找到数据集根目录,再在其中按固定结构查找 COCO、LVIS 等内置数据集;数据本身则通过 DatasetCatalog 读取。本文按 内置数据集教程 说明:如何设置该环境变量、COCO 和 LVIS 分别需要什么目录结构,以及如何用官方提供的 mini COCO 做最小验证。

DETECTRON2_DATASETS 的读取规则

内置数据集假设存在于DETECTRON2_DATASETS指定的目录中,在该目录之下,Detectron2 按如下结构查找数据集:

$DETECTRON2_DATASETS/ coco/ lvis/ cityscapes/ VOC20{07,12}/

设置方式为:

export DETECTRON2_DATASETS=/path/to/datasets

其中/path/to/datasets是文档给出的占位写法,替换成你机器上实际的目录路径。如果该变量不设置,默认值是./datasets,相对于当前工作目录——也就是说,如果你把 detectron2 仓库检出到某处并在仓库根目录下运行,默认会找仓库根目录里的datasets/。这一点在注册代码中可以核对:builtin.py 中_root = os.path.expanduser(os.getenv("DETECTRON2_DATASETS", "datasets"))

两个使用上要注意的点:

  • _root是在 detectron2 模块导入时读取的,所以环境变量必须在启动 Python 进程之前设置,运行中再export不会生效。
  • model zoo 里的配置和模型都基于这些内置数据集,路径摆错时对应的 config 无法加载数据。

摆放 COCO 数据集

COCO 实例检测 / 关键点检测期望的目录结构如下(以 2017 为例):

coco/ annotations/ instances_{train,val}2017.json person_keypoints_{train,val}2017.json {train,val}2017/ # image files that are mentioned in the corresponding json

{train,val}是大括号简写,表示实际是两个文件、两个目录:instances_train2017.jsoninstances_val2017.jsontrain2017/val2017/{train,val}2017/目录下存放对应 json 中提到的图片文件。person_keypoints_*.json只有做关键点任务才需要。

文档明确说明:2014 版本的数据集同样可以使用,对应文件名把2017换成2014即可。

数据集文件(标注 json 与图片包)从官方 COCO 渠道获取后,按上述结构解压到$DETECTRON2_DATASETS/coco/下。

摆放 LVIS 数据集

LVIS 实例分割的目录结构(见 builtin_datasets.md):

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 的图片根目录同样是coco/:LVIS 的 train/val 标注复用 COCO 2017 的train2017/val2017/图片,如果上面已经摆放了 COCO 2017,这部分可以直接复用;test 切分还需要test2017/图片目录。lvis/目录下只放标注 json。

使用 LVIS 时文档要求安装 lvis-api(教程原文给出的命令):

pip install git+https://github.com/lvis-dataset/lvis-api.git

可选分支:如果你要用 LVIS 标注去评测在 COCO 上训练好的模型,需要另外运行 prepare_cocofied_lvis.py 生成 "cocofied" LVIS 标注:

python datasets/prepare_cocofied_lvis.py

最小验证:用官方 mini COCO 检查摆放是否正确

不需要下载完整 COCO 就能验证目录结构是否被 Detectron2 正确识别。内置测试使用的 prepare_for_tests.sh 会下载 mini 版 COCO(val2017_100,只含 100 张图),具体行为:

  • 目标根目录取DETECTRON2_DATASETS,若未设置则写入脚本所在目录(仓库的datasets/);
  • 创建coco/annotations/,下载instances_val2017_100.jsonperson_keypoints_val2017_100.json
  • 下载val2017_100.tgz并解压出coco/val2017/图片目录,随后删除 tgz;
  • 已存在且非空的文件会跳过,脚本可重复执行。

在仓库根目录执行:

./datasets/prepare_for_tests.sh

注意:不设置DETECTRON2_DATASETS时,mini 数据落在仓库的datasets/coco/下;已设置时会落在你指定的目录下的coco/,与库的查找逻辑一致。

下载完成后,用文档说明的访问方式(DatasetCatalog)验证数据能否被读出来。coco_2017_val_100是库预注册的数据集名,指向上面下载的 json:

from detectron2.data import DatasetCatalog data = DatasetCatalog.get("coco_2017_val_100") print(len(data)) # 100 print(data[0])

能返回 100 条记录、每条为一幅图的标注字典(list of dict),说明DETECTRON2_DATASETScoco/子目录与文件名都对上了;若文件不在期望位置,这次读取会失败。若还要做端到端确认,dev/下的run_instant_tests.sh/run_inference_tests.sh会在若干配置上跑训练/推理的少量迭代,但 dev/README.md 说明这些测试需要 2 块 GPU,作为可选的完整验证路径。

其他内置数据集的目录结构

如果你的任务是全景分割、VOC 或语义分割,同一规则下各数据集期望的结构(均在$DETECTRON2_DATASETS/之下):

coco/ annotations/ panoptic_{train,val}2017.json panoptic_{train,val}2017/ # png annotations panoptic_stuff_{train,val}2017/ # 由脚本生成

COCO panoptic 需要安装 panopticapi 后运行 prepare_panoptic_fpn.py 生成panoptic_stuff_*语义标注目录:

pip install git+https://github.com/cocodataset/panopticapi.git python datasets/prepare_panoptic_fpn.py
VOC20{07,12}/ Annotations/ ImageSets/ Main/ trainval.txt test.txt # train.txt or val.txt, if you use these splits JPEGImages/
ADEChallengeData2016/ annotations/ annotations_detectron2/ # 由 python datasets/prepare_ade20k_sem_seg.py 生成 images/ objectInfo150.txt

cityscapes 的结构(gtFine/leftImg8bit/及生成的 panoptic 标注)较长,直接参照 builtin_datasets.md 中的原始结构说明;生成labelTrainIds.png和 panoptic 标注分别需要 cityscapesScripts 中的createTrainIdLabelImgs.pycreatePanopticImgs.py

限制与下一步

  • 目录名、文件名必须与库的约定逐字一致(例如annotations/而非anno/);注册发生在导入时,环境变量要在启动进程前设好。
  • 文档中列出的结构是"库查找时的期望",不设置DETECTRON2_DATASETS时相对当前工作目录解析,换目录运行同一脚本时注意默认值随之变化。
  • 数据集摆放并验证通过后,即可用 model zoo 中基于这些内置数据集的 config 启动训练或评测,相关配置见 configs/ 与 MODEL_ZOO.md。

【免费下载链接】detectron2Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.项目地址: https://gitcode.com/GitHub_Trending/de/detectron2

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 8:26:54

DDCT与PCA图像融合:从Matlab实现到参数调优

简介:基于方向离散余弦变换(DCT)与主成分分析(PCA)的图像融合Matlab代码,面向计算机、电子信息工程、数学等专业学生,可作为课程设计、期末大作业或毕业设计的核心参考。压缩包内共13个文件&…

作者头像 李华
网站建设 2026/9/13 8:25:33

MediaMTX 绝对时间戳(Absolute Timestamp)路由机制与配置指南

MediaMTX 绝对时间戳(Absolute Timestamp)路由机制与配置指南 【免费下载链接】mediamtx Ready-to-use Media-over-QUIC / SRT / WebRTC / RTSP / RTMP / LL-HLS / MPEG-TS / RTP live media server and media proxy that allows to read, publish, prox…

作者头像 李华
网站建设 2026/9/13 8:21:46

STM32嵌入式开发:VS Code + CMake + ARM GCC工业级配置指南

1. 为什么现在越来越多STM32工程师放弃Keil/IAR,转向VS Code?我带过的三个嵌入式团队里,有两位资深工程师在2023年主动把主力开发环境从Keil MDK迁到了VS Code。不是因为Keil不好——它稳定、成熟、调试器集成度高,尤其对新手友好…

作者头像 李华
网站建设 2026/9/13 8:21:02

从走A原理到反作弊:自动走A脚本为何难逃检测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 8:20:56

NPC三电平逆变器SVPWM调制技术及MATLAB仿真

1. 项目概述:二极管箝位型NPC三电平逆变器的SVPWM调制仿真 在电力电子领域,多电平逆变器技术因其出色的性能表现而备受关注。其中,二极管箝位型(Neutral Point Clamped,NPC)三电平逆变器凭借其结构简单、输…

作者头像 李华