花拾录
← 返回知识库

从零训练一个图像分类器:数据标注、增强与过拟合判断的完整链路

人工智能AI2026/09/270 阅读0 评论

一、先明确目标与数据规模

训练图像分类器的第一步不是写模型,而是定义分类体系:每个类别要有清晰、互斥的判定标准。建议先做小规模验证——每类 100~300 张图,跑通全流程后再扩量。类别边界模糊(如"运动风"与"休闲风")会直接导致标注噪声,模型再强也救不回来。

二、数据标注:一致性比数量更重要

常用工具:LabelImg(目标检测)、Label Studio、CVAT,纯分类任务用文件夹分目录即可。

关键实践:

  1. 先写标注规范:用文字定义每个类别的"包含"与"排除",附正反例图。
  2. 双人交叉标注:抽 10% 样本让两人独立标注,计算一致率。若低于 90%,说明规范有歧义,先改规范再继续。
  3. 划分数据集:训练/验证/测试通常按 7:1.5:1.5 或 8:1:1。划分必须在标注完成后按样本随机进行,避免同一来源的相似图跨集泄漏(比如同一段视频的连续帧)。
  4. 测试集只碰一次:调参阶段只看验证集,最终评估才用测试集。

三、数据增强:让小数据也能泛化

增强的目的是模拟真实场景中的变化,而不是无意义地扭曲图像。

  • 基础且安全:随机水平翻转、小角度旋转(±15°)、随机裁剪、亮度/对比度微调。
  • 谨慎使用:垂直翻转(对自然图像通常不合理,对卫星图可能合理)、大角度旋转、强色彩抖动。
  • 注意标签一致性:分类任务中翻转不改变标签;但如果类别依赖方向(如"左转箭头"),翻转会破坏标签。

在 PyTorch 中,torchvision.transforms 提供 RandomHorizontalFlip、RandomResizedCrop、ColorJitter 等,训练时开启、验证与测试时关闭(只做 resize 和归一化)。归一化参数应与预训练模型一致,例如 ImageNet 的均值 [0.485, 0.456, 0.406]、标准差 [0.229, 0.224, 0.225]。

四、训练与过拟合判断

小数据集建议用迁移学习:加载预训练骨干网络(如 ResNet 系列),替换最后的全连接层为你的类别数,先冻结骨干只训练分类头,再解冻微调。

判断是否过拟合,看三条曲线:

  • 训练损失持续下降,验证损失先降后升:典型过拟合。
  • 训练准确率接近 100%,验证准确率明显偏低且差距扩大:过拟合。
  • 训练与验证损失都高且不降:欠拟合,应增大模型或延长训练。

应对过拟合的手段按性价比排序:

  1. 增加数据或更强的合理增强;
  2. 使用预训练权重(最有效);
  3. 加入权重衰减(如 AdamW 的 weight_decay)与 Dropout;
  4. 早停:监控验证损失,连续若干轮不改善就停止并回滚到最佳权重;
  5. 降低模型容量。

五、评估与常见坑

类别不平衡时,准确率会失真,应看每类精确率/召回率和混淆矩阵。常见坑包括:

  • 数据泄漏:同一物体的多张照片分到了训练和测试集;
  • 增强用在验证集上,导致指标虚高;
  • 只调模型不查数据,忽略标注错误。

先保证数据干净、划分正确,再谈模型结构,这是从零训练分类器最稳的路径。

评论(0)

  • 还没有评论,来抢沙发~

相关文章