DynamicViT T-PAMI扩展版深度解析:动态空间稀疏化如何把token剪枝带到ConvNeXt与Swin DynamicViT T-PAMI扩展版深度解析动态空间稀疏化如何把token剪枝带到ConvNeXt与Swin【免费下载链接】DynamicViT[NeurIPS 2021] [T-PAMI] DynamicViT: Efficient Vision Transformers with Dynamic Token Sparsification项目地址: https://gitcode.com/gh_mirrors/dy/DynamicViTDynamicViT 是一个面向视觉模型的动态 token 稀疏化框架NeurIPS 2021 原始版本。其被 T-PAMI 收录的扩展版将方法升级为通用的动态空间稀疏化框架把 token 剪枝从 Vision Transformer 推广到ConvNeXt 与 Swin Transformer并扩展到目标检测、语义分割等下游任务FLOPs 降低超30%吞吐量提升超40%而精度损失控制在0.5%以内。从 token 剪枝到动态空间稀疏化扩展版改了什么NeurIPS 2021 的 DynamicViT 只支持 DeiT、LV-ViT 这类标准 Vision TransformerT-PAMI 期刊版则回答了一个更普遍的问题按输入动态删掉冗余空间位置这件事能不能做成所有视觉网络通用的模块答案是能对比如下维度NeurIPS 2021DynamicViTT-PAMI 扩展版动态空间稀疏化支持网络DeiT、LV-ViT 等 ViT 家族新增 ConvNeXtCNN、Swin Transformer下游任务图像分类新增目标检测、语义分割剪枝对象ViT 的 token 序列通用空间特征图天然适配 CNN保留率设计ρ、ρ²、ρ³ρ、ρ−0.2、ρ−0.4代码层面保留率与剪枝位置的设定集中在 infer.py 中ViT 系网络用KEEP_RATE1 [ρ, ρ², ρ³]ConvNeXt/Swin 则用KEEP_RATE2 [ρ, ρ−0.2, ρ−0.4]剪枝点PRUNING_LOC设在各个 stage 交界处例如 ConvNeXt-Tiny 在[1,2,3]Swin-Small 在[2,4,6]。对应的三套网络实现分别位于models/dyvit.py、models/dyconvnext.py、models/dyswin.py。动态空间稀疏化如何工作网络自己决定剪哪里 1. 输入依赖的动态打分在每个剪枝点网络会额外预测一张空间重要性分数图分数高的位置通常是前景、物体主体保留分数低的冗余区域背景、纹理重复区被剪掉。也就是说剪哪些位置不是固定的而是每张图都不一样——这正是动态二字的含义。上图是viz_example.ipynb可视化 notebook 的官方输出示例从左到右是网络逐层剪枝的过程背景区域逐渐消失而木勺前景始终完整保留。2. 师生蒸馏 比例约束损失训练时无需两阶段流程直接用一个未剪枝的教师网络做知识蒸馏。losses.py 中提供了两个损失模块DistillDiffPruningLoss_dynamic面向 ViT 家族做 token 级别的特征对齐ConvNextDistillDiffPruningLoss面向 ConvNeXt做空间位置级别的对齐。总损失由三部分构成分类 KL 蒸馏 token/特征蒸馏 比例约束损失ratio_weight控制其中比例约束会把各剪枝层实际的保留率拉向目标 ρ让网络学会按预算剪枝。ImageNet 分类性能清单精度几乎不掉算力省三成扩展版提供的 ImageNet 预训练模型主要指标如下ρ 为 base_rate模型ρTop-1Top-5FLOPsDynamicViT-DeiT-S0.779.3294.682.9GDynamicViT-DeiT-B0.781.4395.4611.4GDynamicViT-LVViT-M0.783.8296.588.5GDynamicCNN-TConvNeXt-T0.781.5995.723.6GDynamicCNN-SConvNeXt-S0.782.5796.295.8GDynamicCNN-BConvNeXt-B0.983.9696.7611.9GDynamicSwin-TSwin-T0.780.9195.424.0GDynamicSwin-SSwin-S0.783.2196.336.9GDynamicSwin-BSwin-B0.783.4396.4512.1G⚡ 另一个实用亮点推理时保留率可以自由调节--base_rate参数同一套权重就能在不同算力预算下灵活权衡速度与精度无需重新训练。3 步快速上手 DynamicViT 本地部署 第 1 步获取代码与安装依赖git clone https://gitcode.com/gh_mirrors/dy/DynamicViT cd DynamicViT核心依赖torch1.8.0、torchvision0.9.0、timm0.3.2、fvcore后者用于 FLOPs 统计实现在calc_flops.py。第 2 步单卡评估预训练模型python infer.py --data_path /path/to/ILSVRC2012/ --model convnext-t \ --model_path /path/to/model --base_rate 0.7--model支持deit-s、deit-b、lvvit-s/m、convnext-t/s/b、swin-t/s/b等名称--base_rate越小稀疏度越高、推理越快。第 3 步从零训练稀疏网络8 卡示例python -m torch.distributed.launch --nproc_per_node8 --use_env main.py \ --output_dir logs/dynamic_conv-t --model convnext-t --input_size 224 \ --batch_size 128 --data_path /path/to/ILSVRC2012/ --epochs 120 \ --base_rate 0.7 --lr 4e-3 --drop_path 0.2 --update_freq 4 --lr_scale 0.2训练主流程在main.py与engine.py中Swin/ConvNeXt 还可通过run_with_submitit.py提交到多机集群训练。小结适合谁来用 DynamicViT想给现成的 ViT / ConvNeXt / Swin 模型加速又不想重新设计网络结构——动态空间稀疏化几乎即插即用研究模型压缩、动态推理的工程师与算法同学可把它作为输入自适应剪枝的完整参考实现含训练、蒸馏、评估全流程不想直接跑训练可以打开可视化 notebookviz_example.ipynb或线上演示colab_demo.ipynb几分钟就能直观看到逐层剪枝效果。一句话总结T-PAMI 扩展版让动态 token 剪枝从 ViT 的专属技巧变成了通用视觉骨干网络的标配加速手段。【免费下载链接】DynamicViT[NeurIPS 2021] [T-PAMI] DynamicViT: Efficient Vision Transformers with Dynamic Token Sparsification项目地址: https://gitcode.com/gh_mirrors/dy/DynamicViT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考