ARTICLE DETAIL

资讯详情

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

ViT 微调指南:数据量定冻结策略,三旋钮调出高准确率

ViT 微调指南:数据量定冻结策略,三旋钮调出高准确率 ViT 微调指南数据量定冻结策略三旋钮调出高准确率【免费下载链接】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解决在 pytorch-image-modelstimm里做 ViT 微调、换到自定义数据后准确率上不去的问题先看数据量决定冻哪些层再调学习率、数据增强、正则化三个旋钮出问题按症状排查。全文给出完整的决策与诊断路径。 先判断你的数据量适合哪种微调结论先说冻结多少层由数据量决定而不是由模型大小决定。ViT 的 12 个 encoder block见 timm/models/vision_transformer.py参数贵、易过拟合数据少时全量微调基本等于把预训练知识冲掉。数据量冻结策略学习率量级Drop Path 1 万冻结底部 10~12 个 block只训顶部 1~2 个 block 分类头1e-5 ~ 2e-5分类头可放大 10 倍0.0 ~ 0.11 万 ~ 10 万全部解冻2e-5 ~ 5e-50.1 10 万全部解冻全量微调5e-5 ~ 1e-40.1 ~ 0.2两个补充点分类头永远是新初始化的永远要训且可以比 encoder 用更大的学习率。数据量卡在临界区间时先用小学习率全量跑发现过拟合再回退到冻结方案比一开始就保守更安全。️ 三个旋钮学习率、增强、正则化1️⃣ 学习率从小区间起步必配 warmup模型按数据量选好冻结方案后学习率直接取上表对应区间。ViT 对大学习率非常敏感第一 epoch loss 跳变甚至 NaN多半是学习率大了 5~10 倍直接降到 3e-5 重试。调度推荐余弦退火 warmup工厂实现见 timm/scheduler/总轮数 30 轮左右warmup 5 轮min_lr收到 1e-6优化器用 AdamW权重衰减 0.05如果发现 warmup 结束后 loss 仍上下震荡说明 warmup 太短拉长到 8~10 轮如果 loss 一路平走、acc 纹丝不动多半是学习率太小或层冻多了。2️⃣ 数据增强够用就好别堆砌增强的作用是让模型学不到死记硬背的捷径而不是越多越强。一组在 timm 里开箱即用的推荐配置参数值作用自动增强rand-m9-mstd0.5-inc1RandAugment主力增强color_jitter0.4颜色抖动re_prob / re_mode0.25 /pixel随机擦除兼作正则interpolationbicubicViT 对插值方式敏感别用 nearest出现什么信号说明调错了val acc 停滞但 train acc 还在涨 → 增强不够把re_prob加到 0.3 或提高 RandAugment 的 mstdloss 收敛明显变慢、前几轮 acc 低得离谱 → 增强过强把 color_jitter 降到 0.3 以下。3️⃣ 正则化Drop Path、标签平滑、EMA 三件套Drop Pathdrop_path_rate设 0.1 起步过拟合时加到 0.2。它是按深度线性递增的随机深度比全连接层 dropout 更适合 Transformer。标签平滑LabelSmoothingCrossEntropy(smoothing0.1)防止模型对预训练分布过度自信。EMA维护一份权重的指数滑动平均衰减率取 0.9999timm/utils/model_ema.py 的ModelEmaV3默认值。验证和导出用 EMA 权重不用原始权重通常白捡 0.3~1 个点。训练循环核心就这么短model_ema ModelEmaV3(model, decay0.9999) for x, y in loader: out model(x) loss criterion(out, y) loss.backward() optimizer.step() optimizer.zero_grad() model_ema.update(model) 不收敛、过拟合、推理慢按症状查别瞎调参先看症状对号入座一次只改一个变量症状第一怀疑对应手段前 1 epoch loss 不降或出 NaN学习率过高、归一化不一致降到 3e-5确认用 ImageNet 均值/标准差归一化loss 震荡warmup 完仍不平稳warmup 太短、调度太激进warmup 拉到 8~10 轮换余弦退火train acc 接近 100%val 不动过拟合drop_path 加到 0.2re_prob0.25标签平滑 0.1改用 EMA 权重评估train、val 双双低迷冻得太多 / 学习率太小多解冻 2 个 block学习率上调一档确认分类头在可训练状态推理慢裸 eager 推理torch.compile(model) 混合精度或换更小变体vit_small、蒸馏版排查顺序建议先确认归一化和数据管道错得最冤再动学习率最后才碰增强和正则。 还想更进一步分层学习率衰减timm.optim 里的param_groups_layer_decay可以给不同深度 block 分配不同学习率大数据量全量微调时收益明显。蒸馏用预训练 ViT 当教师在小数据集上蒸馏一个小一号的学生模型数据少时比硬微调更稳。高分辨率训练vit_base_patch16_224在 384/448 输入下微调适合精细分类任务代价是显存翻倍。把数据量定冻结、三个旋钮调到位大多数微调困境都能解掉剩下的交给症状表。【免费下载链接】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),仅供参考
返回列表