【数据增广与微调】

数据增强

什么是数据增强

  • 在一个已有数据集里面,进行不同的变换,使得数据有更多的多样性
    • 在语音里面加入各种不同的背景噪音
    • 改变图片的颜色和形状

【数据增广与微调】_第1张图片
如何使用数据增广进行训练

  • 一般是在训练时在线生成的,而不是预先存储
  • 通常是随机进行数据增广

常见的数据增广方法

① 翻转
【数据增广与微调】_第2张图片
② 切割

  切割一般是在图片中切割一块出来,然后将它变成固定的形状(之所以是固定的形状,是因为卷积神经网络的输入通常是固定的,一般是224*224)

  • 通过对图像进行随机裁剪,使物体以不同的比例出现在图像的不同位置,从而降低模型对目标位置的敏感性

  • 如何进行切割(随机性原理)

    • 随机高宽比:比如在某一个区间(比如[3/4,4/3])之间随机取一个数来作为切割部分的高宽比
    • 随机大小:比如在某一个区间(比如[8%,100%])之间随机取一个数来作为切割部分的大小(切割部分占原始图像的比例)
    • 随机位置:给定截取部分的形状大小,然后在原始图像上面进行随机切割

【数据增广与微调】_第3张图片
③ 颜色

改变颜色中四个比较重要的指标

  • 色调
  • 饱和度
  • 对比度
  • 明亮度
    【数据增广与微调】_第4张图片
    ④ 其他
  • 高斯模糊
  • 将图片中的某一块抹掉
  • 对整个图片进行变形
  • 锐化
  • 等等

  某一种数据增强的方法有用,很多时候是因为测试集中某些图片和原始图片通过这种数据增强的方式处理之后的效果类似

  • 很多时候应该从结果向前推,通过对现场部署的情况或者测试集可能发生的变化进行分析,由此来反推所需要进行的数据增强
  • 在实践中,通常结合多种图像增广方法

总结

  • 数据增广通过变形数据来获取多样性从而使得模型泛化性能更好
  • 常见图片增广包括翻转、切割、变色

微调

  • 微调是现阶段深度学习中最重要的一个技术

标注一个数据集很贵

  • ImageNet 标注了一千多万张图片,但是实际使用的只有 120 万张图片,类别数是 1000 ,它算是一个比较大的数据集
  • Fashion-MNIST 一共有 6 万张图片,类别数是 10 , 算是一个比较小的数据集
  • 通常自己的数据集规模通常在这两者之间,大概在 5 万张图片左右,类别数大概是 100 左右,平均下来每一类物体大概有 500 张图片左右
  • 但是自己标注好的数据集所训练出的模型效果又不一定要比ImageNet训练出来的好

适合 ImageNet 的复杂模型可能会在自己的数据集上过拟合,另外由于训练样本有限,训练模型的准确性可能无法满足实际要求,解决以上问题有两种解决方案:

  • 1、收集更多的数据。数据集越大越好,但是收集和标记数据可能需要大量的时间和金钱。
  • 2、应用迁移学习(transfer leanring)。将从源数据集学到的知识迁移到目标数据集,通常来说希望在大数据集上训练好的模型能够提取到更通用的图像特征,有助于识别边缘、纹理、形状和对象组合,从而帮助提升在自己数据集上的精度,核心思想是假设模型对整个物体识别有一定的基础的情况下,不需要自己提供太大的数据集就能够获得很好的识别精度,这也是人工智能所追求的目标

网络架构

  • 一个神经网络一般可以分成两块
    • 特征抽取将原始像素变成容易线性分割的特征
    • 线性分类器来做分类
      【数据增广与微调】_第5张图片
      微调
  • 假设现在有一个在源数据集上训练好的模型(这里假设是Imagenet)
  • 对于我们的数据集而言,线性分类器可能无法继续使用(因为标号变了)
  • 但是特征抽取的部分可能对我们的数据集仍然有效(总比随机生成好)
    【数据增广与微调】_第6张图片

微调中的权重初始化

  • 假设我们现在有一个训练好的模型,我们称之为Pre-train(预训练模型)
  • 在我们训练自己的模型时,我们使用与预训练模型相同架构的模型
  • 其中对于特征提取部分我们将其参数直接Copy过来作为初始化参数
  • 对于线性分类部分我们使用随机初始化
    【数据增广与微调】_第7张图片
  • 最终的结果可能是我们只需要进行很少的训练就可以达到预期结果

训练

  • 是一个目标数据集上的正常训川练任务,但使用更强的正则化
    • 使用更小的学习率
    • 使用更少的数据迭代
  • 源数据集远复杂于目标数据,通常微调效果更好

重用分类器权重

  • 源数据集可能也有目标数据中的部分标号
  • 可以使用预训川练好模型分类器中对应标号对应的向量来做初始化

固定一些层

  • 神经网络通常学习有层次的特征表示
    • 低层次的特征更加通用
    • 高层次的特征则更跟数据集相关
  • 可以固定底部一些层的参数,不参与更新
    • 更强的正则

总结

  • 微调通过使用在大数据上得到的预训练好的模型来初始化模型权重来完成提升精度
  • 预训练模型质量很重要
  • 微调通常速度更快、精度更高

你可能感兴趣的:(#,沐神动手学ai学习笔记,深度学习,人工智能)