keras 資料增強 opencv 方法

2021-09-26 23:36:45 字數 1715 閱讀 1714

在進行深度學習時,由於資料量的不足我們往往需要對資料進行增強操作。keras 有自帶的資料增強函式。但是裡面增強很多,我們可控方式也太少。因為我們往往需要自己進行擴充。下面是使用了opnencv 進行資料增強的方法。

def gamma_transform(img, gamma):

gamma_table = [np.power(x / 255.0, gamma) * 255.0 for x in range(256)]

gamma_table = np.round(np.array(gamma_table)).astype(np.uint8)

return cv2.lut(img, gamma_table)

def random_gamma_transform(img, gamma_vari):

log_gamma_vari = np.log(gamma_vari)

alpha = np.random.uniform(-log_gamma_vari, log_gamma_vari)

gamma = np.exp(alpha)

return gamma_transform(img, gamma)

def rotate(xb,yb,angle):

m_rotate = cv2.getrotationmatrix2d((img_w/2, img_h/2), angle, 1)

xb = cv2.warpaffine(xb, m_rotate, (img_w, img_h))

yb = cv2.warpaffine(yb, m_rotate, (img_w, img_h))

return xb,yb

def blur(img):

img = cv2.blur(img, (3, 3));

return img

def add_noise(img):

for i in range(200): #新增點雜訊

temp_x = np.random.randint(0,img.shape[0])

temp_y = np.random.randint(0,img.shape[1])

img[temp_x][temp_y] = 255

return img

def data_augment(xb,yb):

if np.random.random() < 0.25:

xb,yb = rotate(xb,yb,90)

if np.random.random() < 0.25:

xb,yb = rotate(xb,yb,180)

if np.random.random() < 0.25:

xb,yb = rotate(xb,yb,270)

if np.random.random() < 0.25:

xb = cv2.flip(xb, 1) # flipcode > 0:沿y軸翻轉

yb = cv2.flip(yb, 1)

if np.random.random() < 0.25:

xb = random_gamma_transform(xb,1.0)

if np.random.random() < 0.25:

xb = blur(xb)

if np.random.random() < 0.2:

xb = add_noise(xb)

return xb,yb

這裡還可以增強更多的方法。

資料增強總結

資料增強方式 1 傳統資料增強,包括crop,translate,zoom,hue等 2 gan cyclegan 生成的和真實差距較大,損失函式定義為分類偏差。3 插值式,smote,mixup等演算法生成新 4 遷移學習 5 特徵融合,特徵手動提取 總結 the effectiveness of...

Data augmentation資料增強

mirroring 映象翻轉 最簡單的資料增強方式 random cropping 隨機裁剪 隨機裁剪並不是一種完美的資料增強方式。存在隨機裁剪切那塊看起來不像貓的的可能性,但是實際隨機裁剪效果還不錯,只要隨機裁剪的部分占原的相當大一部分即可。rotation 旋轉 shearing 剪下 loca...

Keras 資料集介紹

基本的使用情況差不多介紹的差不多了,我也是邊學習邊寫部落格,其中難免有很多理解錯誤的地方或者理解不到位的地方,還請各位博友多多指點。python view plain copy print?keras.datasets.cifar10 keras.datasets.cifar10cifar10資料集...