python如何让图片镜像翻转_详细图像数据集增强原理的python代码

浏览更多内容,可访问:www.growai.cn

导读

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

数据增强的具体使用方法有两种,一种是事先执行所有的转换,实质是增强数据集的大小,这种方法称为线下增强。它比较适用于较小的数据集,最终将增加一定倍数的数据量,这个倍数取决于转换的图片个数,比如我需要对所有的图片进行旋转,则数据量增加一倍,本文中讨论的就是该方法。另一种是在将数据送入到机器学习模型的时候小批量(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('off'); plt.title('垂直镜像')
plt.show()

运行上述代码可到如下结果图:

34b4492b97c8f8d879f615baea8028a4.png <
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值