朋友的歌词深度学习之数据增强(数据集扩充)⽅式和实现总结
前⾔: 主要总结了数据增强(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.transpo # 转置
# ⽤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 = anspo_image # 转置图像
#----> 旋转(rotation)<-----------#
# ⽤opencv实现
M = RotationMatrix2D(center,45,1.0)
rotation_11 = cv2.warpAffine(img, M,(w,h))
肤浅的反义词
rotation_12 = ate(img, angles)
# ⽤numpy实现
rotation_21 = np.rot90(img, k, axes)
# ⽤tensorflow实现
rotation_31 = 90(img, k =1)# k:旋转次数
rotation_32 = tf.ate(img, angles =3.14)# 旋转任意⾓度
# ⽤其他⽅式
rotation_41 = ate(img, angles =45, mode ='reflect')
#----> 缩放(scale)<-------------#
# ⽤opencv实现
scale_11 = size(img, dsize, fx, fy, interpolation)
# ⽤numpy实现
reshape() x
reshape() x
resize() x
# ⽤tensorflow实现
size_images(img,[M,N], method)
size_image_with_crop_or_pad(img, M, N)
al_crop(img, factor)
# ⽤其他⽅式
scale_41 = scale(img, scale, mode)
#---->裁剪(crop)<-------------#
牵牛花一天的变化# ⽤切⽚即可实现
长干行四首其一
# ⽤tensorflow实现
crop_31 = tf.random_crop(img, size, ed)
crop_32 = p_to_bounding_box()
#---->移位(translation)<------------#
# ⽤opencv实现
M = np.float32([[x1,y1,z1],[x2,y2,z2]])
translation_11 = cv2.warpAffine(img, M,(w,h))
# ⽤numpy实现
None
# ⽤tensorflow实现
translation_31 = tf.image.pad_to_bounding_box(img, pad_bottom, pad_right,height, width) #----->其他⼀些⽅法<----------------#
# 光照对⽐度
tf.image.adjust_brightness
tf.image.random_brightness
tf.iamge.adjust_constrast
tf.image.random_constrast
# 增加噪声
# 其他有创造性的想法
药学专业大学排名
# keras中有提供了批量数据增强的函数ImageDataGenerator#
from keras.preprocessing.image import ImageDataGenerator
# 图像增强
train_datagen = ImageDataGenerator(
featurewi_center=Fal,# 去中⼼化
samplewi_center=Fal,# 样本均值为0
featurewi_std_normalization =Fal,# 样本值/数据集标准差
samplewi_std_normalization =Fal,# 样本值/⾃⾝标准差
zca_whitening =Fal,# ZCA⽩化
rotation_range =0.,# 随机旋转⾓度*
width_shift_range =0.,# 宽度⽐例0-1*
澳洲生活height_shift_range =0.,# ⾼度⽐例0-1*
shear_range =0.,# 剪切强度*
zoom_range =0.,# 随机缩放幅度*
channel_shift_range =0.,# 随机通道偏移幅度,颜⾊变化
fill_mode ='nearest',# 当变换处理超出边界时,处理⽅式:constant,nearest,reflect,wrap cval =0.0,# 超出边界时,填充的值
horizontal_flip =Fal,# 随机⽔平翻转*
vertical_flip =Fal,# 随机垂直翻转*
rescale =None,# ⽐例系数
preprocessing_function =None,# 预处理函数*
data_format = K.image_data_format()
)
电脑的英文>老鼠咬伤# ⽣成(x,y)元组的⽬标迭代器,x:图像numpy数组,y:标签numpy数组
train_generator = train_datagen.flow_from_directory(
directory: Any,# 寻找该⽬录下的图像
target_size: Tuple[int,int]=(256,256),# 调整找到的所有图像尺⼨
color_mode:str='rgb',# 图像颜⾊模式
class: Any =None,# ⼦⽬录,类列表
class_mode:str='categorical',# 类模式
batch_size:int=32,# 批次⼤⼩
shuffle:bool=True,# 随机数据,否则按照字母排序
ed: Any =None,# 种⼦,⽤于洗牌和切换
save_to_dir: Any =None,# 保存路径
save_prefix:str='',# 保存前缀
save_format:str='png',# 保存格式:png,jpeg
follow_links:bool=Fal,# 跟随链接
subt: Any =None,# ⼦集(验证集)
interpolation:str='nearest'# 插值⽅式
)
# 使⽤其训练模型,返回值为⼀个对象
model.fit_generator(
generator = train_generator,# ⽣成器
steps_per_epoch,# 次数
epochs=1,# 迭代轮数
verbo=1,# ⽇志显⽰,0:不输出,1:输出进度条信息,2:每个epoch出⼀⾏记录 callbacks=None,# 回调
validation_data=None,# ⽣成验证集⽣成器:tuple
validation_steps=None,# 当validation为⽣成器,指定返回次数
class_weight=None,# 类别权重字典
max_q_size=10,# ⽣成器队列最⼤容量
workers=1,# 最⼤进程数
pickle_safe=Fal,# 基于进程的线程
initial_epoch=0# 从该参数指定的epoch开始训练
)