基本資料增強主要包含如下方式:
1.旋轉: 可通過在原圖上先放大影象,然後剪下影象得到。
2.平移:先放大影象,然後水平或垂直偏移位置剪下
3.縮放:縮放影象
4.隨機遮擋:對影象進行小區域遮擋
5.水平翻轉:以過影象中心的豎直軸為對稱軸,將左、右兩邊畫素交換
6.顏色色差(飽和度、亮度、對比度、 銳度等)
7.雜訊擾動: 對影象的每個畫素rgb進行隨機擾動, 常用的雜訊模式是椒鹽雜訊和高斯雜訊;
tensorflow**實現:
引數可根據需求進行相應調整。
# -*- coding: utf-8 -*-
"""# 資料增強實現
"""import tensorflow as tf
import cv2
import numpy as np
from scipy import misc
import random
def random_rotate_image(image):
interb = ['nearest','bilinear','cubic','bicubic']
angle = np.random.uniform(low=-10.0, high=10.0)
key = random.randint(0,3)
return misc.imrotate(image, angle, interb[key])
def random_occlusion(image):
b_ratio = 1./10 #遮擋比例
m1 = np.ones((320,250))
b_h = random.randint(10,320*(1-b_ratio)-10)
b_w = random.randint(10,250*(1-b_ratio)-10)
m1[b_h:int(b_h+320*b_ratio),b_w:int(b_w+250*b_ratio)] = 0
m1 = np.expand_dims(m1, 2)
image = image*m1
image = image.astype(np.uint8)
return image
def data_augumrntation(image):
image = tf.py_func(random_occlusion, [image], tf.uint8) #隨機遮擋
image = tf.py_func(random_rotate_image, [image], tf.uint8) #旋轉
ratio = [0.9,1.1] #縮放比例
new_h = random.randint(320*ratio[0], 320*ratio[1])
new_w = random.randint(250*ratio[0], 250*ratio[1])
print(new_h,new_w)
image.set_shape((320, 250,3))
image = tf.image.resize_images(image,[new_h, new_w])
image = tf.cast(image,tf.uint8)
image = tf.image.resize_image_with_crop_or_pad(image, 320, 250 )#縮放
image = tf.random_crop(image, [299, 235, 3]) #隨機裁剪
image = tf.image.random_flip_left_right(image)#映象
n_key = random.randint(0,10)
if n_key == 8:
image = tf.image.per_image_standardization(image)#標準化
image = tf.cast(image, tf.float32)
image = tf.minimum(255.0, tf.maximum(0.0,tf.image.random_brightness(image,25.0)))#光照
image = tf.minimum(255.0, tf.maximum(0.0,tf.image.random_contrast(image,0.8,1.2)))#對比度
noise = tf.random_normal((299, 235, 3), mean=0.0, stddev=1.0, dtype=tf.float32)
image = tf.minimum(255.0, tf.maximum(0.0,image+noise))#隨機雜訊
image=tf.stack([b,g,r], axis=2) #通道轉換
image = data_augumrntation(image)
#image = tf.cast(image,tf.uint8)
sess = tf.session()
img = sess.run(image)
cv2.imshow('img',img)
cv2.waitkey()
原圖:
增強後影象(影象做了歸一化操作):
注:博眾家之所長,集群英之薈萃。
資料增強方法總結
資料增強主要是為了減少網路的過擬合現象,通過對訓練進行變換可以得到泛化能力更強的網路,更好的適應應用場景。常用的資料增強方法有 random erasing data augmentation 在keras中已經方便的實現了資料擴增,如果嘗試效果可以直接使用keras,如果在caffe中使用,可以線...
NLP資料增強方法
以下是一些針對文字的資料的增強方法 隨機drop和shuffle 資料增強主要採取兩種方法,一種是 drop,對於標題和描述中的字或詞,隨機的進行刪除,用空格代替。另一種是 shuffle,即打亂詞序。對於 如何評價 2017 知乎看山杯機器學習比賽?這個問題,使用 drop 對詞層面進行處理之後,...
keras 資料增強 opencv 方法
在進行深度學習時,由於資料量的不足我們往往需要對資料進行增強操作。keras 有自帶的資料增強函式。但是裡面增強很多,我們可控方式也太少。因為我們往往需要自己進行擴充。下面是使用了opnencv 進行資料增強的方法。def gamma transform img,gamma gamma table ...