关于Albumentations与Keras Sequence数据增强原理的疑问
关于Keras Sequence结合Albumentations的数据增强逻辑解释
你对“生成更多样本”的理解偏狭义了,这段代码实现的是在线实时数据增强,它不需要提前生成新样本存入数据集,而是通过以下方式达到扩充训练数据多样性的效果:
随机变换的核心作用
你看到的“只是对现有样本变换”,但Albumentations的变换是带随机性的——同一个原始图片,在训练的不同epoch、不同batch中被处理时,会得到完全不同的变换结果(比如这次是水平翻转+亮度提升,下次是随机裁剪+对比度调整)。训练时的样本复用逻辑
模型训练会反复遍历这个CIFAR10Sequence(每个epoch遍历一次完整数据集),每次遍历拿到的都是原始样本的全新变换版本。举个例子:如果你的训练集有50000张图,训练10个epoch,模型实际“学习”到的是50000×10张不同的输入,这和你离线生成10倍新样本的效果一致,但完全不需要额外存储这些新样本。代码的具体工作流程
- 每次调用
__getitem__时,取出一个batch的原始样本; - 对batch内每张图,通过
self.augment(image=x)应用随机变换; - 把变换后的图片组成新的batch喂给模型训练。
- 每次调用
举个Albumentations变换管道的示例,你就能明白随机性的作用:
import albumentations as A # 定义带随机参数的变换管道 augment_pipeline = A.Compose([ A.RandomCrop(height=32, width=32, p=0.8), # 80%概率随机裁剪 A.HorizontalFlip(p=0.5), # 50%概率水平翻转 A.RandomBrightnessContrast(p=0.2), # 20%概率调整亮度对比度 ])
把这个管道传入CIFAR10Sequence,每次处理同一张图都会得到不同的结果,相当于每次都在生成“新样本”供模型学习,从而提升模型的泛化能力。
内容的提问来源于stack exchange,提问作者Mohammad Hossein Koosheshi
相关产品推荐
相关产品推荐

