• enlarge your dataset


    列举常见的几种数据集增强方法:

    1.flip  翻折(左右,上下)

    # NumPy.'img' = A single image.
    flip_1 = np.fliplr(img)
    # TensorFlow. 'x' = A placeholder for an image.
    shape = [height, width, channels]
    x = tf.placeholder(dtype = tf.float32, shape = shape)
    flip_2 = tf.image.flip_up_down(x)
    flip_3 = tf.image.flip_left_right(x)
    flip_4 = tf.image.random_flip_up_down(x)
    flip_5 = tf.image.random_flip_left_right(x)

    2.rotation 旋转

    # Placeholders: 'x' = A single image, 'y' = A batch of images
    # 'k' denotes the number of 90 degree anticlockwise rotations
    shape = [height, width, channels]
    x = tf.placeholder(dtype = tf.float32, shape = shape)
    rot_90 = tf.image.rot90(img, k=1)
    rot_180 = tf.image.rot90(img, k=2)
    # To rotate in any angle. In the example below, 'angles' is in radians
    shape = [batch, height, width, 3]
    y = tf.placeholder(dtype = tf.float32, shape = shape)
    rot_tf_180 = tf.contrib.image.rotate(y, angles=3.1415)
    # Scikit-Image. 'angle' = Degrees. 'img' = Input Image
    # For details about 'mode', checkout the interpolation section below.
    rot = skimage.transform.rotate(img, angle=45, mode='reflect')

    3.scale 缩放

    # Scikit Image. 'img' = Input Image, 'scale' = Scale factor
    # For details about 'mode', checkout the interpolation section below.
    scale_out = skimage.transform.rescale(img, scale=2.0, mode='constant')
    scale_in = skimage.transform.rescale(img, scale=0.5, mode='constant')
    # Don't forget to crop the images back to the original size (for 
    # scale_out)

    4.crop 裁剪

    # TensorFlow. 'x' = A placeholder for an image.
    original_size = [height, width, channels]
    x = tf.placeholder(dtype = tf.float32, shape = original_size)
    # Use the following commands to perform random crops
    crop_size = [new_height, new_width, channels]
    seed = np.random.randint(1234)
    x = tf.random_crop(x, size = crop_size, seed = seed)
    output = tf.images.resize_images(x, size = original_size)

    5.translation 水平或竖直移动

    # pad_left, pad_right, pad_top, pad_bottom denote the pixel 
    # displacement. Set one of them to the desired value and rest to 0
    shape = [batch, height, width, channels]
    x = tf.placeholder(dtype = tf.float32, shape = shape)
    # We use two functions to get our desired augmentation
    x = tf.image.pad_to_bounding_box(x, pad_top, pad_left, height + pad_bottom + pad_top, width + pad_right + pad_left)
    output = tf.image.crop_to_bounding_box(x, pad_bottom, pad_right, height, width)

    6.gaussion noise 噪点

    #TensorFlow. 'x' = A placeholder for an image.
    shape = [height, width, channels]
    x = tf.placeholder(dtype = tf.float32, shape = shape)
    # Adding Gaussian noise
    noise = tf.random_normal(shape=tf.shape(x), mean=0.0, stddev=1.0,
    dtype=tf.float32)
    output = tf.add(x, noise)

    7.gan高级增强

    旋转、缩放等操作,有可能造成未知区域弥补,具体细节以及上面各种方法,见下面原文链接介绍。

    源文:https://medium.com/nanonets/how-to-use-deep-learning-when-you-have-limited-data-part-2-data-augmentation-c26971dc8ced

    译文:https://blog.csdn.net/u010801994/article/details/81914716

  • 相关阅读:
    BZOJ 1251 序列终结者(Splay)
    ZOJ 2112 Dynamic Rankings(动态区间第 k 大+块状链表)
    POJ 2887 Big String(块状链表)
    BZOJ 1093 [ZJOI2007] 最大半连通子图(强联通缩点+DP)
    Codeforces Beta Round #13 C. Sequence (DP)
    Codeforces Round #184 (Div. 2) E. Playing with String(博弈)
    MemSQL start[c]up Round 2
    Codeforces Round #195 A B C 三题合集 (Div. 2)
    哈密尔顿回路总结
    最大团问题
  • 原文地址:https://www.cnblogs.com/jiu0821/p/10446740.html
Copyright © 2020-2023  润新知