ConvNeXt FPN 与 PAN 怎么选多尺度特征融合在检测和分割里的差别【免费下载链接】ConvNeXtCode release for ConvNeXt model项目地址: https://gitcode.com/gh_mirrors/co/ConvNeXtConvNeXt 骨干吐出来的四路不同分辨率特征做检测和做分割时要用不同的方式融成金字塔。这个仓库里检测端是标准 FPN分割端的 UPerNet 多了自底向上的一路融合两边配置入口完全不同容易抄串。核心机制一句话说清FPN neck 用 1x1 卷积把骨干四路特征 C2~C5 对齐到 256 通道上一层特征上采样 2 倍后和当前层逐元素相加——低层白拿高层的类别信息高层保留低层的位置信息。分割端的 UPerNet 是在这个骨架上再加一条低层往高层回灌的支路和一组多尺度池化。检测端 FPN高层语义怎么灌回低层做了什么吃进骨干四路特征stride 4/8/16/32全部对齐到 256 通道后逐层自顶向下融合最后再上采样一次输出 stride 4/8/16/32/64 共 5 层金字塔。为什么这么设计小目标的轮廓只存在于高分辨率特征图上RPN 每个尺度都要有对应特征可用统一 256 通道让每层头的计算量一致加层不加头成本。入口在哪object_detection/configs/base/models/mask_rcnn_convnext_fpn.py关键一行neckdict(typeFPN, in_channels[128, 256, 512, 1024], out_channels256, num_outs5)。分割端 UPerNet自顶向下加自底向上做了什么先像 FPN 一样把 C5 融到 C2最高层挂一组金字塔池化pool_scales(1,2,3,6)补全局上下文然后把每层特征拆成低、高两路分别处理再相加。为什么这么设计分割精度卡在边界上纯自顶向下一路会把低层细节越融越糊加一条低层往高层回灌的支路边界信息才能进高层这正是 PAN 类结构和纯 FPN 的差别。入口在哪semantic_segmentation/configs/base/models/upernet_convnext.py。FPN 的原料骨干四路特征怎么来做了什么ConvNeXt 按 out_indices[0,1,2,3] 走四个 stage每个 stage 末尾做一次 LayerNorm 再输出得到 stride 4/8/16/32 四路特征。为什么这么设计四个 stage 通道数、分辨率逐级翻倍输出激活分布差别很大不归一化直接相加会让幅度大的那一路吃掉信息融合就白做了。入口在哪object_detection/mmdet/models/backbones/convnext.py 里的 forward_featuresnorm0~norm3 四个模块就是干这件事的。数字每种搭法买到多少分搭法3x 训练box mAPmask mAPFLOPsMask R-CNN ConvNeXt-T46.241.7262GCascade ConvNeXt-T50.443.7741GCascade ConvNeXt-B22k 预训练54.046.9964GCascade ConvNeXt-XL22k 预训练55.247.71898GCascade 用 2.8 倍算力换 4.2 个 box 点离线场景基本值得但 B-22k 到 XL 算力翻倍只多 1.2 个 box 点backbone 往大堆的边际收益很低。分割端更明显UPerNet T 是 46.0B 是 49.1而 B 换 22k 预训练加 640 裁剪直接到 52.6——训练管线带来的 3.5 个点比骨干从 T 升到 B 还多调分割先动管线再动骨干。选型如果你要实时或 FLOPs 预算低于 300G、目标短边不小于 64pxMask R-CNN ConvNeXt-T262G、box 46.2 够用。如果你的 box mAP 目标大于 50 且 FLOPs 能到 700GCascade T 或 B结构比 backbone 更出分。如果你的分割 mIoU 目标不低于 50用 B 22k 预训练 640 裁剪52.6别先升 L——多花 630G 只多 0.6 个点。如果痛点是小目标短边小于 32px保留 FPN把训练短边拉上去官方 mstrain 已做到 800换 neck 收益不如这步。坑与值得动的参数开训即报通道不匹配→ base 配置的 neck in_channels 是按 Base 骨干写的用 Tiny/Small 必须改成 [96, 192, 384, 768]tiny 官方配置里已有这行覆盖。改过 depths 后收敛变差→ 分层学习率是 layer_wise、decay_rate0.95、num_layers6按官方结构定的改深度要同步重调 num_layers见 object_detection/mmcv_custom/layer_decay_optimizer_constructor.py。分割训练报 backbone 模块不存在→ semantic_segmentation 下的 ConvNeXt 是独立实现tools/train.py 需手动加一行from backbone import convnextREADME 里写了。检测的 FPN 负责小目标不丢分割的自顶向下加自底向上负责边界不断金字塔搭法跟着任务痛点走。检测配置object_detection/configs/convnext/ 分割配置semantic_segmentation/configs/convnext/【免费下载链接】ConvNeXtCode release for ConvNeXt model项目地址: https://gitcode.com/gh_mirrors/co/ConvNeXt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考