# 数据增强
def augment_data(images, labels, n_augmentations=5):
aug = iaa.Sequential([
# iaa.Fliplr(0.5), # 水平翻转
# iaa.Affine(rotate=(-20, 20)), # 随机旋转
iaa.Multiply((0.8, 1.0)), # 随机亮度
iaa.Affine(scale=(0.9, 1.1)) # 随机缩放
])
augmented_images = []
augmented_labels = []
for img, label in zip(images, labels):
img = img.reshape((50, 50, -1)) # 恢复图像形状
for _ in range(n_augmentations):
augmented_img = aug(image=img)
augmented_images.append(augmented_img.flatten()) # 展平图像
augmented_labels.append(label)
return augmented_images, augmented_labels
代码的目的是增强图像数据,这有助于提高机器学习模型的泛化能力。增强数据通常涉及对图像进行一些随机变换,使模型在训练时能够看到更多的变化。
import imgaug.augmenters as iaa # 导入imgaug库中的增强函数
这是导入imgaug库中的增强函数模块,imgaug是一个Python库,用于图像增强。
def augment_data(images, labels, n_augmentations=5):
定义了一个函数augment_data
,它接收三个参数:
images
:原始图像数据列表。labels
:与图像对应的标签列表。n_augmentations
:每个图像要生成的增强图像数量,默认为5。
aug = iaa.Sequential([
创建一个iaa.Sequential
对象,它将按顺序应用多个增强器。
# iaa.Fliplr(0.5), # 水平翻转
这行代码被注释掉了,但它的作用是水平翻转图像,参数0.5
表示每个图像有50%的概率被翻转。
# iaa.Affine(rotate=(-20, 20)), # 随机旋转
这行代码也被注释掉了,它的作用是随机旋转图像,参数(-20, 20)
表示旋转角度在-20到20度之间。
iaa.Multiply((0.8, 1.0)), # 随机亮度
这行代码将图像的亮度调整为原始亮度的0.8到1.0倍。这可以模拟不同的光照条件。
iaa.Affine(scale=(0.9, 1.1)) # 随机缩放
这行代码将图像随机缩放,参数(0.9, 1.1)
表示缩放比例在0.9到1.1倍之间。这可以模拟图像在不同距离下的观察效果。
])
augmented_images = []
augmented_labels = []
初始化两个空列表,用于存储增强后的图像和相应的标签。
for img, label in zip(images, labels):
遍历原始图像和标签。
img = img.reshape((50, 50, -1)) # 恢复图像形状
将图像数据重新塑形为三维数组,其中50x50
是图像的尺寸,-1
会自动计算第三个维度的大小,通常是3(因为图像是彩色的)。
for _ in range(n_augmentations):
对于每个图像,生成指定数量的增强图像。
augmented_img = aug(image=img)
应用定义好的增强器序列aug
到图像上。
augmented_images.append(augmented_img.flatten()) # 展平图像
将增强后的图像展平为一维数组,并添加到augmented_images
列表中。
augmented_labels.append(label)
将原始标签添加到augmented_labels
列表中,因为增强后的图像与原始图像具有相同的标签。
return augmented_images, augmented_labels
函数返回增强后的图像列表和标签列表。