行业资讯

从COCO到三数据集融合:如何用UniDetector快速完成多数据集物体检测训练(Objects365+OpenImages+COCO)

发布时间:2026/8/22 13:18:51
从COCO到三数据集融合:如何用UniDetector快速完成多数据集物体检测训练(Objects365+OpenImages+COCO) 从COCO到三数据集融合如何用UniDetector快速完成多数据集物体检测训练Objects365OpenImagesCOCO【免费下载链接】UniDetectorCode release for our CVPR 2023 paper Detecting Everything in the Open World: Towards Universal Object Detection.项目地址: https://gitcode.com/gh_mirrors/un/UniDetectorUniDetector是 CVPR 2023 论文《Detecting Everything in the Open World》的开源实现一个面向开放世界通用物体检测的训练框架。本文带你完成从 COCO 单数据集到Objects365 OpenImages COCO 三数据集融合的完整训练实践掌握多数据集物体检测的配置技巧与一键启动方法。为什么需要多数据集物体检测传统检测器只在 COCO 的 80 类上训练遇到手风琴火烈鸟这类类别就束手无策。UniDetector 的核心思路是异质标签空间融合COCO、Objects365、OpenImages 各有自己的类别体系共享类别如 person、car、chair合并学习独有类别各自保留CLIP 语言嵌入替代固定分类层用预计算的 CLIP 文本嵌入存放在clip_embeddings/目录下的 4 个 .npy 文件作为零分类器模型不再被训练类别数锁死从而泛化到开放世界基于 mmdetection v2.18.0 构建Faster R-CNN 架构 CLIPResNet 骨干网络上手成本低。环境准备3步完成安装克隆代码仓库git clone https://gitcode.com/gh_mirrors/un/UniDetector按照 mmdetection v2.18.0 的官方方式安装依赖参考 README.md额外安装CLIPOpenAI并准备 RegionCLIP 预训练权重regionclip_pretrained-cc_rn50_mmdet.pth。 项目已提供预计算的 CLIP 语言嵌入如coco_clip_acname_rn50_manyprompt.npy无需重新计算也可运行scripts/dump_clip_features_manyprompt.py用多模板提示词many-prompt自己生成。多数据集物体检测的数据准备步骤所有数据统一放在data/目录下详细目录结构见 docs/datasets.md。三大数据集的处理要点数据集目录特殊处理COCOdata/coco/直接使用80 类基准Objects365 v2data/objects365/用scripts/extract_random_images.py --percent 3.5抽取 3.5% 子集OpenImagesdata/openimages/用scripts/extract_random_images.py --percent 4.5抽取 4.5% 子集两个辅助脚本是多数据集训练的关键一步extract_random_images.py大集合只需下载少量图片即可训练避免全量下载 OpenImages 的 190 万张图get_cat_info.py统计抽取子集中各类别的出现频率生成*_cat_info.json文件。该文件用于训练时的类别频率加权防止某些类别在子集中样本过少而学不好。# Objects365抽子集 统计类别信息 python scripts/extract_random_images.py --seed 1 --percent 3.5 --ann data/objects365/annotations/zhiyuan_objv2_train.json python scripts/get_cat_info.py --seed 1 --ann data/objects365/annotations/zhiyuan_objv2_train.13.5.json所有数据集共享同一条数据处理流水线读图 → 加载标注 → Resize → 翻转 → 归一化 → 填充 → 打包。核心配置对比COCO单数据集 vs 三数据集融合配置都继承configs/_base_/default_runtime.py从单数据集升级到三数据集只需改 3 处关键设置1️⃣ RoI 分类头换成分区式CLIP 头单数据集configs/singledataset/clip_end2end_faster_rcnn_r50_c4_1x_coco.pyBBoxHeadCLIPnum_classes80zeroshot_path指向单个 COCO 嵌入文件三数据集configs/multidataset/clip_end2end_faster_rcnn_r50_c4_1x_oidobj365coco.pyBBoxHeadCLIPPartitionednum_classes500zeroshot_path变成列表按数据集顺序列出 3 个 .npy 嵌入文件同时用cat_freq_path挂接 Objects365 和 OpenImages 的类别频率文件。源码实现位于 bbox_head_clip_partitioned.py它对不同数据集的类别做分区管理是开放世界能力的核心。2️⃣ 训练数据用 ConcatDataset 拼接traindict( typeConcatDataset, datasets[ dict(ann_file.../instances_valminusminival2014.json, dataset_id0), # COCO dict(ann_file.../zhiyuan_objv2_train.13.5.json, dataset_id1), # Objects365 dict(ann_file.../oid_challenge_2019_train_bbox.14.5.json, dataset_id2), # OpenImages ])dataset_id与zeroshot_path、cat_freq_path的列表顺序一一对应这是最容易配错的地方。3️⃣ 验证集保持 COCO无论训练多少数据集都在 COCO val2017 上评测evaluation dict(interval1, metricbbox)保证结果可比。一键启动三数据集融合训练命令训练方式分两种README 中均有完整说明端到端训练推荐新手bash tools/dist_train.sh configs/multidataset/clip_end2end_faster_rcnn_r50_c4_1x_oidobj365coco.py 8 --cfg-options load_fromregionclip_pretrained-cc_rn50_mmdet.pth解耦训练两阶段CLN 模型第一阶段训练区域建议RPNconfigs/multidataset/clip_decouple_faster_rcnn_r50_c4_1x_oidobj365coco_1ststage.pytools/dist_test.sh导出rp_train.pkl/rp_val.pkl提案文件第二阶段训练 RoI 分类clip_decouple_faster_rcnn_r50_c4_1x_oidobj365coco_2ndstage.py。若只想做COCO Objects365 双数据集换用clip_end2end_faster_rcnn_r50_c4_1x_obj365coco.pynum_classes365两个嵌入文件即可流程完全一致。训练完成后可加载权重跑 demo 脚本如demo/image_demo.py直观看效果——模型能检测出训练集之外的类别常见问题速答Q一定要下载完整 OpenImages 吗A不用。官方明确提示只需抽取子集4.5% / 3.5%这也是配置中14.5、13.5文件名后缀的由来。Qzeroshot_path顺序和dataset_id不一致会怎样A类别嵌入错位训练结果严重异常务必保持列表顺序一致。Q想加第四个数据集怎么办A新增一个ConcatDataset条目、追加一个 CLIP 嵌入 .npy 和对应cat_freq文件、把num_classes改为新类别总数即可框架天然支持。Q开放世界推理怎么评A用configs/inference/下的 LVIS v0.5 配置推理还可加概率校准_withcalibration.py进一步提升开放集置信度。小结UniDetector 用ConcatDataset 拼接 分区式 CLIP 头 类别频率加权三板斧让多数据集物体检测训练变成改配置、跑命令两件事。从 COCO 到三数据集融合你只需替换configs/multidataset/下的配置文件——这正是它把开放世界检测门槛降到普通开发者可复现水平的关键。【免费下载链接】UniDetectorCode release for our CVPR 2023 paper Detecting Everything in the Open World: Towards Universal Object Detection.项目地址: https://gitcode.com/gh_mirrors/un/UniDetector创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考