
1.2.2 自动数据增强技术原理
自动数据增强的目标是为用户提供更灵活的数据增强策略,以实现更好的训练效果,提升训练模型的推理精度。MindSpore支持用户在数据处理流水线中应用自动数据增强,包括基于概率的自动数据增强和基于反馈的自动数据增强。下面将对这两种方法分别进行介绍。
1.基于概率的自动数据增强
针对ImageNet数据集,AlexNet在2012年提出的方法仍是有监督数据增强的标准操作。而利用AutoAugment方法最终搜索出来的数据增强策略则包含25个子策略组合,每个子策略中含有两种变换,实际训练中针对每幅图像随机挑选1个子策略组合,然后以一定的概率来决定是否执行子策略中的每种变换。图1.3为基于概率的自动数据增强。
为了支持AutoAugment这种自动数据增强策略,MindSpore提供了RandomChoice、RandomApply和RandomSelectSubpolicy等接口,帮助用户基于概率进行数据增强操作。下面将分别对这些接口进行介绍。

图1.3 基于概率的自动数据增强
(1)RandomChoice,即随机选择,允许用户定义一个数据增强操作列表,数据处理过程中将针对每张图像等概率选择列表中的一个数据增强操作执行,如代码1.11所示。
代码1.11 使用RandomChoice进行数据增强

(2)RandomApply,即随机概率执行,允许用户定义一个数据增强操作列表和相应概率,数据处理过程中将针对每张图像以指定的概率执行列表中的数据增强操作,要么全都执行,要么全不执行,如代码1.12所示。
代码1.12 使用RandomApply进行数据增强

(3)RandomSelectSubpolicy,即随机子策略选择,允许用户定义多个数据增强操作子策略列表,并对子策略中的每个数据增强操作指定执行的概率,数据处理过程中将针对每张图像先等概率选择一个子策略,然后按顺序依照概率决定其中各个数据增强操作是否执行,如代码1.13所示。
代码1.13 使用RandomSelectSubpolicy进行数据增强

MindSpore提供了多种常用的数据增强操作算子,AutoAugment方法中使用的数据增强操作算子与MindSpore中的数据增强算子的对应关系如表1.1所示。
表1.1 数据增强算子对应关系

由此,用户可以在MindSpore中实现AutoAugment方法中的自动数据增强策略,达到提升网络模型泛化能力的效果,最终提高网络模型的推理精度。
2.基于反馈的自动数据增强
基于反馈的自动数据增强能够在训练过程中根据实时的超参数,如Loss(损失)值、Epoch(周期)数或Step(迭代)数,动态调整数据增强的方式,从而促进网络模型Loss值的收敛,实现精度的提升,如图1.4所示。

图1.4 基于反馈的自动数据增强
MindSpore通过同步等待与同步更新机制实现基于反馈的自动数据增强,用户可以使用数据集加载类中的sync_wait函数与sync_update函数基于反馈参数执行自定义的数据增强操作,如图1.5所示。

图1.5 同步等待与同步更新机制
sync_wait即同步等待函数,用于在数据处理流水线中定义阻塞节点,可由同名的同步更新函数触发,执行其参数中定义的回调函数;sync_update即同步更新函数,用于将反馈参数传递回同步等待函数,并释放其阻塞,以执行阻塞之后的数据增强操作。配合使用两者,即可根据实时的Loss值、Epoch数或Step数等参数,调整数据增强操作的执行。