Detectron2 Projects 生态全景:以 detectron2 为库构建可维护的视觉研究项目
2026/9/10 23:08:55 网站建设 项目流程

Detectron2 Projects 生态全景:以 detectron2 为库构建可维护的视觉研究项目

【免费下载链接】detectron2Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.项目地址: https://gitcode.com/GitHub_Trending/de/detectron2

本指南围绕仓库中的 projects/README.md 展开,系统梳理 Detectron2 官方仓库内集成的十余个研究项目(DensePose、TridentNet、TensorMask、PointRend、Panoptic-DeepLab、PointSup、Rethinking-BatchNorm、ViTDet、MViTv2 等)以及社区外部项目,并结合各子项目源码与配置文件,讲解"把 detectron2 当作库来复用、搭建可维护研究项目"的完整范式。读完本文,你将掌握每个内置项目的任务定位、训练/评估命令、关键配置与预训练模型入口,并能够照此模式在自己仓库中组织 detectron2 之上的新项目。

projects 目录的定位:把 detectron2 当"库"而不是"框架"

projects/README.md 开篇即阐明了这一目录存在的意义:这些项目是"built on detectron2"的示例,展示了如何将 detectron2 作为库(library)使用,从而使你的项目更易于维护(more maintainable)

这与 Detectron2 的整体设计哲学一致:仓库根目录 README.md 明确指出 detectron2 "Used as a library to support building research projects on top of it"。也就是说,detectron2 提供的是detectron2.engine(训练循环)、detectron2.modeling(骨干网络、R-CNN / RetinaNet 等元架构)、detectron2.config(配置系统)等基础设施,而projects/之下的每个子目录,都是在这套基础设施之上"只写增量代码"的活教材——它们各自拥有独立的train_net.pyconfigs/与算法模块,却几乎不修改 detectron2 核心代码。

README 同时给出一个重要提醒:Facebook 的这些项目属于研究性质(research projects),其支持程度与稳定性可能不及 detectron2 本身,使用时需自行评估。

仓库内 Facebook 研究项目全景

projects/README.md 中列出的、且代码完整存放在本仓库内的项目如下(其各自详尽的 README 均可在projects/下找到):

项目主题子 README典型任务
DensePose稠密人体/动物姿态估计projects/DensePose/README.mdDensePose R-CNN、可视化工具
TridentNet尺度感知目标检测projects/TridentNet/README.md多分支共享参数、TridentNet-Fast
TensorMask稠密滑窗实例分割projects/TensorMask/README.md无 ROI 的 dense segmentation
PointRend把分割当作渲染projects/PointRend/README.md实例分割 + 语义分割点采样细化
Panoptic-DeepLabBottom-up 全景分割projects/Panoptic-DeepLab/README.md简单、强、快的全景分割基线
PointSup点级监督实例分割projects/PointSup/README.md仅用点标注训练 Mask R-CNN
Rethinking-BatchNorm重思考 BatchNorm 中的 batchprojects/Rethinking-BatchNorm/README.mdBN/SyncBN 变体复现实验
ViTDet普通 ViT 骨干做检测projects/ViTDet/README.mdViT/MViTv2/Swin 骨干检测
MViTv2多尺度视觉 Transformerprojects/MViTv2/README.mdCascade Mask R-CNN + MViTv2 骨干

此外,projects/README.md 还提及了以外部链接形式存在的 Facebook 项目:Mesh R-CNN、MoCo(无监督表示学习的检测部分)、DETR(d2 目录)、D2Go(面向移动端训练与部署的端到端生产系统)、Unbiased Teacher(半监督目标检测)与 MaskFormer(语义分割),这些项目的实现不在本仓库内。

下面逐个深入各内置项目,给出其训练/评估命令、配置与预训练模型入口。

DensePose:稠密人体姿态估计

DensePose README 说明该项目旨在学习图像像素与可形变物体(如人体、动物)3D 几何之间的稠密对应关系,仓库内提供了 DensePose R-CNN 的训练、评估代码,以及可视化标注与结果的多种工具。项目内部存在两大范式:

  • Chart-based(IUV):把 3D 网格切分为多个 chart,模型对每个像素估计 chart 索引I与局部坐标(U, V),详见 projects/DensePose/doc/DENSEPOSE_IUV.md;
  • Continuous Surface Embeddings(CSE):同时学习网格顶点与图像像素的描述子,通过嵌入对应关系推导每个像素在 3D 模型上的位置,详见 projects/DensePose/doc/DENSEPOSE_CSE.md。

从目录结构看,DensePose 是"以 detectron2 为库"最典型的大项目:它在projects/DensePose/densepose/下自建了modeling/(含 cse、losses、predictors、roi_heads 等子模块)、data/evaluation/engine/(自定义 trainer),并提供了 train_net.py、apply_net.py(将模型应用到图片/视频并可视化)、query_db.py(查询标注数据库)三个入口。其配置集中在 projects/DensePose/configs/ 下,覆盖 HRNet、CSE、Evolution 等多个系列。预训练模型与性能评估分别记录在 DENSEPOSE_IUV 与 DENSEPOSE_CSE 文档的 Model Zoo 小节中,引用时请参照这两份文档中的 BibTeX 条目。

TridentNet:尺度感知目标检测

TridentNet README 指出本项目实现了TridentNet-Fast:通过平行多分支结构生成尺度特定(scale-specific)的特征图,各分支共享相同的变换参数、仅感受野不同;TridentNet-Fast 是快速近似版本,在不增加额外参数与计算量的前提下带来显著提升。

训练命令(在仓库根目录下执行等价路径):

python projects/TridentNet/train_net.py --config-file projects/TridentNet/configs/tridentnet_fast_R_50_C4_1x.yaml --num-gpus 8

评估命令:

python projects/TridentNet/train_net.py --config-file projects/TridentNet/configs/tridentnet_fast_R_50_C4_1x.yaml --eval-only MODEL.WEIGHTS model.pth

配置文件位于 projects/TridentNet/configs/(Base-TridentNet-Fast-C4.yaml及 1x/3x 调度、R50/R101 变体),核心实现位于 projects/TridentNet/tridentnet/ 下的trident_backbone.pytrident_conv.pytrident_rcnn.pytrident_rpn.py。README 给出了 MS-COCO 上的对比结果:R50-C4 下 Faster R-CNN 1x 的 AP 为 35.7,TridentFast 1x 为 38.0;3x 下分别为 38.4 与 40.6;R101-C4 3x 下 Faster 为 41.1、TridentFast 为 43.6,各变体均可下载 model 与 metrics 文件。

TensorMask:稠密滑窗实例分割

TensorMask README 将其定位为稠密滑窗实例分割框架,不依赖 ROI 操作,在质量上首次接近成熟的 Mask R-CNN,为实例分割研究提供了概念上互补的方向。由于涉及自定义算子,需要额外安装:

pip install -e /path/to/detectron2/projects/TensorMask

该命令会编译 TensorMask 专用算子swap_align2nat(其实现与测试分别在 projects/TensorMask/tensormask/layers/ 与 projects/TensorMask/tests/test_swap_align2nat.py 中)。随后训练 BiPyramid 模型(R50 骨干、1x 调度、8 GPU):

python projects/TensorMask/train_net.py --config-file projects/TensorMask/configs/tensormask_R_50_FPN_1x.yaml --num-gpus 8

评估(6x 调度 + 尺度增强):

python projects/TensorMask/train_net.py --config-file projects/TensorMask/configs/tensormask_R_50_FPN_6x.yaml --eval-only MODEL.WEIGHTS /path/to/model_checkpoint

预训练模型表:R50 1x 的 box AP 为 37.6、mask AP 为 32.4;R50 6x 的 box AP 为 41.4、mask AP 为 35.8。基础配置见 projects/TensorMask/configs/Base-TensorMask.yaml。

PointRend:把分割当作渲染

PointRend README 的核心思想是将图像分割视为渲染过程:在现有 SOTA 模型基础上,仅在关键点位置做细分预测,可灵活应用于实例分割与语义分割两类任务。其官方 Colab 教程展示了点采样各阶段的示例与可视化。

训练(8 GPU):

python projects/PointRend/train_net.py --config-file projects/PointRend/configs/InstanceSegmentation/pointrend_rcnn_R_50_FPN_1x_coco.yaml --num-gpus 8

评估:

python projects/PointRend/train_net.py --config-file projects/PointRend/configs/InstanceSegmentation/pointrend_rcnn_R_50_FPN_1x_coco.yaml --eval-only MODEL.WEIGHTS /path/to/model_checkpoint

实例分割(COCO)模型表要点:PointRend + R50-FPN 1x 的输出分辨率为 224×224,mask AP 36.2(AP* 39.7);3x 为 38.3(AP* 41.6);R101-FPN 3x 为 40.1(43.8);X101-FPN 3x 为 41.1(44.7)。其中AP是使用质量更高的 LVIS 标注评估得到的 COCO mask AP*:需运行python detectron2/datasets/prepare_cocofied_lvis.py(本仓库对应 datasets/prepare_cocofied_lvis.py)准备真值文件,且由于 LVIS 标注不穷尽,应使用lvis-api而非cocoapi进行评估。语义分割方面,Cityscapes 上的 SemanticFPN + PointRend(R101-FPN,1024×2048)mIoU 为 78.9。实现代码位于 projects/PointRend/point_rend/(point_head.pypoint_features.pyroi_heads.pysemantic_seg.py等)。

Panoptic-DeepLab:Bottom-up 全景分割基线

Panoptic-DeepLab README 将其描述为简单、强、快的 bottom-up 全景分割基线。除训练/评估外,它还提供了一个独特的性能评测入口:在评估命令后追加MODEL.PANOPTIC_DEEPLAB.BENCHMARK_NETWORK_SPEED True即可跳过后处理、只评测网络本身速度

python projects/Panoptic-DeepLab/train_net.py --config-file projects/Panoptic-DeepLab/configs/Cityscapes-PanopticSegmentation/panoptic_deeplab_R_52_os16_mg124_poly_90k_bs32_crop_512_1024_dsconv.yaml --eval-only MODEL.WEIGHTS /path/to/model_checkpoint MODEL.PANOPTIC_DEEPLAB.BENCHMARK_NETWORK_SPEED True

README 中的结果与说明要点:

  • Cityscapes:R52-DC5 在 1024×2048 输出分辨率下 PQ 60.3 / SQ 81.5 / RQ 72.9 / mIoU 78.2 / AP 33.2;DSConv 版本 PQ 60.3、mIoU 78.7;
  • COCO:R52-DC5 DSConv(640×640)PQ 35.5,与原始论文的 35.1 基本一致;
  • 术语约定:R52指将 ResNet-50 首层 7×7 卷积替换为 3 个 3×3 卷积的变体;DC5指在res5中使用空洞卷积;DSConv指在 ASPP 与解码器中使用 DepthwiseSeparableConv2d(与原始论文实现一致);
  • 该实现不含面向部署优化的后处理代码,后处理耗时与网络本身相当,对比速度请参照原论文;
  • 训练采用 512×1024 的小裁剪尺寸(原论文为 1025×2049),README 注明改用 1024×2048 裁剪可再提升约 1.5 PQ 但会损失约 3 AP。

配置文件位于 projects/Panoptic-DeepLab/configs/,算法实现位于 projects/Panoptic-DeepLab/panoptic_deeplab/(panoptic_seg.pypost_processing.pytarget_generator.py等)。

PointSup:点级监督实例分割

PointSup README 展示了一个极具实用价值的低成本方案:仅用点级标注训练实例分割模型。数据准备分两步:

  1. 按 Detectron2 官方说明准备 COCO 数据集,并设置DETECTRON2_DATASETS环境变量指向数据集位置;
  2. 为 COCO 生成 10 点标注:
    python projects/PointSup/tools/prepare_coco_point_annotations_without_masks.py 10

训练与评估命令与 PointRend 完全同构:

python projects/PointSup/train_net.py --config-file projects/PointSup/configs/mask_rcnn_R_50_FPN_3x_point_sup_point_aug_coco.yaml --num-gpus 8 python projects/PointSup/train_net.py --config-file projects/PointSup/configs/mask_rcnn_R_50_FPN_3x_point_sup_point_aug_coco.yaml --eval-only MODEL.WEIGHTS /path/to/model_checkpoint

projects/PointSup/configs/ 下共三个配置:普通点监督、点监督 + 点增强(point aug)、以及 Implicit PointRend 点监督 + 点增强;实现代码位于 projects/PointSup/point_sup/(含point_utils.pydetection_utils.pymask_head.py等)。

Rethinking-BatchNorm:重思考 BatchNorm 中的 batch

Rethinking-BatchNorm README 提供复现论文Rethinking "Batch" in BatchNorm检测实验的配置,所有配置均使用 LazyConfig 系统训练

python tools/lazyconfig_train_net.py --config-file projects/Rethinking-BatchNorm/configs/X.py --num-gpus 8

各配置与论文图表的对应关系如下:

  • Mask R-CNN:mask_rcnn_BNhead.py 与 mask_rcnn_BNhead_batch_stats.py 对应论文 Table 3;mask_rcnn_BNhead_shuffle.py 在 head 输入上做跨 GPU 打乱,对应 Figure 9 与 Table 6;mask_rcnn_SyncBNhead.py 在 head 中使用跨 GPU SyncBatchNorm,对应 Table 6;
  • RetinaNet:retinanet_SyncBNhead.py 在 head 中用 SyncBN(对应 Table 5 第 3 行);retinanet_SyncBNhead_SharedTraining.py 将全部 5 个特征层一起归一化(对应 Table 5 第 1 行);
  • 域特定统计重算:retinanet-eval-domain-specific.py 在重算域特定统计后评估 checkpoint,用法为./retinanet-eval-domain-specific.py checkpoint.pth,可复现 Table 5 第 4 行与第 2 行。

ViTDet 与 MViTv2:Vision Transformer 骨干

ViTDet README 提供了 ViTDet 论文所描述的普通 ViT 骨干(以及 MViTv2、Swin 骨干)在 Detectron2 中的配置与模型。全部配置同样基于 LazyConfig:

python tools/lazyconfig_train_net.py --config-file projects/ViTDet/configs/COCO/mask_rcnn_vitdet_b_100ep.py

评估时在命令行覆盖train.init_checkpoint

python tools/lazyconfig_train_net.py --config-file projects/ViTDet/configs/COCO/mask_rcnn_vitdet_b_100ep.py --eval-only train.init_checkpoint=/path/to/model_checkpoint

默认按 64 GPU、batch size 64 训练。README 给出的 COCO Mask R-CNN 结果(box/mask AP):ViT-B 为 51.6/45.9,ViT-L 为 55.5/49.2,ViT-H 为 56.7/50.2;Cascade Mask R-CNN 下 ViT-L 达 57.6/50.0。LVIS 上同样提供 ViT-B/L/H 与 Swin-B/L、MViTv2-B/L/H 的模型,README 特别注明:这些 LVIS 模型使用 1024 分辨率(论文为 1280)与标准 NMS(非 soft NMS),因此指标略低;LVIS 评估方差高于 COCO(ViT-B 五次重复训练 box AP 标准差 0.30% vs COCO 的 0.10%)。骨干网络实现在 detectron2/modeling/backbone/(vit.pymvit.pyswin.py)。MViTv2 的独立项目页见 projects/MViTv2/README.md,其配置覆盖cascade_mask_rcnn_mvitv2_*(t/s/b/h、in21k、lsj 等变体)。

从源码看"以 detectron2 为库"的组织范式

对比以上项目可以提炼出 detectron2 官方推崇的研究项目组织模式,这正是 projects/README.md "more maintainable" 的具体体现:

  1. 独立的入口脚本:每个项目自带train_net.py,内部复用detectron2.engine.defaultsDefaultTrainer/DefaultPredictor等基础设施;基于 LazyConfig 的项目(如 ViTDet、Rethinking-BatchNorm)则复用 tools/lazyconfig_train_net.py;
  2. 自包含的 configs:每个项目在configs/下维护Base-*.yaml(或.py)+ 具体实验配置,可通过--config-file与命令行覆盖项(如--num-gpus--eval-only MODEL.WEIGHTS)组合出训练/评估两种模式;
  3. 算法增量代码与自定义算子:新算法写成独立包(如densepose/tridentnet/point_rend/),需要自定义 CUDA/C++ 算子时用独立setup.py以可编辑方式安装(见 projects/TensorMask/setup.py 的swap_align2nat),测试用例放在各项目tests/下;
  4. 工具链沉淀:除训练脚本外,项目还会沉淀专用工具,如 DensePose 的apply_net.py/query_db.py、PointSup 的标注生成脚本、Rethinking-BatchNorm 的域特定统计评估脚本。

外部社区项目与贡献规范

projects/README.md 的 "External Projects" 一节列出了使用 detectron2 的社区外部项目(原文以外部链接形式给出,本文仅转述其名称与一句话定位,不展开):AdelaiDet(含 FCOS、BlendMask 的检测工具箱)、CenterMask、Res2Net 骨干、VoVNet 骨干、FsDet(少样本目标检测)、Sparse R-CNN、BCNet(双层解耦实例分割)、DD3D(全卷积 3D 检测器)、detrex(基于 Transformer 的检测工具箱,含 Deformable-DETR、DAB-DETR、DN-DETR、DINO 等)。

README 源码注释中还保留了社区项目收录规范,可作为向该列表贡献时的约定:

  • 若想贡献,请把项目加入列表,并尽量只占一行;
  • 项目必须提供在标准数据集上训练好的模型;
  • 列表按score = PaperCitation * 5 + Stars大致排序,其中 PaperCitation 指:若该项目是论文的官方实现,则取论文引用数,否则记为 0。

如何在 detectron2 之上搭建自己的研究项目

结合前文,落地一个 projects 风格项目的推荐步骤为:

  1. 准备基础:按 INSTALL.md 安装 detectron2,按 datasets/README.md 准备数据集并设置DETECTRON2_DATASETS
  2. 复制范式:参考 projects/TridentNet/train_net.py 或 tools/train_net.py 写入口脚本,复用DefaultTrainerbuild_detection_train_loaderDefaultPredictor等组件;
  3. 增量实现:把新模块(骨干、roi head、loss 等)放进项目自己的包目录,通过注册器(registry)挂载到 detectron2 的 modeling 系统中,避免改动核心源码;
  4. 配置化实验:用 YAML 或 LazyConfig 管理超参,命令行为--config-file+ 覆盖项,保证训练(--num-gpus N)与评估(--eval-only MODEL.WEIGHTS xxx)只需一条命令切换;
  5. 沉淀资产:训练得到的模型与指标可参照各项目 README 的模型表组织发布,并在引用时附上对应论文的 BibTeX 条目。

总结

projects/README.md 虽然只是一份目录清单,却是理解 detectron2 生态定位的关键入口:它把 DensePose、TridentNet、TensorMask、PointRend、Panoptic-DeepLab、PointSup、Rethinking-BatchNorm、ViTDet、MViTv2 等研究项目与社区工具箱汇聚一堂,示范了"以 detectron2 为库"的可维护组织方式。每个子项目 README 都提供了可直接复制的训练/评估命令、配置路径与预训练模型指标,本文已将这些实战要素按统一相对路径汇总,方便你在仓库内逐一打开验证与复用。

【免费下载链接】detectron2Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.项目地址: https://gitcode.com/GitHub_Trending/de/detectron2

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询