如何从COCO数据集标注文件中提取指定3万张训练图片对应的标注
COCO子集标注提取方案
前置依赖
仅需要Python自带的json和os库,无需额外安装COCO API即可实现,完全兼容原生COCO标注格式。
操作步骤
- 第一步:提取存放3万张图片的文件夹内的所有文件名,存入集合用于后续快速匹配
- 第二步:读取原始
instances_train2017.json的全量标注内容 - 第三步:筛选出文件名匹配的图片条目,同时记录这些图片的唯一ID
- 第四步:根据保留的图片ID,筛选出对应的标注条目
- 第五步:拼接新的标注结构并导出为独立的json文件
可直接运行的实现代码
import json import os # 配置参数,替换为你自己的本地路径 IMG_FOLDER = "/path/to/your/30k_subset_images" # 存放3万张图片的文件夹路径 ORIGIN_JSON_PATH = "/path/to/instances_train2017.json" # 原始全量标注文件路径 OUT_JSON_PATH = "/path/to/instances_train2017_30k.json" # 输出的子集标注文件路径 # 1. 提取所有子集图片的文件名存入集合 subset_img_names = set(os.listdir(IMG_FOLDER)) # 可选:如果文件夹内有非图片文件,可加后缀过滤 # subset_img_names = set([f for f in os.listdir(IMG_FOLDER) if f.endswith('.jpg')]) # 2. 读取原始全量标注 with open(ORIGIN_JSON_PATH, 'r', encoding='utf-8') as f: origin_coco = json.load(f) # 3. 筛选匹配的图片条目,记录保留的图片ID keep_image_ids = set() filtered_images = [] for img_item in origin_coco['images']: if img_item['file_name'] in subset_img_names: filtered_images.append(img_item) keep_image_ids.add(img_item['id']) # 4. 筛选对应标注条目 filtered_annotations = [] for ann_item in origin_coco['annotations']: if ann_item['image_id'] in keep_image_ids: filtered_annotations.append(ann_item) # 5. 构建新的COCO格式标注并导出 subset_coco = { 'info': origin_coco['info'], 'licenses': origin_coco['licenses'], 'categories': origin_coco['categories'], 'images': filtered_images, 'annotations': filtered_annotations } with open(OUT_JSON_PATH, 'w', encoding='utf-8') as f: json.dump(subset_coco, f)
注意事项
- 原始标注文件体积较大,全程运行时间约10-30秒,取决于本地硬盘读写速度
- 生成的子集标注完全兼容所有支持COCO格式的训练框架,无需额外修改适配
内容的提问来源于stack exchange,提问作者Capri
相关产品推荐
相关产品推荐

