在Kaggle视觉竞赛中,数据扩增(Data Augmentation)是不可少的环节。数据扩增可以增加训练集的样本,同时也可以有效环节模型过拟合的情况,也可以给模型带来的更强的泛化能力。本文将全面介绍Kaggle视频竞赛中各类数据扩增方法。

数据扩增方法

  • 数据扩增为什么有用?

在深度学习模型的训练过程中,数据扩增是必不可少的环节。现有深度学习的参数非常多,CNN模型可训练的参数量基本上都是万到百万级别,而训练集样本的数量很难有这么多。

其次数据扩增可以扩展样本空间,假设现在的分类模型需要对汽车进行分类,左边的是汽车A,右边为汽车B。如果不适用任何数据扩增方法,CNN模型会从汽车车头的角度来进行判别,而不是汽车具体的区别。

  • 数据扩增怎么做?

数据扩增是对读取进行数据增强的操作,所以需要在数据读取的时候完成。

此外由于数据扩增有一定的随机性,相同的图片经过数据扩增可能得到不同的图片。下面是Pytoch进行读取和数据扩增的方法:

class QRDataset(Dataset):def __init__(self, img_path, img_label, transform=None):self.img_path = img_pathself.img_label = img_label if transform is not None:self.transform = transformelse:self.transform = Nonedef __getitem__(self, index):start_time = time.time()img = Image.open(self.img_path[index]).convert('RGB')if self.transform is not None:img = self.transform(img)return img,torch.from_numpy(np.array(self.img_label[index]))def __len__(self):return len(self.img_path)
  • 有哪些数据扩增方法?

数据扩增方法有很多:从颜色空间、尺度空间到样本空间,同时根据不同任务数据扩增都有相应的区别。

对于图像分类,数据扩增一般不会改变标签;对于物体检测,数据扩增会改变物体坐标位置;对于图像分割,数据扩增会像素标签;

同时为了深入浅出的讲解数据扩增方法,本文选择以图像分类为例,列举各种数据扩增方法。其他视觉任务可以以此类推,举一反三。

01 数据扩增库

  • torchvision

https://github.com/pytorch/vision

pytorch官方提供的数据扩增库,提供了基本的数据数据扩增方法,可以无缝与torch进行集成;但数据扩增方法种类较少,且速度中等;

  • imgaug

https://github.com/aleju/imgaug

imgaug是常用的第三方数据扩增库,提供了多样的数据扩增方法,且组合起来非常方便,速度较快;

  • albumentations

https://albumentations.readthedocs.io

是常用的第三方数据扩增库,提供了多样的数据扩增方法,对图像分类、语义分割、物体检测和关键点检测都支持,速度较快。albumentations是我个人比较喜欢的,也是用的次数最多的。

下文我将现有的数据扩增方法分成两种:基础数据扩增方法和进阶数据扩增方法。

02 基本数据扩增方法

基础数据扩增方法指常见的数据扩增方法,且都是标签一致的数据扩增方法,大都出现在torchvision中:

  • transforms.CenterCrop

    对图片中心进行裁剪;

  • transforms.ColorJitter

    对图像颜色的对比度、饱和度和零度进行变换;

  • transforms.FiveCrop

    对图像四个角和中心进行裁剪得到五分图像;

  • transforms.Grayscale

    对图像进行灰度变换;

  • transforms.Pad

    使用固定值进行像素填充;

  • transforms.RandomAffine

    随机仿射变换;

  • transforms.RandomCrop

    随机区域裁剪;

  • transforms.RandomHorizontalFlip

    随机水平翻转;

  • transforms.RandomRotation

    随机旋转;

  • transforms.RandomVerticalFlip

  • 随机垂直翻转;

03 进阶数据扩增方法

进阶数据扩增方法包括标签不一致的数据扩增方法(需要手动实现)和一些像素cutout的方法(在albumentations库可以找到)。

像素cutout方法

像素擦除的方法主要是随机擦除像素的区域,以此增强模型的判别能力,此类方法论文有Erase、Cutout、Has和GridMask。

其中Cutout是比较很常见的,在albumentations中有狠多实现:

  • transforms.GridDropout

  • transforms.Cutout

  • transforms.CoarseDropout

  • transforms.MaskDropout

  • transforms.GridMask

标签不一致方法

标签不一致的方法需要对两张图进行像素差值或者区域差值,其中最为典型的是Mixup、CutMix和Attentive CutMix。

Mixup是直接进行两张图像素的差值,标签也进行差值;CutMix是使用Cutout的区域进行像素填充;Attentive CutMix使用模型预测的激活区域进行像素填充。Attentive CutMix是20年比较新的论文,只在CIFAR数据集上进行了验证,时间复杂度较高。

进阶的数据扩增方法会提高模型的精度,但有两个缺点:(1)如果使用mix和cutout等标签不一致的方法,会改变数据集标签的分布;(2)进阶的数据扩增方法需要更长的训练周期。

04 参考文献

  • CutMix: Regularization Strategy to Train Strong Classifiers with Localizable Features

  • GridMask Data Augmentation

  • Attentive CutMix: An Enhanced Data Augmentation Approach for Deep Learning Based Image Classification

“在看,为沉迷学习点赞

Kaggle知识点:数据扩增方法相关推荐

  1. 数据读取与数据扩增方法

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:樊亮.黄星源.Datawhale优秀学习者 本文对图像数据读取及图 ...

  2. 图像数据读取及数据扩增方法

    Datawhale干货 作者:王程伟,Datawhale成员 本文为干货知识+竞赛实践系列分享,旨在理论与实践结合,从学习到项目实践.(零基础入门系列:数据挖掘/cv/nlp/金融风控/推荐系统等,持 ...

  3. 【天池赛事】零基础入门语义分割-地表建筑物识别 Task2:数据扩增方法

    [天池赛事]零基础入门语义分割-地表建筑物识别 Task1:赛题理解与 baseline(3 天) – 学习主题:理解赛题内容解题流程 – 学习内容:赛题理解.数据读取.比赛 baseline 构建 ...

  4. 【深度学习】数据读取与数据扩增方法

    转载自:Datawhale,作者:樊亮.黄星源.Datawhale优秀学习者 本文对图像数据读取及图像数据扩增方法进行了总结,并以阿里天池零基础入门CV赛事为实践,利用Pytorch对数据进行了读取和 ...

  5. 最强的数据扩增方法竟然是添加标点符号?

    今天的这篇文章源自于EMNLP 2021 Findings,论文标题为<AEDA: An Easier Data Augmentation Technique for Text Classifi ...

  6. 深度学习数据增强数据扩增方法

    随机裁剪 对图片随机0.6~1.0比率大小的区域进行裁剪. 然后resize到固定大小. torch.API torchvision.transforms.RandomCrop(size,paddin ...

  7. NLP数据增强方法总结:EDA、BT、MixMatch、UDA

    1. 数据增强的背景和应用场景 随着AI技术的逐步发展,更好的神经网络模型对数据规模的要求也逐步提升.而在分类任务中,若不同类别数据量相差很大,模型则会出现过拟合现象,严重影响预测的正确性. 从广义上 ...

  8. 人机交互系统(3.1)——NLP文本数据增强方法

    一.数据增强的背景和应用场景 随着AI技术的逐步发展,更好的神经网络模型对数据规模的要求也逐步提升.而在分类任务中,若不同类别数据量相差很大,模型则会出现过拟合现象,严重影响预测的正确性. 从广义上来 ...

  9. T-PAMI 2021 | 换个损失函数就能实现数据扩增?

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨rainforest wang@知乎(已授权) 来源丨http ...

最新文章

  1. h2 mysql 兼容性_H2内存数据库对sql语句的支持问题 sql放到mysql数据库中能跑
  2. java ee中javamail注解_JavaEE之注解
  3. javascript漏洞-检测到目标站点存在javascript框架库漏洞
  4. 2017级数据结构助教批改方案
  5. 显示查找结果_AB 综合 | 如何查找到更多的罗克韦尔资料
  6. 10.用好远程联机服务器
  7. 2018百度之星程序设计大赛初赛B——1002hex
  8. 使用 Android PreferenceScreen 偏好显示类(android.preference.PreferenceScreen)
  9. ACE ADMIN 大全
  10. 使用OP-AMP电路将DAC0832输出电压转换为电流
  11. 像素深度、分辨率与图片大小的关系?图片大小怎么计算?
  12. 出家12年,北大数学天才柳智宇下山还俗:从事心理咨询,主动要求降薪至2万...
  13. 删除node_modules慢【rimraf】
  14. docker java -jar_使用Docker安装Java镜像运行jar包方法
  15. c语言字母是怎么存储,C语言之数据在内存中的存储
  16. 用Python写一个最简单的计时秒表
  17. Exp7 网络欺诈防范 Week10 - 20165201
  18. 格式工厂安装与使用教程
  19. 安晴同学|大榕树下的友谊
  20. javaWeb前端网页课程设计的实现——【JAVA篇】

热门文章

  1. Ubuntu 14.04系统托盘图标问题,skype托盘图标显示
  2. fieldset 使用小案例
  3. 企业的覆灭,我监视你的Exchange邮件!
  4. 【组队学习】孙健坤:基于Python的会员数据化运营
  5. LeetCode实战:数组中的第K个最大元素
  6. 使用CSDN-markdown编辑器
  7. 龙芯架构应用迁移技术分享——搜狗输入法应用迁移
  8. 大批量生成假数据,faker.js获得近28k个Star
  9. 深耕智能制造和超高清视频领域,思谋科技获数千万美元融资
  10. 新一届最强预训练模型上榜,出于BERT而胜于BERT