前言: 主要总结了数据增强(Data augmentation)常用的一些方法,包括了翻转(flip)、旋转(rotation)、缩放(scale)、裁剪(crop)、移位(translation)和其他一些方法,列出了使用opencv、numpy、tensorflow和其他一些库进行实现的函数。还有展示了keras中的实现数据增强的工具。
数据增强可以有效提高数据量,可以扩充训练数据集。但也并非万能的,有时过度信任数据增强会带来负面效果,还会增加网络训练时间。需酌情使用。
相关总结如下:
import cv2
import numpy as np
import tensorflow as tf
import imutils
import skimage
import pillow
path = '/home/zhangwei/workfiles/deeplearning/dogVScat/data/cat_1.jpg'
img = cv2.imread(path)
# tensorflow加载图片
# img = tf.gfile.FastGFile(path).read()
# img_data = tf.image.decode_jpeg(img)
#-----> 翻转(flip)<--------------#
# 用opencv实现
flip_11 = cv2.flip(img, 1, dst = None) # 1:水平,0:垂直,-1:对角
# 用numpy实现
flip_21 = np.fliplr(img) # 水平翻转
flip_22 = np.transpose # 转置
# 用tensorfolw实现
flip_31 = tf.image.flip_up_down(img)
flip_32 = tf.image.flip_left_right
flip_33 = tf.image.random_flip_up_down # 随机翻转,50%概率
flip_34 = tf.image.random_flip_left_right
flip_35 = tf.image.transpose_image # 转置图像
#----> 旋转(rotation)<-----------#
# 用opencv实现
M = cv2.getRotationMatrix2D(center, 45, 1.0)
rotation_11 = cv2.warpAffine(img, M, (w,h))
rotation_12 = imutils.rotate(i