ViT微调只调对3个参数:timm里从90%爬到98%的完整路径

ViT微调只调对3个参数:timm里从90%爬到98%的完整路径 ViT微调只调对3个参数timm里从90%爬到98%的完整路径【免费下载链接】pytorch-image-modelsThe largest collection of PyTorch image encoders / backbones. Including train, eval, inference, export scripts, and pretrained weights -- ResNet, ResNeXT, EfficientNet, NFNet, Vision Transformer (ViT), MobileNetV4, MobileNet-V3 V2, RegNet, DPN, CSPNet, Swin Transformer, MaxViT, CoAtNet, ConvNeXt, and more项目地址: https://gitcode.com/GitHub_Trending/py/pytorch-image-models预训练ViT换个数据集准确率直接从95%掉到85%问题通常不在模型而在微调时学习率、增强和正则化没配合好。本文基于 pytorch-image-modelstimm讲清楚微调的三个核心杠杆帮你把掉下去的准确率重新拉回来。读完你将能够给ViT微调配出一套不冲掉预训练知识的学习率和余弦调度用AutoAugment与随机擦除搭出适配下游任务的增强管线通过EMA、DropPath和标签平滑压住过拟合快速上手环境与数据管线一次配齐先把仓库拉下来装好依赖timm自带从ResNet到ViT、Swin、ConvNeXt的完整骨干库微调脚本和数据工具都在仓库根目录git clone https://gitcode.com/GitHub_Trending/py/pytorch-image-models cd pytorch-image-models pip install -r requirements.txt数据侧不用手写Datasetcreate_dataset加create_loader两行就能产出带增强的训练批from timm.data import create_dataset, create_loader dataset create_dataset(rootpath/to/data, splittrain, class_mappath/to/class_map.txt) loader create_loader(dataset, input_size(3, 224, 224), batch_size32, is_trainingTrue, augmentTrue)⚠️ 注意ViT默认用ImageNet的均值/标准差归一化自定义数据若颜色分布差异大建议单独核算这两个值否则第一步就白跑。杠杆一学习率与余弦调度怎么定现象训练头几个epoch损失曲线剧烈震荡甚至直接发散。原因微调学习率开大了梯度把预训练权重冲掉同时缺少预热第一步的更新量对随机初始化的分类头来说过于激进。建议顺序学习率取5e-5到1e-4区间越小越保守分类头随机初始化时别一上来就用1e-4权重衰减0.05左右create_optimizer_v2会自动把bias和BN参数排除在衰减之外余弦退火总轮数30轮左右预热5轮学习率最低衰减到1e-6from timm.optim import create_optimizer_v2 from timm.scheduler import create_scheduler_v2 opt create_optimizer_v2(model, optadamw, lr5e-5, # 建议5e-5~1e-4 weight_decay0.05) sched create_scheduler_v2(opt, schedcosine, num_epochs30, warmup_epochs5, min_lr1e-6, warmup_lr1e-6) 预热线性爬升、后半程余弦平滑下降的组合是多数大规模视觉模型收敛最稳的形态实现见timm/scheduler/scheduler_factory.py。杠杆二数据增强管线怎么搭现象验证集精度上不去、换几张相似图就翻车。原因模型对背景、光照、遮挡过于敏感训练时见的世界太干净。增强策略不必从零调直接选被反复验证过的预设即可rand-m9-mstd0.5-inc1RandAugment强度9、均值0.5多数分类任务的首选颜色抖动0.4轻微扰动即可过大反而伤精度随机擦除Random Erasing概率0.25、模式pixel模拟前景被遮挡的情况对ViT这类注意力模型尤其有效插值用bicubic与ViT预训练阶段保持一致from timm.data import create_transform t create_transform(input_size(3, 224, 224), is_trainingTrue, auto_augmentrand-m9-mstd0.5-inc1, color_jitter0.4, re_prob0.25, re_modepixel, interpolationbicubic)若下游数据本身有强领域偏移如医学影像、卫星图建议再叠加领域内常用的几何变换而不是继续堆强度。杠杆三正则化与模型EMA现象训练精度98%验证精度只有92%。原因模型死记了训练样本泛化部分没练出来。三层防线建议全开DropPath随机深度训练时随机丢弃整个残差分支在create_model里传drop_path_rate0.1~0.2比全连接层Dropout更适配Transformer结构标签平滑0.1即可阻止模型把置信度打到1.0模型EMA维护一份权重的指数滑动平均副本验证和导出都用EMA权重能显著平滑后期抖动from timm.utils import ModelEmaV3 from timm.loss import LabelSmoothingCrossEntropy ema ModelEmaV3(model, decay0.9998) # decay建议0.9998~0.9999 criterion LabelSmoothingCrossEntropy(smoothing0.1) # 训练循环中每个batch后 ema.update(model)EMA实现见timm/utils/model_ema.py完整训练流程可参考仓库根目录的train.py其中梯度裁剪、AMP、EMA验证都是现成的。避坑指南微调路上最常踩的4个坑问题现象可能原因可执行对策过拟合训练/验证精度差距越拉越大正则化不足或数据太少drop_path_rate提到0.2加增强权重衰减上调到0.1配早停patience 5~10轮损失曲线前期锯齿状抖动学习率偏大或缺预热学习率降到3e-5warmup_epochs加到5~10加clip_grad_norm_(model.parameters(), 1.0)精度长期平台期不动学习率下限太高或轮数不够min_lr压到1e-6以下总轮数延长1.5倍再观察推理/验证太慢全精度前向、未编译用torch.cuda.amp.autocast()半精度推理model torch.compile(model)或换更小变体小结与下一步微调ViT本质上就是三件事学习率调得稳小lr余弦预热、增强见得杂RandAugment随机擦除、正则压得住DropPath标签平滑EMA。参数都有推荐区间照着仓库脚本起步再微调即可。想继续深挖可以看这三个方向数据量充足时放开全部层微调或给backbone与分类头分配不同学习率用torch.compile配合AMP把训练吞吐再提一档尝试更大变体如vit_large_patch16_224或知识蒸馏压缩你在微调中踩过哪个坑欢迎在留言区说说你的配置和结果互相参考。【免费下载链接】pytorch-image-modelsThe largest collection of PyTorch image encoders / backbones. Including train, eval, inference, export scripts, and pretrained weights -- ResNet, ResNeXT, EfficientNet, NFNet, Vision Transformer (ViT), MobileNetV4, MobileNet-V3 V2, RegNet, DPN, CSPNet, Swin Transformer, MaxViT, CoAtNet, ConvNeXt, and more项目地址: https://gitcode.com/GitHub_Trending/py/pytorch-image-models创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考