You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:06:03