数据不足时怎么办,数据曾广了解一下

M = cv.getRotationMatrix2D / 2.0, / 2.0), i, 1) cv.imwrit

训练一个复杂的机器学习或深度学习网络需要构建一个拥有足够数据的训练数据集。以图像分类为例,业界主流的数据集达到了百万量级,其中ImageNet数据集目前约有14197122张图片,共分为21841个类别。训练数据不足带来的主要问题是导致模型过拟合,即模型在训练集上具有较小的误差,但是在测试集上具有较大的误差。

数据不足时怎么办,数据曾广了解一下

业界主流图像分类数据集

改善模型过拟合主要有两种方法,一种为基于模型进行改进,例如L1/L2正则化、dropout、集成学习等;另一种为数据曾广,以图像数据集为例,及利用各种图像处理技术在不改变图像主体的情况下生成更多的图像数据。本文主要介绍如何基于图像数据进行数据曾广,在保持图像主体对象不变的情况可以通过平移、旋转、缩放、左右翻转、添加高斯白噪声、颜色变换、改变图像的亮度/清晰度/对比度等方式进行数据曾广。

旋转

数据不足时怎么办,数据曾广了解一下

opencv提供了带有可调节中心的缩放旋转,可以进行任意旋转。示例代码如下:

# rotation
    rows, cols, depth = img.shape
    for i in range(30, 360, 30):

        M = cv.getRotationMatrix2D(((cols - 1) / 2.0, (rows - 1) / 2.0), i, 1)
        dst = cv.warpAffine(img, M, (cols, rows))
        cv.imwrite('./data_augmentation/rotation/rotation{}.jpg'.format(i), dst)
数据不足时怎么办,数据曾广了解一下

原始图像旋转90度

平移

示例代码如下:

# transformation
    rows, cols, depth = img.shape
    for i in range(10, 100, 10):

        M = np.float32([[1, 0, i], [0, 1, i]])
        dst = cv.warpAffine(img, M, (cols, rows))
        cv.imwrite('./data_augmentation/transformation/transformation{}.jpg'.format(i), dst)
数据不足时怎么办,数据曾广了解一下

图像平移

添加图像噪声

椒盐噪声及高斯噪声是比较常见的图像噪声。椒盐噪声为图像随机出现的黑白点,示例代码如下:

def sp_noise(image, prob):
    '''
    添加椒盐噪声
    prob:噪声比例
    '''
    output = np.zeros(image.shape, np.uint8)
    thres = 1 - prob
    for i in range(image.shape[0]):
        for j in range(image.shape[1]):
            rdn = random.random()
            if rdn < prob:
                output[i][j] = 0
            elif rdn > thres:
                output[i][j] = 255
            else:
                output[i][j] = image[i][j]
    return output
数据不足时怎么办,数据曾广了解一下

椒盐噪声

添加高斯噪声示例代码如下:

def gasuss_noise(image, mean=0, var=0.001):
    '''
      添加高斯噪声
      mean : 均值
      var : 方差
    '''
    image = np.array(image / 255, dtype=float)
    noise = np.random.normal(mean, var ** 0.5, image.shape)
    out = image + noise
    if out.min() < 0:
        low_clip = -1.
    else:
        low_clip = 0.
    out = np.clip(out, low_clip, 1.0)
    out = np.uint8(out * 255)
    # cv.imshow("gasuss", out)
    return out

数据不足时怎么办,数据曾广了解一下

添加高斯噪声

改变图像亮度、清晰度、对比度等

亮度调整是将图像像素的强度整体变大/变小,对比度调整指的是图像暗处变得更暗,亮出变得更亮,从而拓宽某个区域内的显示精度。改变亮度对比度示例代码如下:

def contrast_brightness_(image, c, b):  # C 是对比度,b 是亮度
    h, w, ch = image.shape
    blank = np.zeros([h, w, ch], image.dtype)
    dst = cv.addWeighted(image, c, blank, 1-c, b)   #改变像素的API
    tmp = np.hstack((img, dst))  # 两张图片横向合并(便于对比显示)
    cv.imshow("con-bri-demo", tmp)

数据不足时怎么办,数据曾广了解一下

改变图片对比度

数据不足时怎么办,数据曾广了解一下

改变图片亮度

利用图像处理技术可以基于原始图片衍生出大量的图片,可以很容易地将训练数据集扩大为原始的数十倍乃至上百倍。

数据不足时怎么办,数据曾广了解一下

图像数据扩充

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/81653.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信