UniDetector代码架构全景图:基于mmdetection 2.18扩展的核心模块完全地图
【免费下载链接】UniDetectorCode release for our CVPR 2023 paper "Detecting Everything in the Open World: Towards Universal Object Detection".项目地址: https://gitcode.com/gh_mirrors/un/UniDetector
UniDetector 是一个基于 mmdetection 2.18 构建的开放世界通用目标检测框架,核心创新是解耦训练策略与 CLIP 语言嵌入,让模型能够检测开放世界中的任意物体类别。🌍 本文将带你用一张"地图"快速看懂它的代码架构,新手也能轻松上手。
一、架构总览:两阶段解耦设计的核心思路
UniDetector 最大的特点是解耦训练(Decoupled Training)——把"找物体在哪"和"物体是什么"拆成两个独立阶段:
| 阶段 | 任务 | 是否依赖类别 |
|---|---|---|
| 第一阶段 | 区域提议(CLN 模型) | ❌ 与类别无关,专注定位 |
| 第二阶段 | RoI 分类 + 回归 | ✅ 通过 CLIP 文本嵌入实现零样本识别 |
这种设计的妙处在于:第一阶段不需要"学会分类"就能泛化到任意新类别,而第二阶段借助 CLIP 的图文对齐能力,实现免训练识别新类别。
二、骨干网络模块:CLIP 视觉编码器全面移植
位置:mmdet/models/backbones/clipresnet.py
这个文件把 CLIP 的完整视觉编码器移植进了 mmdetection 的模块化体系,注册了 6 个核心骨干组件:
CLIPResNet(第 108 行):CLIP 版 ResNet,用于第二阶段与端到端训练CLIPResNetWithAttention(第 206 行):带注意力池化的变体CLIPVisionTransformer(第 444 行):ViT 视觉主干CLIPTextEncoder/CLIPTextContextEncoder(第 560、630 行):文本编码组件,为语言嵌入做准备ContextDecoder(第 748 行):视觉-文本上下文解码模块
三、第一阶段模块:开放世界区域提议(CLN)
位置:mmdet/models/dense_heads/oln_rpn_head.py
OlnRPNHead是 CLN 模型的核心,参考了 OLN 论文的三大技巧:
- 每位置单锚点(而非 3 个),泛化能力更强
- 用TBLR 距离回归替代传统框回归
- 用 Centerness 评估定位质量,避免分类过拟合前景
配套的OlnRoIHead(mmdet/models/roi_heads/oln_roi_head.py)进一步输出"定位质量分",与Shared2FCBBoxScoreHead协作完成提议打分。
四、第二阶段模块:CLIP RoI 零样本分类
位置:mmdet/models/roi_heads/bbox_heads/bbox_head_clip.py
BBoxHeadCLIP是零样本识别的关键:
- 加载
zeroshot_path指向的CLIP 文本嵌入(预计算语言特征) - RoI 特征与类别文本嵌入做余弦相似度打分,天然支持任意类别
with_cls=False表示训练时不依赖固定类别表,推理时可换成任何数据集的语言嵌入(如 LVIS 1200 类)
此外还有BBoxHeadCLIPPartitioned(bbox_head_clip_partitioned.py)作为分区分类变体。
五、配置文件地图:三种训练推理模式
位置:configs/
| 目录 | 用途 | 代表配置 |
|---|---|---|
configs/singledataset/ | 单数据集训练 | clip_end2end_faster_rcnn_r50_c4_1x_coco.py(端到端)、clip_decouple_faster_rcnn_r50_c4_1x_coco_1ststage.py/2ndstage.py(解耦) |
configs/multidataset/ | 多数据集混合训练(COCO+Objects365+OpenImages) | clip_decouple_faster_rcnn_r50_c4_1x_oidobjcoco_2ndstage.py |
configs/inference/ | 开放世界推理(LVIS v0.5) | clip_decouple_faster_rcnn_r50_c4_1x_lvis_v0.5_2ndstage_withcalibration.py(含概率校准) |
配置文件采用 mmdetection 标准的_base_继承机制(如configs/_base_/default_runtime.py),改参数无需碰代码。
六、资源文件与上手路径
- 语言嵌入:clip_embeddings/ 已预计算 4 个数据集(COCO、LVIS、Objects365、OpenImages)的 RN50 多提示文本特征,也可用 scripts/dump_clip_features_manyprompt.py 自行生成
- 演示脚本:demo/image_demo.py 与 demo/video_demo.py 开箱即用
- 文档:数据集准备见 docs/datasets.md
七、总结:一分钟记住这张架构地图
- 骨干层:
clipresnet.py提供 CLIP 视觉/文本全组件 - 提议层:
OlnRPNHead+OlnRoIHead组成与类别无关的 CLN 定位器 - 分类层:
BBoxHeadCLIP用语言嵌入实现零样本识别 - 配置层:configs 三个目录覆盖端到端、解耦、开放世界推理全场景
掌握这张地图后,你可以直接定位感兴趣的模块深入阅读源码,快速理解 UniDetector 如何做到"检测开放世界的一切"。
【免费下载链接】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),仅供参考