在CV方向得模型搭建中,我们常常需要对输入得图片进行数据增强,这将会减少模型对数据的过拟合从儿提升模型的性能。在实际工程中。如工业缺陷、医疗图像等场景,我们获得的数据毕竟有限,通过数据增强来提升模型的性能是非常有用的。此时只能够依靠图像增强的方法来建立训练所需要的数据集。
数据增强主要分为监督的数据增强和无监督的数据增强方法。其中有监督的数据增强又可以分为单样本数据增强和多样本数据增强方法,无监督的数据增强分为生成新的数据和学习增强策略两个方向。
这里我们介绍一种比较强大的数据增强工具,所有你能想到的增强方法都有——imgaug。imgaug是用于机器学习实验中图像增强的库。它支持广泛的扩充技术,可以轻松地组合它们并以随机顺序或在多个CPU内核上执行它们,具有简单而强大的随机界面,不仅可以扩充图像,还可以扩充关键点/地标,边界框,热图和分段图。
imgaug安装命令:
pip install imgaug
这里先介绍常用的数据增强方法,后续介绍如何在Tensorflow2中应用这些增强方法。
具体使用方法,如下:
import cv2
import imgaug.augmenters as iaa
seq = iaa.Sequential([
iaa.Fliplr(0.5), # horizontally flip 50% of the images
])
img=cv2.imread("D:\\PycharmProjects\\my_project\\GHIM-20\\GHIM-20\\19\\19_9597.jpg")
[img_seq,]=seq(images=[img])
cv2.imshow("test",img_seq)
cv2.waitKey(0)
显示结果:
一、监督的数据增强
1.1、单样本数据增强
1.1.1、 几何空间变换
几何变换类即对图像进行几何变换,包括翻转,旋转,裁剪,变形,缩放等各类操作。
翻转
翻转包括水平翻转和垂直翻转。
iaa.Fliplr(0.5) # 左右翻转
iaa.Flipud(1) #上下翻转
剪切
裁剪图片的感兴趣区域(ROI),通常在训练的时候,会采用随机裁剪的方法。
剪切和padding
iaa.CropAndPad(px=None,
percent=None,
pad_mode='constant',
pad_cval=0,
keep_size=True,
sample_independently=True,
name=None,
deterministic=False,
random_state=None)
参数:
px: 想要crop(negative values)的或者pad(positive values)的像素点。注意与percent不能同时存在。如果是None, pixel级别的crop不会被使用。int或者int list与上面相同。如