数据集增强代码
时间: 2023-08-29 18:07:42 浏览: 174
数据集增强是一种有效的方法,可以通过改变图像或文本的旋转、翻转、缩放等方式,生成更多的训练数据,从而提高模型的泛化能力和准确率。以下是一个图像数据集增强的Python代码示例:
```python
import cv2
import numpy as np
# 图像翻转
def flip(image, mode):
"""
:param image: 原始图像
:param mode: 翻转方式,0表示沿x轴翻转,1表示沿y轴翻转,-1表示沿x轴和y轴同时翻转
:return: 翻转后的图像
"""
return cv2.flip(image, mode)
# 旋转图像
def rotate(image, angle, scale=1.0):
"""
:param image: 原始图像
:param angle: 旋转角度
:param scale: 缩放比例,默认为1.0
:return: 旋转后的图像
"""
h, w = image.shape[:2]
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, angle, scale)
return cv2.warpAffine(image, M, (w, h))
# 模糊图像
def blur(image, ksize):
"""
:param image: 原始图像
:param ksize: 模糊核大小
:return: 模糊后的图像
"""
return cv2.blur(image, (ksize, ksize))
# 添加高斯噪声
def add_gaussian_noise(image, mean=0, std=15):
"""
:param image: 原始图像
:param mean: 噪声均值,默认为0
:param std: 噪声方差,默认为15
:return: 添加噪声后的图像
"""
noise = np.random.normal(mean, std, image.shape)
return np.clip(image + noise, 0, 255).astype(np.uint8)
# 图像缩放
def resize(image, size):
"""
:param image: 原始图像
:param size: 缩放尺寸,格式为(宽度,高度)
:return: 缩放后的图像
"""
return cv2.resize(image, size)
# 随机裁剪图像
def random_crop(image, crop_size):
"""
:param image: 原始图像
:param crop_size: 裁剪尺寸,格式为(宽度,高度)
:return: 裁剪后的图像
"""
h, w = image.shape[:2]
ch, cw = crop_size
if ch >= h or cw >= w:
raise ValueError("Crop size should be smaller than original size.")
x = np.random.randint(w - cw)
y = np.random.randint(h - ch)
return image[y:y+ch, x:x+cw]
# 图像亮度调整
def brightness(image, delta):
"""
:param image: 原始图像
:param delta: 亮度调整值,取值范围为[-255, 255]
:return: 调整亮度后的图像
"""
return np.clip(image + delta, 0, 255).astype(np.uint8)
```
通过调用上述函数,可以对图像进行多种增强操作。例如,以下代码将对图像进行翻转、旋转、模糊、添加高斯噪声、缩放、随机裁剪和亮度调整等操作:
```python
image = cv2.imread("image.jpg")
# 图像翻转
image_flip_x = flip(image, 0)
image_flip_y = flip(image, 1)
image_flip_xy = flip(image, -1)
# 旋转图像
image_rotate_30 = rotate(image, 30)
image_rotate_60 = rotate(image, 60)
# 模糊图像
image_blur = blur(image, 5)
# 添加高斯噪声
image_noise = add_gaussian_noise(image)
# 图像缩放
image_resize = resize(image, (640, 480))
# 随机裁剪图像
image_crop = random_crop(image, (320, 240))
# 图像亮度调整
image_bright = brightness(image, 50)
```
类似地,可以为文本数据集编写增强代码,例如随机删除、替换或插入词语,或者对文本进行随机打乱、缩短或延长等操作。
阅读全文