ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

PaddleSeg 实时语义分割:STDC-Seg(STDC1/STDC2)Cityscapes 与 VOC 训练全指南

PaddleSeg 实时语义分割:STDC-Seg(STDC1/STDC2)Cityscapes 与 VOC 训练全指南 人工智能计算机视觉预训练【免费下载链接】PaddleSegEasy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSeg点击查看免费下载导读本文围绕 PaddleSeg 中基于「重新思考 BiSeNet」论文Rethinking BiSeNet For Real-time Semantic SegmentationCVPR 2021美团实现的STDC-Seg模型展开。它把轻量级 STDC 骨干网络与 BiSeNet 的上下文路径Context Path、特征融合模块FFM和边界损失结合在保持实时推理速度的同时显著提升分割精度。读完本文你将掌握 STDC-Seg 在 Cityscapes 与 Pascal VOC 2012(Aug) 上的完整配置、训练/验证/导出命令、损失函数与数据增强细节以及 STDCNet 骨干与STDCSeg网络的源码级实现原理。一、模型背景与设计动机STDC-Seg 对应论文Fan, Mingyuan, Shenqi Lai, Junshi Huang, Xiaoming Wei, Zhenhua Chai, Junfeng Luo, Xiaolin Wei.Rethinking BiSeNet For Real-time Semantic Segmentation.In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition, pp. 9716-9725. 2021。论文的核心观点是BiSeNet 中用于提取空间细节的Shortcut Connection浅层分支存在大量冗余计算作者将其替换为更高效的STDCShort-Term Dense Concatenate模块从而在不牺牲精度的前提下进一步降低计算量使其更适合移动端与实时场景。在 PaddleSeg 中STDC-Seg 以两种骨干规模提供骨干说明STDC1STDCNet(base64, layers[2, 2, 2])stage3/4/5 各 2 个 STDC 模块计算量更小STDC2STDCNet(base64, layers[4, 5, 3])stage3/4/5 各 4/5/3 个模块精度更高对应源码见 paddleseg/models/backbones/stdcnet.pySTDC1/STDC2 都是STDCNet工厂函数仅layers配置不同其余结构共享。二、官方 Benchmark 性能Cityscapes19 类1024x512 分辨率ModelBackboneResolutionTraining ItersmIoUmIoU (flip)mIoU (msflip)STDC1-Seg50STDC11024x5128000074.74%75.71%76.77%STDC2-Seg50STDC21024x5128000077.60%78.32%79.09%Pascal VOC 2012 Aug21 类512x512 分辨率ModelBackboneResolutionTraining ItersmIoUmIoU (flip)mIoU (msflip)STDC1-Seg50STDC1512x5124000068.06%68.48%69.26%STDC2-Seg50STDC2512x5124000068.98%70.07%70.72%以上数据来自 configs/stdcseg/README.md。三个评测指标的含义mIoU单尺度推理输入按训练分辨率缩放后直接计算mIoU (flip)对原图与水平翻转图分别推理后取 logits 平均mIoU (msflip)多尺度含翻转推理后的融合结果通常作为最终报告精度。这些精度由tools/val.py结合paddleseg的评估逻辑复现相关训练脚本与 TIPC 测试位于 test_tipc。三、配置文件逐项解读3.1 Cityscapesstdc1_seg_cityscapes_1024x512_80k.yml完整配置见 configs/stdcseg/stdc1_seg_cityscapes_1024x512_80k.yml其通过_base_继承 configs/base/cityscapes.yml仅覆盖模型与损失相关字段_base_: ../_base_/cityscapes.yml batch_size: 12 iters: 80000 model: type: STDCSeg backbone: type: STDC1 pretrained: https://bj.bcebos.com/paddleseg/dygraph/STDCNet1.tar.gz pretrained: null loss: types: - type: OhemCrossEntropyLoss - type: OhemCrossEntropyLoss - type: OhemCrossEntropyLoss - type: DetailAggregateLoss coef: [1, 1, 1, 1]字段说明batch_size: 12单卡每步样本数覆盖了_base_中的默认值 2多卡训练时按总卡数累计实际 global batch size 12 × 卡数iters: 80000总迭代数约等于原论文设置model.backbone.pretrainedSTDCNet1 在 ImageNet 上的预训练权重Baidu BOS 地址加载的是骨干网络而非整模型model.pretrained: null整模型预训练为空即不加载完整分割模型的预训练权重loss四路损失叠加权重均为 1。3.2 Pascal VOCstdc1_seg_voc12aug_512x512_40k.yml完整配置见 configs/stdcseg/stdc1_seg_voc12aug_512x512_40k.yml继承 configs/base/pascal_voc12aug.yml核心结构与 Cityscapes 一致仅数据集、迭代数40000与分辨率512x512不同同样使用四路损失3×OhemCrossEntropyLoss DetailAggregateLosscoef 均为 1。3.3 STDC2 变体configs/stdcseg/stdc2_seg_cityscapes_1024x512_80k.yml 与 configs/stdcseg/stdc2_seg_voc12aug_512x512_40k.yml 采用「配置继承」写法以对应 STDC1 配置为_base_仅覆盖骨干类型与预训练权重_base_: stdc1_seg_cityscapes_1024x512_80k.yml model: backbone: type: STDC2 pretrained: https://bj.bcebos.com/paddleseg/dygraph/STDCNet2.tar.gz这种_base_链式继承是 PaddleSeg 配置体系的标准做法便于横向对比同一数据集上 STDC1 与 STDC2 的精度/速度差异。四、继承的基础配置数据增强、优化器与调度器STDC-Seg 的 Cityscapes 配置继承了 configs/base/cityscapes.yml其关键内容batch_size: 2 iters: 80000 train_dataset: type: Cityscapes dataset_root: data/cityscapes transforms: - type: ResizeStepScaling min_scale_factor: 0.5 max_scale_factor: 2.0 scale_step_size: 0.25 - type: RandomPaddingCrop crop_size: [1024, 512] - type: RandomHorizontalFlip - type: RandomDistort brightness_range: 0.4 contrast_range: 0.4 saturation_range: 0.4 - type: Normalize mode: train val_dataset: type: Cityscapes dataset_root: data/cityscapes transforms: - type: Normalize mode: val optimizer: type: SGD momentum: 0.9 weight_decay: 4.0e-5 lr_scheduler: type: PolynomialDecay learning_rate: 0.01 end_lr: 0 power: 0.9要点ResizeStepScaling按 0.5~2.0 的随机尺度步长 0.25缩放输入增强尺度鲁棒性RandomPaddingCrop随机裁剪到 1024x512RandomDistort亮度/对比度/饱和度扰动幅度 0.4SGD PolynomialDecay学习率 0.01、power 0.9、衰减至 0动量 0.9、权重衰减 4e-5NormalizeCityscapes 使用固定均值和方差训练/验证一致。五、STDC-Seg 网络结构与源码解读5.1 整体架构STDCSeg定义于 paddleseg/models/stdcseg.py由三个子模块组成ContextPath上下文路径接收骨干的 5 级特征feat2/4/8/16/32通过两个 AttentionRefinementModuleARM与全局平均池化分支融合输出 x8、x16 上下文特征FeatureFusionModule特征融合模块将骨干浅层细节特征feat8与上下文特征feat_cp8拼接后做通道注意力加权融合输出 256 通道SegHead分割头conv_out256→256→num_classes输出主分割 logitsconv_out8/conv_out16输出辅助 logits。构造函数关键参数参数默认值说明num_classes必填类别数Cityscapes 19VOC 21backbone必填STDCNetSTDC1/STDC2 均可use_boundary_2/4/16False是否启用对应层级的边界/细节监督头use_boundary_8True按论文默认开启 8x 细节监督use_conv_lastFalse是否使用骨干最后一个卷积影响 ContextPath 的 inplanespretrainedNone整模型预训练权重5.2 前向流程与多损失输出从 paddleseg/models/stdcseg.py 可以看到训练模式主分支输出feat_out辅助分支输出feat_out8来自 feat_cp8、feat_out16来自 feat_cp16若开启use_boundary_8还会追加feat_out_sp8四路 logits 全部上采样到输入分辨率后返回与配置中四路损失一一对应推理模式只走主分支ffm(feat_res8, feat_cp8) → conv_out → interpolate返回单个 logit 列表无任何辅助头开销这正是实时推理高效的关键。5.3 ContextPath 细节见 paddleseg/models/stdcseg.py骨干输出 5 级特征对 feat32 做全局平均池化 1x1 卷积得到全局上下文nearest 上采样回 feat32 分辨率feat32 经arm32ARM3x3 卷积 全局池化 → 1x1 卷积 → BN → Sigmoid 通道注意力后与全局上下文相加依次上采样并叠加 feat16经arm16逐级得到 x8 上下文特征。5.4 FeatureFusionModule 细节见 paddleseg/models/stdcseg.py将细节特征fsp与上下文特征fcp沿通道拼接经 1x1 卷积降维到 256再通过「全局池化 → 1x1 降维 → ReLU → 1x1 升维 → Sigmoid」生成通道注意力权重对特征做加权并残差相加保留细节的同时注入全局语义。5.5 STDCNet 骨干见 paddleseg/models/backbones/stdcnet.py前两个 stage 为 stride 2 的ConvBNRelu3x3通道 base//2→base下采样 4 倍后续 stage3/4/5 分别由layers指定数量的 STDC 模块组成每 stage 首模块 stride 2其余 stride 1特征通道配置为[base//2, base, base*4, base*8, base*16]即 STDC1/STDC2base64输出通道为 32/64/256/512/1024每个 STDC 模块CatBottleneck/AddBottleneck将多分支卷积结果按通道拼接或相加实现「short-term dense concatenate」同时利用avd_layer带 stride 的卷积与池化组合避免下采样信息丢失。STDC1 与 STDC2 的差异仅在于layers参数见 paddleseg/models/backbones/stdcnet.py。六、损失函数OhemCrossEntropyLoss 与 DetailAggregateLoss6.1 三路 OHEM 交叉熵辅助分支与主分支均使用在线难例挖掘交叉熵实现在 paddleseg/models/losses/ohem_cross_entropy_loss.py。该损失只保留 top-k 高损失像素参与梯度计算有效缓解类别不平衡是 STDC-Seg 训练的关键技巧。6.2 DetailAggregateLoss边界聚合损失实现在 paddleseg/models/losses/detail_aggregate_loss.py。论文认为主干分类网络学到的特征图对物体边界不敏感直接训练边界分支容易过拟合。因此该损失先将num_classes的 logits 按通道求和得到单通道细节特征再与从 GT 生成的边界图通过 Sobel/Canny 类算子提取、并逐级下采样到 2/4/8/16 分辨率做 MSE 损失从而显式监督网络关注边界区域。它对应use_boundary_2/4/8/16开关STDC-Seg 默认只开use_boundary_8。配置中types列表的四个元素与网络训练时的四路 logits 按顺序对应3×OHEM 1×DetailAggregatecoef: [1, 1, 1, 1]表示各路损失等权相加。七、实战训练、验证与模型导出7.1 训练以 Cityscapes STDC1 为例python tools/train.py \ --config configs/stdcseg/stdc1_seg_cityscapes_1024x512_80k.yml \ --do_eval \ --use_vdl \ --save_dir output/stdc1_cityscapes数据集需按 configs/base/cityscapes.yml 中的dataset_root: data/cityscapes放置在data/cityscapes目录相对运行目录训练/验证目录结构遵循 Cityscapes 官方布局--do_eval每save_interval迭代执行一次验证--use_vdl开启 VisualDL 日志可视化多卡训练可直接用paddle.distributed.launch如python -m paddle.distributed.launch tools/train.py ...batch_size 为每卡数值。训练参考脚本与 TIPC 基准测试见 test_tipc。7.2 验证与评估python tools/val.py \ --config configs/stdcseg/stdc1_seg_cityscapes_1024x512_80k.yml \ --model_path output/stdc1_cityscapes/best_model/model.pdparams若需复现文档中的 flip 或 msflip 指标可在推理脚本中分别开启水平翻转与多尺度0.75x/1x/1.25x 等推理后融合 logits评估指标为逐类 IoU 的均值 mIoU以及 mIou 等辅助指标实现在paddleseg的评估工具中。7.3 推理预测python tools/predict.py \ --config configs/stdcseg/stdc1_seg_cityscapes_1024x512_80k.yml \ --model_path output/stdc1_cityscapes/best_model/model.pdparams \ --image_path demo.png \ --save_dir output/result7.4 导出静态图模型python tools/export.py \ --config configs/stdcseg/stdc1_seg_cityscapes_1024x512_80k.yml \ --model_path output/stdc1_cityscapes/best_model/model.pdparams \ --save_dir output/export导出后得到model.pdmodel与model.pdiparams可用于 Paddle Inference / Paddle Lite / PaddleSlim 等部署链路结合 deploy 下的 FastDeploy、Serving 等方案可落地到实际业务。八、常见调参与注意事项分辨率与显存1024x512 是 Cityscapes 的默认训练尺寸显存不足可先尝试减小batch_sizeVOC 配置为 512x512、40k 迭代训练更快预训练权重骨干预训练地址STDCNet1.tar.gz / STDCNet2.tar.gz由 BOS 托管首次训练会自动下载若网络受限可手动下载后修改pretrained为本地路径边界损失开关论文默认use_boundary_8True如需开启 2/4/16 级边界监督需同时向loss.types追加对应数量的DetailAggregateLoss并同步调整coef且需自行确认边界标签生成逻辑OHEM 与类别不平衡Cityscapes 大类别如道路、建筑像素占比极高OHEM 只回传难例梯度可配合RandomDistort等增强提升小类别如交通标志精度多尺度评测flip/msflip 指标高于单尺度若业务允许可保留多尺度推理换取精度。九、总结STDC-Seg 是 PaddleSeg 实时语义分割的主力模型之一STDC 骨干在保持 BiSeNet 精度的同时大幅压缩了浅层冗余计算配合 ContextPath FFM 的多级特征融合与 OHEM DetailAggregate 双损失约束在 Cityscapes 上以 1024x512 分辨率、80k 迭代取得 STDC1 74.74% / STDC2 77.60% 的 mIoU单尺度是移动端与嵌入式场景中精度/速度权衡的优秀选择。本文给出的配置、源码路径与命令行均可直接在 PaddleSeg 仓库中复现验证读者可基于 configs/stdcseg 下的四个配置快速上手实验。赞分享人工智能计算机视觉预训练【免费下载链接】PaddleSegEasy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSeg点击查看免费下载相关推荐STDC-Seg实时语义分割框架详解与实战指南STDC Seg实时语义分割框架详解与实战指南 1. 项目介绍 STDC Seg 是一个基于 PyTorch 的实时语义分割模型最初由美团在 CVPR 20人工智能计算机视觉深度学习【亲测免费】 STDC-Seg实时语义分割网络STDC Seg实时语义分割网络 1. 项目基础介绍和主要编程语言 STDC Seg 是一个基于 PyTorch 的实时语义分割网络由美团在 CVPR 20人工智能计算机视觉深度学习MMSegmentation 中的 STDC 实时语义分割STDCNet 主干、Detail Aggregation 模块与 Cityscapes 训练配置全解析MMSegmentation 中的 STDC 实时语义分割STDCNet 主干、Detail Aggregation 模块与 Cityscapes 训练配置全人工智能深度学习计算机视觉上一篇DocQuery终极指南如何用AI从文档中智能提取信息下一篇NocoBase深度指南如何用数据模型驱动开发构建企业级应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表