百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

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

ztj100 2024-11-21 00:30 11 浏览 0 评论

训练一个复杂的机器学习或深度学习网络需要构建一个拥有足够数据的训练数据集。以图像分类为例,业界主流的数据集达到了百万量级,其中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)

平移

示例代码如下:

# 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)



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

相关推荐

SpringBoot如何实现优雅的参数校验
SpringBoot如何实现优雅的参数校验

平常业务中肯定少不了校验,如果我们把大量的校验代码夹杂到业务中,肯定是不优雅的,对于一些简单的校验,我们可以使用java为我们提供的api进行处理,同时对于一些...

2025-05-11 19:46 ztj100

Java中的空指针怎么处理?

#暑期创作大赛#Java程序员工作中遇到最多的错误就是空指针异常,无论你多么细心,一不留神就从代码的某个地方冒出NullPointerException,令人头疼。...

一坨一坨 if/else 参数校验,被 SpringBoot 参数校验组件整干净了

来源:https://mp.weixin.qq.com/s/ZVOiT-_C3f-g7aj3760Q-g...

用了这两款插件,同事再也不说我代码写的烂了

同事:你的代码写的不行啊,不够规范啊。我:我写的代码怎么可能不规范,不要胡说。于是同事打开我的IDEA,安装了一个插件,然后执行了一下,规范不规范,看报告吧。这可怎么是好,这玩意竟然给我挑出来这么...

SpringBoot中6种拦截器使用场景

SpringBoot中6种拦截器使用场景,下面是思维导图详细总结一、拦截器基础...

用注解进行参数校验,spring validation介绍、使用、实现原理分析

springvalidation是什么在平时的需求开发中,经常会有参数校验的需求,比如一个接收用户注册请求的接口,要校验用户传入的用户名不能为空、用户名长度不超过20个字符、传入的手机号是合法的手机...

快速上手:SpringBoot自定义请求参数校验

作者:UncleChen来源:http://unclechen.github.io/最近在工作中遇到写一些API,这些API的请求参数非常多,嵌套也非常复杂,如果参数的校验代码全部都手动去实现,写起来...

分布式微服务架构组件

1、服务发现-Nacos服务发现、配置管理、服务治理及管理,同类产品还有ZooKeeper、Eureka、Consulhttps://nacos.io/zh-cn/docs/what-is-nacos...

优雅的参数校验,告别冗余if-else

一、参数校验简介...

Spring Boot断言深度指南:用断言机制为代码构筑健壮防线

在SpringBoot开发中,断言(Assert)如同代码的"体检医生",能在上线前精准捕捉业务逻辑漏洞。本文将结合企业级实践,解析如何通过断言机制实现代码自检、异常预警与性能优化三...

如何在项目中优雅的校验参数

本文看点前言验证数据是贯穿所有应用程序层(从表示层到持久层)的常见任务。通常在每一层实现相同的验证逻辑,这既费时又容易出错。为了避免重复这些验证,开发人员经常将验证逻辑直接捆绑到域模型中,将域类与验证...

SpingBoot项目使用@Validated和@Valid参数校验

一、什么是参数校验?我们在后端开发中,经常遇到的一个问题就是入参校验。简单来说就是对一个方法入参的参数进行校验,看是否符合我们的要求。比如入参要求是一个金额,你前端没做限制,用户随便过来一个负数,或者...

28个验证注解,通过业务案例让你精通Java数据校验(收藏篇)

在现代软件开发中,数据验证是确保应用程序健壮性和可靠性的关键环节。JavaBeanValidation(JSR380)作为一个功能强大的规范,为我们提供了一套全面的注解工具集,这些注解能够帮...

Springboot @NotBlank参数校验失效汇总

有时候明明一个微服务里的@Validated和@NotBlank用的好好的,但就是另一个里不能用,这时候问题是最不好排查的,下面列举了各种失效情况的汇总,供各位参考:1、版本问题springbo...

这可能是最全面的Spring面试八股文了

Spring是什么?Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。...

取消回复欢迎 发表评论: