ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Detectron2 中的 TridentNet-Fast 实战:尺度感知多分支目标检测网络的原理、配置与训练评估

2026/9/11 19:36:41 拓冰建站 浏览量
Detectron2 中的 TridentNet-Fast 实战:尺度感知多分支目标检测网络的原理、配置与训练评估 Detectron2 中的 TridentNet-Fast 实战尺度感知多分支目标检测网络的原理、配置与训练评估【免费下载链接】detectron2Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.项目地址: https://gitcode.com/GitHub_Trending/de/detectron2TridentNetScale-Aware Trident Networks for Object DetectionICCV 2019通过并行多分支、共享权重的空洞卷积结构为不同尺度的目标生成表示能力一致的特征图从而显著提升检测精度。本仓库在 Detectron2 中完整实现了其加速版本TridentNet-Fast在几乎不增加参数量和计算量的前提下带来稳定涨点。阅读本文后你将掌握 TridentNet 多分支架构的核心原理、MODEL.TRIDENT全部配置项的含义以及基于 projects/TridentNet/train_net.py 完成单机/多卡训练与评估的完整流程。TridentNet 是什么尺度感知的多分支架构现实场景中目标尺度差异巨大而经典检测主干网络的感受野往往是固定的导致小目标与大目标无法被同等对待。TridentNet 的核心思想是生成尺度专属scale-specific的特征图且这些特征图具有统一的表示能力uniform representational power。具体做法是构造一个并行多分支结构其中每个分支共享同一套变换参数即共享卷积权重但拥有不同的感受野——感受野的差异通过在同一位置使用不同的空洞率dilation来实现而不是使用不同的卷积核。这样不同分支天然地关注不同尺度的目标而共享权重又保证了各分支学到的是同一套、泛化一致的表示不会因分支不同而引入额外参数。TridentNet-Fast 则是 TridentNet 的快速近似版本。正如 projects/TridentNet/README.md 所述它能在不引入任何额外参数和计算开销的前提下获得显著提升achieve significant improvements without any additional parameters and computational cost。这一特性来源于权重共享以及在推理阶段只使用单个中间分支下文详述因此部署成本与普通 Faster R-CNN 几乎一致收益却非常可观。仓库实现概览本仓库实现的是 C4 风格的 TridentNet基于 ResNet 的 res4 阶段改造配合 Res5 ROI Heads核心代码集中在 projects/TridentNet 目录文件职责projects/TridentNet/train_net.py训练/评估入口基于DefaultTrainer注册COCOEvaluatorprojects/TridentNet/tridentnet/config.py通过add_tridentnet_config注入MODEL.TRIDENT配置组projects/TridentNet/tridentnet/trident_conv.py核心算子TridentConv多分支共享权重的空洞卷积projects/TridentNet/tridentnet/trident_backbone.pyTridentBottleneckBlock与build_trident_resnet_backbone主干构建projects/TridentNet/tridentnet/trident_rpn.pyTridentRPN训练时把图像与 GT 复制到各分支projects/TridentNet/tridentnet/trident_rcnn.pyTridentRes5ROIHeads/TridentStandardROIHeads与分支结果合并projects/TridentNet/configsBase 配置与 R-50/R-101 的 1x/3x 训练配置所有自定义组件均通过 Detectron2 的注册机制BACKBONE_REGISTRY、ROI_HEADS_REGISTRY、PROPOSAL_GENERATOR_REGISTRY接入与标准GeneralizedRCNN元架构无缝协作相关注册可见 projects/TridentNet/tridentnet/init.py。MODEL.TRIDENT 配置组详解TridentNet 的全部专属超参数都放在MODEL.TRIDENT命名空间下由 projects/TridentNet/tridentnet/config.py 中的add_tridentnet_config(cfg)注入默认值配置项默认值含义MODEL.TRIDENT.NUM_BRANCH3多分支数量即并行卷积分支的个数MODEL.TRIDENT.BRANCH_DILATIONS[1, 2, 3]每个分支对应的空洞率列表长度必须等于NUM_BRANCHMODEL.TRIDENT.TRIDENT_STAGEres4应用 Trident 块的阶段。按论文默认使用 Res4MODEL.TRIDENT.TEST_BRANCH_IDX1推理策略-1表示推理时合并所有分支结果否则只使用指定分支做快速推理论文推荐取中间分支索引 1其中TEST_BRANCH_IDX是 TridentNet-Fast 的关键开关当它不等于-1时训练阶段依然走完整多分支而推理阶段只保留单个分支见 projects/TridentNet/tridentnet/trident_conv.py 中num_branch self.num_branch if self.training or self.test_branch_idx -1 else 1从而获得与普通网络几乎相同的推理开销。Base 配置文件逐项说明projects/TridentNet/configs/Base-TridentNet-Fast-C4.yaml 是全部具体实验的公共基座值得逐段理解MODEL: META_ARCHITECTURE: GeneralizedRCNN # 复用标准两阶段元架构 BACKBONE: NAME: build_trident_resnet_backbone # 注册的 Trident 主干 ROI_HEADS: NAME: TridentRes5ROIHeads # C4 风格 Trident ROI Heads POSITIVE_FRACTION: 0.5 # 训练正样本比例 BATCH_SIZE_PER_IMAGE: 128 # 每图 RoI 采样数对应论文 C5-128ROI PROPOSAL_APPEND_GT: False # 不额外把 GT 追加进 proposal PROPOSAL_GENERATOR: NAME: TridentRPN # 多分支 RPN RPN: POST_NMS_TOPK_TRAIN: 500 # 训练时 NMS 后保留的 proposal 数 TRIDENT: NUM_BRANCH: 3 BRANCH_DILATIONS: [1, 2, 3] TEST_BRANCH_IDX: 1 TRIDENT_STAGE: res4 DATASETS: TRAIN: (coco_2017_train,) TEST: (coco_2017_val,) SOLVER: IMS_PER_BATCH: 16 # 8 卡 × 2 图/卡 BASE_LR: 0.02 STEPS: (60000, 80000) # 1x 学习率衰减点 MAX_ITER: 90000 # 1x 总迭代数 INPUT: MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800) # 多尺度训练短边 VERSION: 2几个值得留意的细节RPN.POST_NMS_TOPK_TRAIN被压到 500Detectron2 默认是 2000见 detectron2/config/defaults.py以配合 128 的 RoI 采样预算PROPOSAL_APPEND_GT关闭默认值为True与论文的训练设置保持一致。1x / 3x 变体配置具体实验配置只做最小化覆盖其余全部继承 Baseprojects/TridentNet/configs/tridentnet_fast_R_50_C4_1x.yamlR-50、1xMAX_ITER: 90000STEPS: (60000, 80000)预训练权重detectron2://ImageNetPretrained/MSRA/R-50.pklprojects/TridentNet/configs/tridentnet_fast_R_50_C4_3x.yamlR-50、3xMAX_ITER: 270000STEPS: (210000, 250000)projects/TridentNet/configs/tridentnet_fast_R_101_C4_3x.yamlR-101、3x预训练权重detectron2://ImageNetPretrained/MSRA/R-101.pkl三者均显式声明MODEL.MASK_ON: False即纯检测任务主干深度由MODEL.RESNETS.DEPTH指定主干构建逻辑会依据深度自动决定每个阶段的 block 数R-50 为[3, 4, 6, 3]R-101 为[3, 4, 23, 3]见 projects/TridentNet/tridentnet/trident_backbone.py。训练从单卡到 8 卡训练入口是 projects/TridentNet/train_net.py。其setup流程为get_cfg()创建默认配置 →add_tridentnet_config(cfg)注入 TridentNet 专属配置 →merge_from_file合并 YAML →merge_from_list合并命令行opts→freeze()冻结 →default_setup完成日志、随机种子、分布式等初始化main中通过launch启动分布式训练。训练命令格式来自 READMEpython /path/to/detectron2/projects/TridentNet/train_net.py --config-file config.yaml例如在 8 张 GPU 上以 ResNet-50 主干进行端到端 TridentNet 训练python /path/to/detectron2/projects/TridentNet/train_net.py \ --config-file configs/tridentnet_fast_R_50_C4_1x.yaml \ --num-gpus 8--num-gpus等参数由 Detectron2 的default_argument_parser统一提供还支持--num-machines、--machine-rank、--dist-url等多机参数最终经launch分发。训练过程中Trainer默认使用COCOEvaluator见 projects/TridentNet/train_net.py 的build_evaluator评估结果与日志写入OUTPUT_DIR/inference。评估--eval-only 与多分支结果合并评估同样复用训练脚本只需追加--eval-only并指定权重python /path/to/detectron2/projects/TridentNet/train_net.py \ --config-file configs/tridentnet_fast_R_50_C4_1x.yaml \ --eval-only MODEL.WEIGHTS model.pth评估阶段DetectionCheckpointer会从cfg.MODEL.WEIGHTS加载权重命令行MODEL.WEIGHTS model.pth通过merge_from_list覆盖配置随后Trainer.test运行推理与 COCO 评测。推理路径的两种模式由MODEL.TRIDENT.TEST_BRANCH_IDX决定其合并逻辑实现在 projects/TridentNet/tridentnet/trident_rcnn.py 的merge_branch_instances中快速模式TEST_BRANCH_IDX非 -1默认 1各 ROI Heads 只对指定分支做前向推理成本与单分支网络相同全分支模式TEST_BRANCH_IDX -1对所有分支分别前向然后按类别执行batched_nms合并各分支的检测框再按topk_per_image截取每图 Top-K 结果。这就是 TridentNet-Fast 零额外推理开销 的来源训练时享受多分支的尺度鲁棒性推理时退化为单一中间分支。多分支的底层实现原理TridentConv共享权重的空洞卷积projects/TridentNet/tridentnet/trident_conv.py 中TridentConv只保存一份卷积权重self.weight形状与普通卷积完全一致但为每个分支保存独立的paddings与dilations。前向时对每个分支执行F.conv2d(input, self.weight, ..., padding, dilation, groups)——权重共享、感受野不同参数总量与单分支卷积完全相同。构造时还校验了num_branch、paddings、dilations三者的长度一致性assert len({...}) 1。TridentBottleneckBlock 与 concat_outputprojects/TridentNet/tridentnet/trident_backbone.py 中的TridentBottleneckBlock将 Bottleneck 的 3×3 卷积替换为TridentConv其余 1×1 卷积和残差捷径对每个分支分别作用。make_trident_stage构造整个阶段时将concat_output设为前num_blocks - 1个块为False、最后一个块为True——即只有阶段末尾的 Trident 块才把各分支输出torch.cat拼接起来保证输出特征图同时包含全部尺度的信息供 RPN 与 ROI Heads 使用。TridentRPN训练期的分支复制projects/TridentNet/tridentnet/trident_rpn.py 中的TridentRPN在训练时把输入图像torch.cat复制num_branch份gt_instances也同步复制从而让每个分支都获得完整的监督信号推理快速模式下则只保留单分支与主干行为一致。实验结果MS-COCO 上的精度对比README 提供了 COCO val 上的官方复现结果与同设置的标准 Faster R-CNNC4、C5-512ROI对比。TridentNet-Fast 使用的 RoI 头是 C5-128ROI128 个 RoI/图| Model | Backbone | Head | lr sched | AP | AP50 | AP75 | APs | APm | APl | | ----- | -------- | ---- | -------- | -- | ---- | ---- | --- | --- | --- | | Faster | R50-C4 | C5-512ROI | 1X | 35.7 | 56.1 | 38.0 | 19.2 | 40.9 | 48.7 | | TridentFast | R50-C4 | C5-128ROI | 1X | 38.0 | 58.1 | 40.8 | 19.5 | 42.2 | 54.6 | | Faster | R50-C4 | C5-512ROI | 3X | 38.4 | 58.7 | 41.3 | 20.7 | 42.7 | 53.1 | | TridentFast | R50-C4 | C5-128ROI | 3X | 40.6 | 60.8 | 43.6 | 23.4 | 44.7 | 57.1 | | Faster | R101-C4 | C5-512ROI | 3X | 41.1 | 61.4 | 44.0 | 22.2 | 45.5 | 55.9 | | TridentFast | R101-C4 | C5-128ROI | 3X | 43.6 | 63.4 | 47.0 | 24.3 | 47.8 | 60.0 |从中可以观察到两个规律全面稳定的涨点在相同的骨干与训练时长下TridentNet-Fast 的 AP 普遍高出 22.5 个点R-50 1x 为 35.7→38.0R-101 3x 为 41.1→43.6且 AP50、AP75 同步提升尺度收益显著提升幅度最大的指标是大目标 APl如 R-50 1x 从 48.7 提升到 54.6印证了多分支结构对大尺度目标的针对性增益而小目标 APs 也保持正向提升。原 README 中该表还附带了各模型权重.pkl与metrics.json的下载链接可用于直接复现上述指标对应配置权重默认从detectron2://托管地址加载预训练主干。引用 TridentNet如果论文或代码对你的工作有帮助请按如下 BibTeX 引用源自 projects/TridentNet/README.mdInProceedings{li2019scale, title{Scale-Aware Trident Networks for Object Detection}, author{Li, Yanghao and Chen, Yuntao and Wang, Naiyan and Zhang, Zhaoxiang}, journal{The International Conference on Computer Vision (ICCV)}, year{2019} }延伸阅读实验配置查看 projects/TridentNet/configs 下全部 YAML理解 Base 继承与 1x/3x 差异核心实现TridentConv的权重共享逻辑见 projects/TridentNet/tridentnet/trident_conv.py主干与阶段拼接见 projects/TridentNet/tridentnet/trident_backbone.py推理合并见 projects/TridentNet/tridentnet/trident_rcnn.py项目总览通用训练/评估入口 tools/train_net.py 与快速上手文档 GETTING_STARTED.md、INSTALL.md其他进阶项目仓库还包含 DensePose、PointRend、Panoptic-DeepLab、ViTDet 等扩展见 projects/README.md【免费下载链接】detectron2Detectron2 is a platform for object detection, segmentation and other visual recognition tasks.项目地址: https://gitcode.com/GitHub_Trending/de/detectron2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考