python数据增强代码_详细图像数据集增强原理的python代码

导读

在深度学习时代,数据的规模越大、质量越高,模型就能够拥有更好的泛化能力,数据直接决定了模型学习的上限。然而在实际工程中,采集的数据很难覆盖全部的场景,比如图像的光照条件,同一场景拍摄的图片可能由于光线不同就会有很大的差异性,那么在训练模型的时候就需要加入光照方面的数据增强。另一方面,即使拥有大量的数据,也应该进行数据增强,这样有助于添加相关数据数据集中数据的数量,防止模型学习到不想要的模型,避免出现过拟合现象。

数据增强的具体使用方法有两种,一种是事先执行所有的转换,实质是增强数据集的大小,这种方法称为线下增强。它比较适用于较小的数据集,最终将增加一定倍数的数据量,这个倍数取决于转换的图片个数,比如我需要对所有的图片进行旋转,则数据量增加一倍,本文中讨论的就是该方法。另一种是在将数据送入到机器学习模型的时候小批量(mini-batch)的转换,这种方法被称为线上增强或者飞行增强。这种方法比较适用于大数据集合,pytorch中的transforms函数就是基于该方法,在训练中每次对原始图像进行扰动处理,经过多次几轮(epoch)训练之后,就等效于数据增加。

常用的数据增强有两种,有监督和无监督两种。本文只探讨有监督数据增强。有监督数据增强是基于现有的数据集,通过分析数据的完备性,采用一定的规则对现有数据进行扩充。有监督数据增强可以细分为单样本数据增强和多样本数据增强,在实际工程应用中,单样本数据增强使用更多,在git上有一些性能较好开源数据增强项目,他们功能较全并且处理速度也很快,开发者可以直接调用,如imgaug和albumentations。在pytorch中,可以通过torchvision的transforms模块来实现集成了很多数据增强函数包。本文主要介绍单样本数据增强的一些常用方法。

1.裁剪

做裁剪操作主要是考虑原始图像的宽高扰动,在大多数图像分类网络中,样本在输入网络前必须要统一大小,所以通过调整图像的尺寸可以大量的扩展数据。通过裁剪有两种扩种方式,一种是对大尺寸的图像直接按照需要送入网络的尺寸进行裁剪,比如原始图像的分辨率大小是256x256,现在网络需要输入的图像像素尺寸是224x224,这样可以直接在原始图像上进行随机裁剪224x224 像素大小的图像即可,这样一张图可以扩充32x32张图片;另外一种是将随机裁剪固定尺寸大小的图片,然后再将图像通过插值算法调整到网络需要的尺寸大小。由于数据集中通常数据大小不一,后者通常使用的较多。

使用opencv进行图像裁剪,利用随机数确定图像的裁剪范围,代码如下:

img_path = '../../img/ch3_img1.jpg'

img = cv2.imread(img_path)

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

h, w, _ = img.shape

new_h1, new_h2 = np.random.randint(0, h-512, 2)

new_w1, new_w2 = np.random.randint(0, w-512, 2)

img_crop1 = img[new_h1:new_h1+512, new_w1:new_w1+512, :]

img_crop2 = img[new_h2:new_h2+512, new_w2:new_w2+512, :]

# 显示

plt.figure(figsize=(15, 10))

plt.subplot(1,3,1), plt.imshow(img)

plt.axis('off'); plt.title('原图')

plt.subplot(1,3,2), plt.imshow(img_crop1)

plt.axis('off'); plt.title('水平镜像')

plt.subplot(1,3,3), plt.imshow(img_crop2)

plt.axis('

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,很高兴为您解答这个问题。 在深度学习中,数据增强是一种常用的技术,它可以通过对原始数据进行变换、裁剪、旋转、翻转等操作,来扩充训练集,从而提高模型的泛化能力和鲁棒性。在图像领域,常用的数据增强方法包括随机裁剪、随机旋转、随机翻转、色域变换等。下面,我将为您介绍如何使用 Python图像进行随机数据增强。 1. 随机裁剪 随机裁剪是一种简单而有效的数据增强方法,它可以通过对原始图像进行随机裁剪,来扩充训练集。在 Python 中,我们可以使用 PIL 库中的 Image 模块来实现随机裁剪。 ```python from PIL import Image import random def random_crop(img, crop_size): w, h = img.size left = random.randint(0, w - crop_size) top = random.randint(0, h - crop_size) right = left + crop_size bottom = top + crop_size return img.crop((left, top, right, bottom)) ``` 2. 随机旋转 随机旋转是一种常用的数据增强方法,它可以通过对原始图像进行随机旋转,来扩充训练集。在 Python 中,我们可以使用 PIL 库中的 Image 模块来实现随机旋转。 ```python from PIL import Image import random def random_rotate(img, angle_range): angle = random.uniform(-angle_range, angle_range) return img.rotate(angle) ``` 3. 随机翻转 随机翻转是一种简单而有效的数据增强方法,它可以通过对原始图像进行随机翻转,来扩充训练集。在 Python 中,我们可以使用 PIL 库中的 Image 模块来实现随机翻转。 ```python from PIL import Image import random def random_flip(img, flip_prob): if random.random() < flip_prob: return img.transpose(Image.FLIP_LEFT_RIGHT) return img ``` 4. 色域变换 色域变换是一种常用的数据增强方法,它可以通过对原始图像进行色彩变换,来扩充训练集。在 Python 中,我们可以使用 PIL 库中的 Image 模块来实现色域变换。 ```python from PIL import Image import random def random_color(img, color_range): r, g, b = img.split() r = r.point(lambda i: i + random.randint(-color_range, color_range)) g = g.point(lambda i: i + random.randint(-color_range, color_range)) b = b.point(lambda i: i + random.randint(-color_range, color_range)) return Image.merge('RGB', (r, g, b)) ``` 以上就是使用 Python 进行随机数据增强的一些常用方法,希望对您有所帮助。如果您有任何问题,请随时联系我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值