赞
踩
这次笔记是对夏令营的第三个任务——数据增强原理及其方法的学习而记录的。
关于task2:深度学习和deepfake攻防模型的改进,我没有特地记录该任务的笔记,是因为深度学习之前已经学过了,并且网上有太多质量非常高的笔记;并且模型改进在我学习task1的时候就已经尝试改进过了,虽然在task2期间有尝试换模型、增加学习轮数等操作,但是由于第一次接触kaggle,还不太熟练,导致我直到ddl截止的时候仍有一次修改没跑完,还浪费了很多GPU的使用时间o(╥﹏╥)o,外加我上班没有太多时间做笔记(也懒),因此就不补task2的笔记了(嘿嘿)。
辩不多狡,开始这次的学习:
目录
数据增强其实就是处理现有的数据,将数据进行针对性优化,使其能更好地被模型学习,从而学习到更好的参数,提升模型的泛化性。
以我们这次的任务举例,我们的数据就是图片,增强的方法有:
通过这些操作可以提高图像分类、目标检测、图像分割等任务的模型性能。通过对训练数据进行各种变换,可以增加数据的多样性,减少过拟合,提高模型的泛化能力【鲁棒性】。例如,
在比赛中,老师用以下数据增强的方法对训练数据和测试数据进行数据增强:
- train_loader = torch.utils.data.DataLoader(
- FFDIDataset(train_label['path'].head(1000), train_label['target'].head(1000),
- transforms.Compose([
- transforms.Resize((256, 256)),
- transforms.RandomHorizontalFlip(),
- transforms.RandomVerticalFlip(),
- transforms.ToTensor(),
- transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
- ])
- ), batch_size=40, shuffle=True, num_workers=4, pin_memory=True
- )
-
- val_loader = torch.utils.data.DataLoader(
- FFDIDataset(val_label['path'].head(1000), val_label['target'].head(1000),
- transforms.Compose([
- transforms.Resize((256, 256)),
- transforms.ToTensor(),
- transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
- ])
- ), batch_size=40, shuffle=False, num_workers=4, pin_memory=True
- )
图像大小调整:使用transforms.Resize((256, 256))
将所有图像调整到256x256像素的尺寸,这有助于确保输入数据的一致性。
随机水平翻转:transforms.RandomHorizontalFlip()
随机地水平翻转图像,这种变换可以模拟物体在不同方向上的观察,从而增强模型的泛化能力。
随机垂直翻转:transforms.RandomVerticalFlip()
随机地垂直翻转图像,这同样是为了增加数据多样性,让模型能够学习到不同视角下的特征。
转换为张量:transforms.ToTensor()
将图像数据转换为PyTorch的Tensor格式,这是在深度学习中处理图像数据的常用格式。
归一化:transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
对图像进行归一化处理,这里的均值和标准差是根据ImageNet数据集计算得出的,用于将图像像素值标准化,这有助于模型的训练稳定性和收敛速度。
此外,在学习的时候,我也向代码中再插入其他的训练技术:
- transforms.RandomResizedCrop(224),
- transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.2),
transforms.RandomResizedCrop(size = 224)用于随机裁剪图像并调整其大小。
transforms.ColorJitter通过四个参数,调节改变图像的亮度、对比度、饱和度和色调。
[0.8, 1.2]
中随机选择。意味着图像的亮度会在原始亮度的 80% 到 120% 之间随机变化。[0.8, 1.2]
中随机选择。意味着图像的对比度会在原始对比度的 80% 到 120% 之间随机变化。[0.8, 1.2]
中随机选择。意味着图像的饱和度会在原始饱和度的 80% 到 120% 之间随机变化。[-0.2, 0.2]
中随机选择。意味着图像的色调会在原始色调的 [-0.5, 0.5]
上进行一定范围内的随机变化。但是实际训练结果却不理想,实验了几次,效果甚至有的时候得到的拟合效果还下降了,所以也说明了一点:数据增强不能滥用。
由于实际训练的结果不理想,我去翻阅资料,总结了以下几点不能滥用的原因:
1. 过度增强
过度使用数据增强方法可能会导致生成的训练数据与实际数据分布差异过大,从而影响模型的学习效果,就可能导致模型可能会学习到不真实的特征,导致在真实数据上的表现变差。例如:
2. 不适当的增强
使用不适合特定任务的数据增强方法可能会引入噪声或不相关的变异,影响模型的性能。 可能导致模型可能会对不相关的特征过拟合,导致泛化能力下降。例如:
3. 增强方法不一致
在训练和测试阶段使用不一致的数据增强方法可能会导致模型在测试数据上的表现不佳,可能导致模型在训练数据上表现良好,但在测试数据上表现不佳,导致过拟合。例如:
4. 增强比例不合理
数据增强方法的应用比例不合理,可能会导致某些增强方法的效果被放大或被忽略,可能导致模型可能会对某些特定的增强方法过拟合,而忽略其他重要的特征。例如:
因此,要合理利用数据增强带给我们的提高模型性能和泛化能力的效果。在不知道自己的模型需要哪种方法去增强准确性和鲁棒性的时候,可以通过小样本量去分别测试不同方法的拟合效果,比较其性能指标来选择。
Mixup 是一种数据增强技术,最早由 Harvard 和 Google 的研究人员在 2017 年提出。它通过在训练过程中将两张图像及其对应的标签进行线性混合,从而生成新的训练样本。这种方法可以有效地提高模型的泛化能力,减少过拟合,并增强模型对对抗样本的鲁棒性。
Mixup 的核心思想是将两张图像及其标签进行线性混合,生成新的训练样本。具体来说,给定两张图像 ( ) 和 () 及其对应的标签 () 和 ( ),Mixup 生成的新样本 () 和 () ,通过以下公式计算:
举个例子:
图片 A 是一只猫,标签是 [1, 0](表示这是猫,不是狗),图片 B 是一只狗,标签是 [0, 1](表示这是狗,不是猫),令,则
【图片来源于课程文件】
这意味着新图片是 60% 的猫和 40% 的狗,而新标签表示这张图片有 60% 的概率是猫,40% 的概率是狗。
或者更直观的理解:可以把 Mixup 想象成在调色板上混合两种颜色:
Mixup的优点有:
CutMix 是一种类似于 Mixup的数据增强技术,它通过将两张图像的部分区域进行混合,并相应地混合它们的标签,从而生成新的训练样本。CutMix 的目标是提高模型的泛化能力和鲁棒性,但它采用了一种不同的混合方式。
CutMix 的核心思想是将一张图像的一个矩形区域替换为另一张图像的对应区域,同时混合它们的标签。具体来说,给定两张图像 ( ) 和 () 及其对应的标签 () 和 ( ),CutMix 生成的新样本 () 和 () 通过以下步骤计算:
举个例子:
图片 A 是一只猫,标签是 [1, 0](表示这是猫,不是狗),图片 B 是一只狗,标签是 [0, 1](表示这是狗,不是猫),现在选取一个占图片A总面积30%的矩形区域,则
【图片来源于课程文件】
这意味着新图片是 30% 的猫和 70% 的狗,而新标签表示这张图片有 30% 的概率是猫,70% 的概率是狗。
或者更直观的理解,你有两张不同的图片,你从其中一张图片上切下一个小块,然后把这个小块贴到另一张图片上。这样,你就得到了一个新的拼图,它包含了两张图片的一部分。
CutMix的优点有:
除了课程提到的两种方法以外,我还接触到一些其他数据增强的方法。篇幅太长,就只简单介绍一下原理:
AutoAugment 的核心思想是通过搜索算法自动找到一组最优的数据增强策略。这些策略由一系列数据增强操作及其参数组成:
GridMask 的核心思想是通过在图像上应用规则的网格遮挡,生成新的训练样本。具体来说,GridMask 通过以下步骤生成新的图像:
对抗训练(Adversarial Training)是一种通过生成对抗样本来增强模型鲁棒性的方法。对抗样本是指在原始样本上添加微小扰动,使得模型在这些样本上的预测结果发生显著变化,从而在训练过程中不仅学习到原始样本的特征,还能应对对抗样本的干扰:
这个笔记现在就告一段落了,非常感谢Datawhale AI 夏令营,Datawhale AI 提供给了我一个了解新鲜事物的机会,让我了解到一些前沿科技。这次夏令营恰逢在上班,所以没能抽出很多时间学习。这次task2里面还稍微学习了预训练模型ResNet-18,也了解了一些其他模型,诸如VGG、ViT等可用于图像分类、特征提取、迁移学习的模型,未来要是有时间便把学习一下这些模型,再去做个笔记,但是现在不行,因为现在要紧急下班。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。