資料增強 基本方法

2021-08-21 11:15:10 字數 3228 閱讀 9960

基本資料增強主要包含如下方式:

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 ...