如何为 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.json与instances_val2017.json,train2017/与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.json和person_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_DATASETS、coco/子目录与文件名都对上了;若文件不在期望位置,这次读取会失败。若还要做端到端确认,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.pyVOC20{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.txtcityscapes 的结构(gtFine/、leftImg8bit/及生成的 panoptic 标注)较长,直接参照 builtin_datasets.md 中的原始结构说明;生成labelTrainIds.png和 panoptic 标注分别需要 cityscapesScripts 中的createTrainIdLabelImgs.py与createPanopticImgs.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),仅供参考