本节摘要:图像是微调最成熟的领域。本节以"工业缺陷检测"为例,走一遍图像微调的完整流程:任务定义、数据准备、模型选择、微调训练、评估上线,并给出图像微调的关键经验与常见坑。
阅读完本节,你应当能够:
"给工厂做一套产品缺陷检测"——这是个典型的图像微调任务:预训练模型见过千万张图,但不认识你的产品。微调让它学会"你的产品什么样的算正常、什么样的算缺陷"。图像微调的价值在于用少量产品图,让通用视觉模型变成行业质检员。
分类(这是什么缺陷)、检测(缺陷在哪)、分割(缺陷占多大)是三种常见形态,复杂程度递增。
收集产品图 → 标注缺陷 → 划分数据集 → 选预训练模型 → 微调 → 评估 → 上线
| 要点 | 做法 |
|---|---|
| 数量 | 每类几百张起步 |
| 多样性 | 覆盖不同光线、角度 |
| 均衡 | 正负样本比例合理 |
| 增强 | 旋转、翻转、亮度变换 |
💡 关键直觉:图像微调的效果,一半取决于数据多样性——缺陷样本要覆盖"所有可能出错的样子",否则模型只认识训练时见过的缺陷。
| 场景 | 选择 |
|---|---|
| 数据量小 | 冻结骨干 + 微调分类头 |
| 数据量中等 | 全模型小学习率微调 |
| 与 ImageNet 差异大 | 微调更多层 |
# 1. 加载预训练模型,替换分类头 # 2. 冻结或微调策略按数据量决定 # 3. 数据增强 + 训练 + 验证 # 4. 评估指标按任务选(分类用准确率,检测用 mAP)
⚠️ 常见坑:缺陷样本太少或太单一——模型把"光照变化"当成缺陷,或漏检没见过的缺陷形态。数据多样性与真实场景覆盖是图像微调的生命线。
图像微调有两个反复出现的工程细节。第一是图像尺寸:预训练模型(如 ResNet、ViT、CLIP)都有固定的输入分辨率,迁移时要么 resize 到模型原生尺寸,要么保留高分辨率再走位置编码插值——后者能保住小目标的细节,但显存会涨,需要权衡。第二是数据增强强度:图像任务的增强(随机裁剪、翻转、颜色抖动)通常比文本更激进,但微调数据少时增强过强会让模型"认不出"原图,建议从轻增强开始,观察验证集再逐步加码。
from torchvision import transforms train_tf = transforms.Compose([ transforms.RandomResizedCrop(224), transforms.RandomHorizontalFlip(), transforms.ColorJitter(0.2, 0.2, 0.2), transforms.ToTensor(), ])
一个实用经验:把增强后的样本和原图并排看一眼,确认增强没有破坏语义(比如翻转让文字倒置、裁剪切掉关键部位)。图像微调的失败排查也常回到数据上——先确认标签与图像对应,再看增强管线,最后才怀疑模型与超参。
再补充一个图像微调的经典坑:预训练模型做分类时,最后一层全连接(分类头)的维度与你的类别数不一致,必须重建并随机初始化。常见错误是忘了重建分类头,直接沿用 ImageNet 的 1000 类输出——训练时 loss 正常下降,推理时却报维度错误。重建分类头后,建议先用冻结特征提取的方式训几轮分类头,再放开全模型小学习率微调,收敛更稳。
图像案例完成,下一节最火热的 NLP——指令微调与领域问答。