使用数据增强技术对已有样本进行扩充

本文介绍了在样本量有限的情况下,如何利用Python的PIL库对图像进行数据增强,包括水平翻转、垂直翻转和三种不同角度的旋转,以防止过拟合。提供的代码示例展示了如何实现这些操作并保存处理后的图像。

  当数据集中的样本量较少时,直接将其输入网络进行训练可能会导致过拟合,所以需要对已有样本通过使用数据增强技术进行扩充。扩充时主要有翻转和旋转两种操作,其中翻转包含水平翻转、上下翻转两种,旋转包含逆时针旋转90∘90^{\circ}90180∘180^{\circ}180270∘270^{\circ}270三种。

  具体代码如下所示。

# -*- coding: utf-8 -*-

from PIL import Image
import os

file_dir = 'E:/Remote Sensing/' # 原始图片路径
save_dir = 'E:/Remote Sensing/'  # 保存路径
img_name = 'airplane.jpg'
img_path = file_dir + img_name  # 批量读取图片
im = Image.open(img_path)
LEFT_RIGHT = im.transpose(Image.FLIP_LEFT_RIGHT)  # 左右翻转
TOP_BOTTOM = im.transpose(Image.FLIP_TOP_BOTTOM)  # 上下翻转
rotated_90 = im.transpose(Image.ROTATE_90)  # 逆时针旋转90度
rotated_180 = im.transpose(Image.ROTATE_180)  # 逆时针旋转180度
rotated_270 = im.transpose(Image.ROTATE_270)  # 逆时针旋转270度
LEFT_RIGHT.save(save_dir + 'LEFT_RIGHT_'+img_name)  # 保存左右翻转后的图片
TOP_BOTTOM.save(save_dir + 'TOP_BOTTOM_'+img_name)  # 保存上下翻转后的图片
rotated_90.save(save_dir + 'rotated_90_'+img_name)  # 保存逆时针旋转90度后的图片
rotated_180.save(save_dir + 'rotated_180_'+img_name)  # 保存逆时针旋转180度后的图片
rotated_270.save(save_dir + 'rotated_270_'+img_name)  # 保存逆时针旋转270度后的图片

  运行代码后得到的结果如下所示。

  • 原图
    在这里插入图片描述

  • 水平翻转
    在这里插入图片描述

  • 上下翻转
    在这里插入图片描述

  • 逆时针旋转90∘90^{\circ}90
    在这里插入图片描述

  • 逆时针旋转180∘180^{\circ}180
    在这里插入图片描述

  • 逆时针旋转270∘270^{\circ}270
    在这里插入图片描述

### 小样本数据扩充技术与方法 在机器学习和深度学习领域,当面临小样本问题时,数据扩充成为提升模型泛化能力的重要手段之一。以下是几种常见的小样本数据扩充技术和具体实现方式: #### 一、基于传统变换的数据增强 传统的数据增强技术主要依赖于对已有数据的手动调整或转换,从而生成新的训练样例。这种方法广泛应用于图像处理领域,包括但不限于旋转、缩放、裁剪、翻转、颜色抖动等操作[^2]。 ```python import numpy as np from tensorflow.keras.preprocessing.image import ImageDataGenerator datagen = ImageDataGenerator( rotation_range=20, # 随机旋转角度范围 width_shift_range=0.2, # 宽度偏移比例 height_shift_range=0.2, # 高度偏移比例 shear_range=0.15, # 剪切强度 zoom_range=0.1, # 缩放比例 horizontal_flip=True, # 水平翻转 fill_mode='nearest' # 边界填充模式 ) # 使用ImageDataGenerator生成扩增后的数据 images = datagen.flow_from_directory('path_to_images', batch_size=32) ``` #### 二、基于生成对抗网络(GAN)的数据合成 生成对抗网络是一种强大的工具,能够从少量真实数据中生成逼真的虚拟样本。例如,在人脸识别任务中,Cong等人提出通过改进的GAN添加编码模块来扩展人脸图像数据集,进而提升了检测精度[^4]。类似的思路也可用于其他类型的结构化或非结构化数据。 对于时间序列或者文本类别的数据,则可考虑条件版GAN (cGAN),它允许指定某些属性作为约束条件以指导生成过程。 #### 三、基于插值的方法 另一种简单有效的策略是对两个已知实例之间的特征向量做线性或其他形式的差值运算,得到中间状态的新个体。这种做法特别适合连续型变量分布较为紧凑的情况。 ```python def interpolate_data(x1, x2, alpha=0.5): """ 对两组数据进行线性插值得到新样本 参数: x1: 第一组原始数据 x2: 第二组原始数据 alpha: 插值系数 返回: 新生成的数据点 """ return (1-alpha)*np.array(x1)+alpha*np.array(x2) ``` #### 四、利用自监督预训练提取高级表示后再混合 先采用对比学习框架完成大规模未标注语料上的初步训练获得通用表征空间;再在此基础上实施mixup之类的操作进一步丰富类别边界附近的表达样式。此法尤其适应跨域迁移场景下的快速适配需求[^3]。 --- ### 总结 以上列举了几种主流的小样本数据扩充方案及其应用场景说明。实际选型需综合考量目标领域的特性以及计算资源限制等因素决定最适合自己的路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值