ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

深入UPSNet架构:ResNet、FPN、RPN、Mask R-CNN与FCN五大模块如何协同工作

深入UPSNet架构:ResNet、FPN、RPN、Mask R-CNN与FCN五大模块如何协同工作 深入UPSNet架构ResNet、FPN、RPN、Mask R-CNN与FCN五大模块如何协同工作【免费下载链接】UPSNet项目地址: https://gitcode.com/gh_mirrors/up/UPSNetUPSNetUnified Panoptic Segmentation Network是 Uber 在 CVPR 2019Oral提出的统一全景分割网络它用一张网络让 ResNet、FPN、RPN、Mask R-CNN 与 FCN 五大模块协同工作端到端同时完成实例分割与语义分割最终输出带实例 ID 的像素级全景图。本文将带你从数据流动线出发读懂这五大模块各自做什么、如何拼在一起。一、为什么需要一个统一的全景分割网络 全景分割 语义分割stuff如道路、天空 实例分割things如第 1 个人、第 2 辆车。传统做法是分别训练 Mask R-CNN 和 FCN 两个网络再人工融合结果而 UPSNet 把两条路线装进同一个骨干共享特征、一次前向、联合训练。论文报告的主要结果模型数据集PQSQRQUPSNet-50COCO val42.578.052.4UPSNet-101-DCNCOCO test-dev46.680.556.9UPSNet-50Cityscapes59.379.773.0UPSNet-101-COCO (ms test)Cityscapes61.881.374.8PQ 全景质量Panoptic QualitySQ 衡量掩码形状精度RQ 衡量识别召回。二、五大模块速览 模块职责核心源码ResNet 骨干提取 res2~res5 四层特征upsnet/models/resnet.pyFPN构建 P2~P6 五级统一金字塔upsnet/models/fpn.pyRPN多尺度候选框提案upsnet/models/rpn.pyRCNN MaskBranch实例分类、框回归、实例掩码upsnet/models/rcnn.pyFCNHead逐像素语义 logitsupsnet/models/fcn.py所有模块的组装入口在 upsnet/models/resnet_upsnet.py 的resnet_upsnet类中前向逻辑一次看完五大模块的接力顺序。三、数据流动线一张图记住整张网络输入图像 └→ ResNet 骨干 ── res2 / res3 / res4 / res51/4~1/32 分辨率 └→ FPN ── P2 / P3 / P4 / P5 / P6统一 256 通道 ├→ RPN5 级→ PyramidProposal ── 候选框 rois │ ├→ RCNN7×7 RoIAlign → 分类 框回归 │ └→ MaskBranch14×14 RoIAlign → 28×28 实例掩码 └→ FCNHead3 层可变形卷积 → 语义 logits4× 上采样 实例掩码 语义 logits ── 全景头SegTerm / MaskTerm / MaskRemoval └→ 全景 logits → argmax → 带实例 ID 的全景分割图 ️关键设计RPN、实例头、语义头全部消费 FPN 的同一组特征这就是统一二字的落点。四、逐模块拆解每个模块在解决什么问题1️⃣ ResNet 骨干分层特征的地基ResNetBackbone 由conv1res2/res3/res4/res5四个残差块组构成逐层下采样输出 1/4、1/8、1/16、1/32 四种分辨率的特征图。两个实用细节支持可变形卷积DCN的DCNBottleneckUPSNet-101-DCN 即用它进一步提升精度默认backbone_freeze_at2冻结浅层参数以复用 ImageNet 预训练知识训练更稳更快。模型规模由残差块数决定UPSNet-50 为[3,4,6,3]UPSNet-101 为[3,4,23,3]。2️⃣ FPN把四层特征拉成统一金字塔FPN 先用 1×1 卷积把 res2~res5 统一成 256 通道再自顶向下逐级上采样相加最后过 3×3 卷积平滑得到 P2~P5P6 由 P5 再最大池化得到专门照顾超大目标。小物体看 P2、大物体看 P6——多尺度问题一次性解决。3️⃣ RPN多尺度候选框提案器RPN 结构极简每级特征共享一个 3×3 卷积接两个 1×1 分支——前景/背景分数与框偏移。每级配置 3 个锚框宽高比 0.5/1/2、尺度 8。五级特征分别出提案后由 PyramidProposal 按层级 NMS 汇总出 top 候选框 rois送入实例分支。4️⃣ Mask R-CNN 实例分支分类、框回归、掩码三合一rcnn.py 包含两个并列头RCNN对 rois 做 FPN RoIAlign7×7→ 两个全连接层 → 输出类别分数与框修正量MaskBranchFPN RoIAlign14×14→ 4 层卷积 → 反卷积 → 输出 28×28 的实例掩码 logits。训练时三者联合优化分类用交叉熵、框回归用 Smooth L1、掩码用逐像素二值交叉熵见MaskRCNNLoss。推理时 NMS 框修正后取 top-n 个实例。5️⃣ FCN 语义头逐像素的场景理解FCNHead 对 P2~P5 各走一条 3 层可变形卷积子网络再统一上采样拼接为 512 通道经 1×1 卷积输出num_seg_classes个通道的语义 logits并 4× 上采样回原图分辨率。点睛之处语义头的类别表也包含 things 类人、车、行人……。这意味着同一张图FCN 既给出哪里是天空也给出哪里像某辆车——后者正是全景头缝合实例的关键线索。五、点睛之笔全景头如何缝合语义与实例 ✂️训练时resnet_upsnet.py 直接取 GT 框跑 MaskBranch 得到实例掩码然后SegTermunary_logits.py按 roi 从 FCN logits 中抠出对应实例类的语义得分MaskTerm把 28×28 实例掩码双线性放大并贴回全图语义 logits 实例语义 实例掩码 void 项拼接成全景 logits与 MaskMatching 生成的全景 GT 计算交叉熵。推理时多一步去重MaskRemoval 按置信度从高到低扫描实例与已保留掩码重叠超过 30% 的判为同一物体直接丢弃避免一辆车两个 ID。最后 argmax 全景 logits得到像素级、带实例 ID 的完整全景图。六、跑起来环境准备与训练测试命令 环境Python 3.6 PyTorch 0.4.1也支持 PyTorch 1.0建议 4~16 张显存 ≥11GB 的 GPU克隆仓库git clone https://gitcode.com/gh_mirrors/up/UPSNet运行 init.sh构建 C/CUDA 算子NMS、RoIAlign、可变形卷积等并下载预训练骨干准备数据在仓库根目录软链接ln -s $CITYSCAPES_ROOT data/cityscapes或data/coco再执行 init_cityscapes.sh / init_coco.sh训练python upsnet/upsnet_end2end_train.py --cfg upsnet/experiments/upsnet_resnet50_coco_16gpu.yaml测试python upsnet/upsnet_end2end_test.py --cfg upsnet/experiments/upsnet_resnet50_coco_16gpu.yaml --weight_path model/upsnet_resnet_50_coco_90000.pth。upsnet/experiments/ 目录下提供了 4/8/16 GPU 的多种实验配置按需替换--cfg即可。七、核心配置速查表 ⚙️以下默认值定义在 upsnet/config/config.py参数默认值含义fpn_feature_dim256FPN 统一通道宽度rpn_feat_stride4/8/16/32/64RPN 的五级特征步长anchor_ratios/num_anchors0.5,1,2 / 3每级锚框配置mask_size28实例掩码输出分辨率fcn_num_layers3语义头可变形卷积层数batch_rois512每批次参与训练的 RoI 数backbone_freeze_at2冻结骨干前两层复用预训练八、一句话总结 ResNet 提特征、FPN 统尺度、RPN 出候选、Mask R-CNN 精实例、FCN 铺语义最后全景头把实例掩码 语义先验缝合为一张带实例 ID 的全景图——这正是 UPSNet 端到端统一全景分割的全部秘密也是它成为该领域经典基线的原因。【免费下载链接】UPSNet项目地址: https://gitcode.com/gh_mirrors/up/UPSNet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表