ARTICLE DETAIL

资讯详情

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

PaddleSeg 中的 ViT-Adapter:面向密集预测的视觉 Transformer 适配器(UPerNet 配置与实战指南)

PaddleSeg 中的 ViT-Adapter:面向密集预测的视觉 Transformer 适配器(UPerNet 配置与实战指南) 人工智能计算机视觉预训练【免费下载链接】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 仓库中configs/vit_adapter/目录下的官方配置与源码实现系统讲解ViT-AdapterVision Transformer Adapter for Dense Predictions这一面向密集预测任务的视觉 Transformer 骨干网络的原理、配置与使用方式。文章以 upernet_vit_adapter_tiny_ade20k_512x512_160k.yml 为实战主线结合 UPerNetViTAdapter 模型实现、ViTAdapter 骨干网络源码 以及 vit_adapter_layers.py 中的空间先验模块SPM与可变形注意力交互模块帮助读者掌握如何安装自定义算子、如何理解配置文件中每个参数的作用、如何从零训练/评估/预测/导出该模型以及其底层前向计算流程。论文与核心思想ViT-Adapter 出自论文Vision Transformer Adapter for Dense PredictionsChen, Zhe, Yuchen Duan, Wenhai Wang, Junjun He, Tong Lu, Jifeng Dai, and Yu Qiao. arXiv preprint arXiv:2205.08534, 2022这是该 README 明确引用的原始文献。其核心动机是普通 Vision TransformerViT以固定 patch如 16×16切分图像并展开成序列建模全局关系虽然擅长捕获长距离依赖却天然缺乏密集预测语义分割、目标检测等所必需的多尺度、高分辨率空间细节。ViT-Adapter 通过引入空间先验模块Spatial Prior Module, SPM与Injector / Extractor 交互模块让 CNN 分支与 ViT 分支双向交换信息在不破坏预训练权重语义的前提下把纯 ViT 改造为能输出四层金字塔特征的适配器骨干从而无缝接入 UPerNet 等分割头。PaddleSeg 的实现以官方 ViT-Adapter 仓库为蓝本代码中明确标注了 heavily based on https://github.com/czczup/ViT-Adapter见 vit_adapter.py并将其注册到模型管理器中可通过 YAML 配置直接使用。前置条件安装 ms_deform_attn 自定义算子ViT-Adapter 的 Injector/Extractor 依赖多尺度可变形注意力Multi-Scale Deformable Attention而该算子需要编译自定义 CUDA 库。按原 README 的要求使用本模型前必须先完成以下步骤下载官方预编译的算子包ms_deform_attn.zipPaddleSeg 官方资源托管地址https://paddleseg.bj.bcebos.com/dygraph/customized_ops/ms_deform_attn.zip解压后参照压缩包内附带的 readme 完成ms_deform_attn库的编译与安装。该库是模型前向的硬依赖在 vit_adapter_layers.py 中Injector、Extractor均通过from paddleseg.models.layers.ms_deformable_attention import MSDeformAttn引入该算子。若未安装模型初始化或前向会直接报错因此请务必在训练前完成安装。配置解读upernet_vit_adapter_tiny_ade20k_512x512_160k.yml官方在 ADE20K 上提供了一个开箱即用的训练配置 upernet_vit_adapter_tiny_ade20k_512x512_160k.yml下面逐段剖析。基础继承与全局超参该配置通过_base_继承 configs/base/ade20k.yml后者定义了 ADE20K 数据集类型type: ADE20K、数据集根目录data/ADEChallengeData2016/等公共信息。当前配置覆盖了两项关键全局参数batch_size: 4 # total batch size is 16 iters: 160000batch_size: 4单卡 batch size 为 4注释明确说明总 batch size 为 16即默认按 4 卡分布式训练展开iters: 160000总训练迭代数为 160k而非 epoch 数PaddleSeg 统一以迭代为单位调度学习率。数据增强管线train_dataset / val_dataset训练侧继承 ADE20K 的ResizeStepScaling与RandomPaddingCrop思路并显式给出参数train_dataset: transforms: - type: ResizeStepScaling min_scale_factor: 0.5 max_scale_factor: 2.0 - type: RandomPaddingCrop crop_size: [512, 512] - type: RandomHorizontalFlip - type: RandomDistort brightness_range: 0.4 contrast_range: 0.4 saturation_range: 0.4 - type: Normalize mean: [0.485, 0.456, 0.406] std: [0.229, 0.224, 0.225]增强操作参数作用ResizeStepScalingmin_scale_factor: 0.5、max_scale_factor: 2.0在 0.5×2.0× 之间随机缩放原图增强尺度鲁棒性基础配置中还带有scale_step_size: 0.25的步长RandomPaddingCropcrop_size: [512, 512]随机裁剪/填充至 512×512配合 Resize 形成多尺度训练RandomHorizontalFlip—随机水平翻转RandomDistort各range: 0.4随机扰动亮度/对比度/饱和度NormalizeImageNet 均值/方差标准化到[0.485, 0.456, 0.406]/[0.229, 0.224, 0.225]验证侧则保持分辨率以贴近真实评测Resize到[2048, 512]keep_ratio: True、size_divisor: 32保证尺寸能被 32 整除以适配骨干下采样倍数再做同样标准化。滑动窗口测试配置test_configtest_config: is_slide: True crop_size: [512, 512] stride: [341, 341]由于 ViT-Adapter 使用可变形注意力大图直接整图推理显存开销高此处开启滑窗推理以 512×512 窗口、341 步长滑动裁剪对重叠区域的结果进行融合从而在 2048×512 的高分辨率验证图上稳定产出高质量预测。优化器与学习率调度ViT-Adapter 这类 Transformer 微调惯用 AdamW 而非 SGD基础配置中的 SGD 在此被覆盖optimizer: _inherited_: False type: AdamW weight_decay: 0.01 lr_scheduler: type: PolynomialDecay learning_rate: 6.0e-5 end_lr: 0 power: 1.0 warmup_iters: 1500 warmup_start_lr: 1.0e-6_inherited_: False关闭对基础配置优化器字段的继承避免momentum: 0.9、weight_decay: 4.0e-5等 SGD 参数被带入学习率 6e-5采用多项式衰减power: 1.0即线性衰减到 0并配 1500 次迭代的 warmup起始 1e-6这是 Transformer 微调防止早期震荡的标准做法。损失函数loss: types: - type: CrossEntropyLoss avg_non_ignore: False coef: [1, 0.4]主损失 辅助损失的加权组合UPerNet 头输出主 logits 与辅助 logits因配置开启aux_loss系数分别为 1.0 与 0.4辅助损失帮助深层特征更快收敛。模型结构配置model: type: UPerNetViTAdapter backbone: type: ViTAdapter_Tiny pretrained: https://paddleseg.bj.bcebos.com/dygraph/backbone/deit_tiny_patch16_224.zip backbone_indices: [0, 1, 2, 3] channels: 512 pool_scales: [1, 2, 3, 6] dropout_ratio: 0.1 aux_loss: True aux_channels: 256参数取值含义依据 upernet_vit_adapter.py 的构造函数typeUPerNetViTAdapter分割模型由manager.MODELS.add_component注册upernet_vit_adapter.pybackbone.typeViTAdapter_Tiny骨干工厂函数由manager.BACKBONES.add_component注册vit_adapter.pybackbone.pretraineddeit_tiny_patch16_224加载 DeiT-Tiny 预训练权重ViT 主干部分直接复用其语义backbone_indices[0, 1, 2, 3]取骨干 4 个金字塔输出1/4、1/8、1/16、1/32全部喂给 UPerNet 头channels512UPerNet 头内部特征通道数pool_scales[1, 2, 3, 6]PPM金字塔池化模块的 4 个池化尺度dropout_ratio0.1分割头输出前的 Dropout2D 比例aux_loss/aux_channelsTrue / 256是否启用辅助分割头及其通道数源码解析UPerNetViTAdapter 整体前向流程UPerNetViTAdapter 是ViT-Adapter 骨干 UPerNet 头的封装backbone(x)一次前向得到 4 层特征feats对应backbone_indices按索引取出特征送入UPerNetHead所有 logits 经双线性插值上采样回输入分辨率后返回。UPerNetHead内部upernet_vit_adapter.py融合了 PSPNet 的PPM与 FPN 的自上而下路径PPMPyramid Pooling Module对最深层特征分别做 1×1、2×2、3×3、6×6 的自适应平均池化再经 1×1 卷积与双线性上采样与原始特征 concat 后过 bottleneckPPM 实现捕获多尺度上下文FPN 路径用 lateral conv1×1把浅层特征对齐到 512 通道自顶向下逐级相加融合再对每级做 3×3 卷积最终 concat 所有层级过fpn_bottleneck与conv_seg得到主 logits辅助损失训练模式下self.training为真另取第三层特征inputs[2]经 3×3 卷积输出辅助 logits与主 logits 一起返回upernet_vit_adapter.py。源码解析ViTAdapter 骨干网络SpatialPriorModuleSPM注入空间先验SPM 是一个轻量 CNN 分支stem由 3 个 stride1 的 3×3 卷积加两个下采样第一个卷积 stride2 MaxPool构成随后conv2/conv3/conv4逐级 stride2 下采样最后用 4 个 1×1 卷积fc1~fc4把各层通道对齐到embed_dim输出 1/4、1/8、1/16、1/32 四层特征c1~c4。CNN 天然具备归纳偏置与高分辨率细节正好弥补 ViT 的短板这部分输出被作为空间先验。Injector / Extractor / InteractionBlock双向信息交互InteractionBlock 是 ViT-Adapter 的核心单元每个交互块包含一对双向注意力桥Injector以 ViT 的 patch 序列为 query、SPM 的多尺度特征为 key/value用可变形注意力把空间细节注入ViT 各层Injector 实现Extractor反过来以 SPM 特征为 query、ViT 特征为 key/value把 ViT 的全局语义抽取回 CNN 分支Extractor 还带一个ConvFFN含深度可分离卷积 DWConv进一步增强局部建模Extractor 实现。在骨干前向中vit_adapter.pyinteraction_indexes[[0,2],[3,5],[6,8],[9,11]]把 12 层 ViT Block 分成 4 组每组由一个 InteractionBlock 负责注入 → 若干 ViT Block → 抽取完成后把 ViT 特征 reshape 回 2D形成 4 个尺度的中间输出。MSDeformAttn多尺度可变形注意力MSDeformAttn 是上述交互的底层算子每个 query 在参考点附近按学习的偏移采样n_points默认 4个点跨n_levels个特征层级聚合并把通道按ratio缩放后再投影回原维度。相比全局注意力其复杂度只随采样点数线性增长这也是模型能处理高分辨率分割图的关键。部署时需要配套安装前文所述的自定义算子库。金字塔特征输出最后SPM 分支与 ViT 分支的 4 层特征逐级相加add_vit_featureTrue见 vit_adapter.py再经 4 个 SyncBatchNormnorm1~norm4输出f1(1/4) ~ f4(1/32)四层特征——这正是feat_channels [embed_dim] * 4与backbone_indices[0,1,2,3]能一一对应的原因。训练、评估、预测与导出实战1. 数据准备按 configs/base/ade20k.yml 的要求将 ADE20KADEChallengeData2016数据集放置于data/ADEChallengeData2016/下保持标准的images/与annotations/目录结构。2. 训练在完成 ms_deform_attn 安装后使用 PaddleSeg 标准训练入口python tools/train.py \ --config configs/vit_adapter/upernet_vit_adapter_tiny_ade20k_512x512_160k.yml \ --do_eval \ --use_vdl \ --save_dir output/vit_adapter要点--do_eval会在训练中周期评估并保留最优模型配置默认 batch_size4总 16若单卡显存不足可下调batch_size并相应调整学习率预训练权重由backbone.pretrained指定训练时自动下载加载建议使用多卡训练以获得 160k iters 下的稳定收敛与性能复现。3. 评估python tools/val.py \ --config configs/vit_adapter/upernet_vit_adapter_tiny_ade20k_512x512_160k.yml \ --model_path output/vit_adapter/best_model/model.pdparams评估时自动启用test_config中的滑窗策略512×512、stride 341在 2048×512 的验证分辨率上计算 mIoU。4. 预测python tools/predict.py \ --config configs/vit_adapter/upernet_vit_adapter_tiny_ade20k_512x512_160k.yml \ --model_path output/vit_adapter/best_model/model.pdparams \ --image_path demo.png \ --save_dir output/result5. 模型导出python tools/export.py \ --config configs/vit_adapter/upernet_vit_adapter_tiny_ade20k_512x512_160k.yml \ --model_path output/vit_adapter/best_model/model.pdparams导出后得到可用于 Paddle Inference / Paddle Lite / FastDeploy 部署的静态图模型。性能参考ADE20K原 README 给出了官方在 ADE20K 验证集上的训练结果160k 迭代ModelBackboneResolutionTraining ItersmIoUmIoU (flip)mIoU (msflip)UPerNetViTAdapterViT-Adapter-Tiny512x51216000041.90%--对应模型权重、训练日志与 VisualDL 可视化曲线均可从原 README 中列出的官方链接获取。其中 mIoU 41.90% 为默认测试协议单尺度、无翻转下的结果表中flip水平翻转 TTA与msflip多尺度翻转 TTA两列留空说明该配置下官方未提供对应评测数值读者如需对比可在导出模型后自行按滑动窗口协议评测。总结ViT-Adapter 在 PaddleSeg 中是一套完整的Transformer 骨干 分割头方案SPM 提供空间先验、Injector/Extractor 实现 CNN 与 ViT 的双向交互、MSDeformAttn 控制计算开销最终输出四层金字塔特征供 UPerNet 头融合。本文从官方配置出发逐参数解释了数据增强、AdamW 调度、滑窗测试与损失组合并对照源码理清了从骨干到分割头的完整前向链路。若要在自己的数据集上使用该模型只需修改train_dataset/val_dataset与num_classes并沿用本文的训练、评估、预测与导出流程即可。赞分享人工智能计算机视觉预训练【免费下载链接】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 UPerNet 实战指南统一感知解析网络UPerNet在 Cityscapes 上的配置、训练与源码解读PaddleSeg UPerNet 实战指南统一感知解析网络UPerNet在 Cityscapes 上的配置、训练与源码解读 UPerNetUnifie人工智能计算机视觉预训练PaddleSeg 中的 EfficientFormerV2MobileNet 级轻量视觉 Transformer 语义分割实战指南PaddleSeg 中的 EfficientFormerV2MobileNet 级轻量视觉 Transformer 语义分割实战指南 EfficientFor人工智能计算机视觉预训练CANN/GE异步运行图APIRunGraphAsynca nameZH CN_TOPIC_0000002508677541 /a 产品支持情况a namesection19人工智能深度学习模型编译模型优化编译器Ascend上一篇Tenacity音频编辑器终极指南如何与其他开源工具完美协同工作下一篇JuNest高级用法跨架构运行、目录绑定与系统集成创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表