YOLO系列基础(七)从数据增强到图像线性变换

系列文章地址

YOLO系列基础(一)卷积神经网络原理详解与基础层级结构说明-CSDN博客

YOLO系列基础(二)Bottleneck瓶颈层原理详解-CSDN博客

YOLO系列基础(三)从ResNet残差网络到C3层-CSDN博客

YOLO系列基础(四)归一化层(BN层)的前世今生!-CSDN博客

YOLO系列基础(五)从神经元共适应性到模型Dropout层-CSDN博客

YOLO系列基础(六)YOLOv1原理详解原理如此清晰-CSDN博客

背景

        随着YOLOv11版本的发布,YOLO算法在视觉检测领域独领风骚,本系列旨在从小白出发,给大家讲解清楚视觉检测算法的前世今生,并讲清楚YOLOv11版本算法的所有模块功能!

        但此篇我们先讲解另外一个操作:数据增强和图像的线性变换

从数据集的多样性和过拟合开始

过拟合问题一般来说有两种因素共同影响。

  1. 神经网络设定不合理,造成神经元共适应性现象
  2. 数据集多样性不足,场景单一

有关于神经网络的设定问题以查看一下此篇博客:

YOLO系列基础(五)从神经元共适应性到模型Dropout层-CSDN博客

本篇我们详解数据集导致的过拟合问题,其实我们对于数据集的多样性不足会导致过拟合问题已经有了很深的印象,有些人也能侃侃而谈一些原因,但是都不够全面。

什么是过拟合问题?

        过拟合(Overfitting)是机器学习中的一个常见问题,指的是模型在训练数据上表现得过于出色,以至于它开始捕捉并学习训练数据中的噪声和随机波动,而不是学习数据的潜在规律或模式。这种情况发生时,模型在训练集上的性能(如准确率、召回率等指标)通常非常高,但在未见过的数据(如测试集或实际应用中的数据)上的性能却显著下降。

        过拟合的模型往往过于复杂,它们包含了大量的参数和细节,这些参数和细节对于训练数据是有效的,但对于新的、类似的数据则不再有效。这通常发生在模型具有比训练数据中的信息量更多的自由参数时,或者当训练数据不足够多样或数量不足时。

数据集的多样性不足是如何导致过拟合的?

模型记忆噪声

首先我们要知道,噪声是不可避免的,就算你的数据集再优异,都存在噪声。而且从某种意义上说,缺乏足够噪声的数据集反而是不够好的,因为现实世界是存在噪声的。

而当数据集缺乏多样性时,模型会记住训练数据中的噪声和特定模式,而不是学习到数据的普遍规律。这导致模型在训练集上表现良好,但在未见过的数据(如测试集)上表现不佳,因为测试集上没有模型记忆中相同的噪声。

特征场景覆盖不全

 多样性不足的数据集无法涵盖所有可能的特征组合和边缘情况。这导致模型在训练时无法充分学习数据的全部分布,从而在面对新数据时无法做出准确的预测。

人话说就是目标物体的所有特征信息数据集中并没有全面展示。

偏差样本问题

当数据集的多样性不足的时候,会容易造成训练数据集中某些类别的样本数量远多于其他类别,或者数据集的分布与真实世界的分布不一致,那么模型可能会学习到这种偏差。这种偏差在模型面对真实世界数据时会导致性能下降。

举个例子:如果你的数据集中北极熊出现在冰天雪地的照片远远多于动物园的照片,那么你的模型将难以检测动物园中的北极熊。

综上,我们需要多样化的数据集,而如何获取多样化的数据集呢?答案就是数据增强

数据增强

        但是数据集的采集、标注耗时耗力,很多优秀的数据集大多都是不开源的。那么我们就有了数据增强的需要

        数据增强的概念最早由Simard在1998年提出,随着2000年VRM(Vicinal Risk Minimization)准则的提出,数据增强技术被正式标准化。

数据增强的好处

数据增强是一种通过人工或自动方式对数据进行修改或变换,以增加数据集规模和多样性的技术。其主要目的是:

  • 提高模型的泛化能力:通过生成更多的训练样本,模型可以学习到更多的特征,从而提高对未见数据的预测能力。
  • 减少过拟合:数据增强可以增加数据集的多样性,使得模型不会过度依赖于某些特定的特征,从而减少过拟合的风险。
  • 降低数据收集成本:在某些情况下,收集和标记新的数据非常困难或昂贵。数据增强可以通过对已有数据进行变换来生成新的样本,从而降低数据收集的成本。

图片数据增强的方式大全

图片数据增强是计算机视觉和图像处理领域中的一个关键技术,主要用于改善图像的质量或者使其更适合后续的图像分析任务。以下是一些常见的图片数据增强方式:

几何变换
  • 翻转水平翻转:使图像左右对称。垂直翻转:使图像上下对称。
import cv2# 读取图像
image = cv2.imread('path_to_image.jpg')def get_flipped(image, way):'''翻转函数,way=1 水平翻转,way=0 垂直反转'''return cv2.flip(image, way)
  • 旋转:随机旋转图像一定角度,常见角度范围为0到360度,可以模拟不同角度的视图。
def get_rotated(iamge, angle):'''旋转图像angle角度'''# 获取图像尺寸(h, w) = image.shape[:2]# 计算中心center = (w // 2, h // 2)# 旋转图像(角度为45度)rotated = cv2.getRotationMatrix2D(center, angle, 1.0)rotated = cv2.warpAffine(image, rotated, (w, h))return rotated
  • 缩放:随机放大或缩小图像,以不同的比例缩放图像,使模型适应不同尺寸的物体。
def get_scaled(image, fx=0.5, fy=0.5):'''缩放图像,fx和fy为x轴和y轴的缩放系数'''scaled = cv2.resize(image, None, fx=fx, fy=fy, interpolation=cv2.INTER_AREA)return scaled
  • 裁剪:随机裁剪图像的一部分,可以是中心裁剪或随机裁剪,以增加数据多样性。
def get_cropped(image, (x1,y1), (x2, y2)):# 裁剪图像(左上角和右下角坐标)cropped = image[y1:y2, x1:x2]return cropped
  • 平移:在水平和垂直方向上移动图像的内容,帮助模型学习到物体在不同位置的特征。
def get_translated(image, dx=100,dy=50):
# 平移矩阵(默认向右平移100,向下平移50)M = np.float32([[1, 0, 100], [0, 1, 50]])return cv2.warpAffine(image, M, (w, h))
  • 透视变换:改变图像的透视角度,模拟不同的视角效果。
# 定义源点和目标点
pts1 = np.float32([[50, 50], [200, 50], [50, 200], [200, 200]])
pts2 = np.float32([[10, 100], [200, 50], [10, 250], [200, 200]])# 计算透视变换矩阵
M = cv2.getPerspectiveTransform(pts1, pts2)# 应用透视变换
warped = cv2.warpPerspective(image, M, (w, h))
颜色变换
  • 亮度调整:通过增加或减少图像的亮度值来改变图像的整体亮度,模拟不同的光照条件。
# 增加亮度(值为正数)或减少亮度(值为负数)
beta = 30  # 亮度增量
adjusted_brightness = cv2.convertScaleAbs(image, alpha=1, beta=beta)
  • 对比度调整:通过改变图像中亮度值的分布来增强图像的对比度,使得图像中的细节更加清晰。
# 对比度控制(alpha值)
alpha = 1.5  # 对比度因子
adjusted_contrast = cv2.convertScaleAbs(image, alpha=alpha, beta=0)
  • 饱和度调整:通过改变颜色的饱和程度来影响图像的色彩表现,增加饱和度可以使颜色更加鲜艳,而降低饱和度则会使颜色趋向灰色。
# 转换为HSV颜色空间
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)# 调整饱和度(S通道)
h, s, v = cv2.split(hsv)
s = cv2.add(s, 50)  # 增加饱和度
s = cv2.clip(s, 0, 255).astype(hsv.dtype)  # 裁剪并转换类型# 合并通道并转换回BGR颜色空间
adjusted_saturation = cv2.merge([h, s, v])
adjusted_saturation = cv2.cvtColor(adjusted_saturation, cv2.COLOR_HSV2BGR)
  • 色相调整:通过改变颜色的色相值来改变图像的整体色调,可以用来生成不同色彩风格的图像。
# 调整色相(H通道)
h, s, v = cv2.split(hsv)
h = cv2.add(h, 30)  # 增加色相值(注意循环)
h[h >= 180] -= 180  # 处理超过180的情况# 合并通道并转换回BGR颜色空间
adjusted_hue = cv2.merge([h, s, v])
adjusted_hue = cv2.cvtColor(adjusted_hue, cv2.COLOR_HSV2BGR)
噪声添加
  • 高斯噪声:模拟传感器噪声。
# 生成高斯噪声
mean = 0
sigma = 25
gauss = np.random.normal(mean, sigma, image.shape).astype('uint8')# 将噪声添加到图像
noisy = cv2.add(image, gauss)
  • 椒盐噪声:模拟图像传输中的干扰,图像中随机出现亮点(盐)和暗点(胡椒)。
# 生成椒盐噪声
num_salt = 1000  # 盐的数量
num_pepper = 1000  # 椒的数量# 盐噪声
img = image.copy()
coords = [np.random.randint(0, i - 1, num_salt) for i in image.shape]
img[coords[0], coords[1], :] = 255# 椒噪声
coords = [np.random.randint(0, i - 1, num_pepper) for i in image.shape]
img[coords[0], coords[1], :] = 0noisy_salt_pepper = img
  • 高斯模糊:对图像应用高斯模糊,以模拟景深或模糊效果。

Mixup:通过混合两张图像及其对应的标签来生成新的训练样本。具体来说,给定两对训练样本,通过线性插值的方式将两张输入图像及其标签混合生成新的训练样本。

这些图片数据增强技术可以单独使用,也可以组合使用,以提高训练数据的多样性和模型的鲁棒性。在实际应用中,可以根据具体任务和数据集特点选择合适的数据增强方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/471913.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

生成自签名证书并配置 HTTPS 使用自签名证书

生成自签名证书 1. 运行 OpenSSL 命令生成证书和私钥 在终端中输入以下命令,生成自签名证书和私钥文件: sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout self_signed.key -out self_signed.pem-x509:生成自签名证书。…

物料数据对接:轻易云助力聚水潭与金蝶云星空集成方案

聚水潭数据集成到金蝶云星空:物料对接方案 在企业信息化系统中,数据的高效流动和准确对接是业务运营的关键。本文将聚焦于一个具体的技术案例——如何通过轻易云数据集成平台实现聚水潭与金蝶云星空之间的物料数据对接。 本次集成任务主要涉及两个核心…

阅读2020-2023年《国外军用无人机装备技术发展综述》笔记_作战无人机和察打无人机图鉴

文献基本信息 题名作者来源发表时间2020年国外先进军用无人机技术发展综述 袁成;董晓琳;朱超磊 飞航导弹 2021-01-14 2021年国外军用无人机装备技术发展综述 朱超磊 ;袁成;杨佳会;飞航导弹 战术导弹技术2022-02-112022年国外军用无人机装备技术发展综述 朱超磊;金钰;王靖…

【C#设计模式(11)——外观模式(Facade Pattern)】

前言 外观模式隐藏了子系统的复杂性,简化了客户端与子系统之间的交互。 代码 public class Facade{private CommunicationModel communicationModel;private AcquisitionModel acquisitionModel;private ToolModel toolModel;public Facade(){communicationModel n…

学习日记_20241115_聚类方法(层次聚类)

前言 提醒: 文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。 其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展…

力扣 LeetCode 239. 滑动窗口最大值(Day5:栈与队列)

解题思路: 始终维护deque的头元素为最大值,后面来的值更大就会逐一清除前面比它小的值 可以把 peek() 改为 peekFirst() ,虽然是一个意思,但看起来更加清楚,对于双端队列能更清晰地表述具体操作 class Solution {pu…

基于GPU器件行为的创新分布式功能安全机制为智能驾驶保驾护航

作者:商瑞 陈娇 随着汽车智能化程度的快速提高,大量新的处理器和系统级芯片(SoC)被广泛引入到车辆中,无论是在驾驶还是座舱等场景,无论采用域控制器模式还是新兴的中央控制单元模式,都无一例外…

高美GULMAY高压发生器维修X射线源维修CF160

GULMAY高压发生器维修规格系列包括:CF,FC,CP等系列 维修类别:仪器仪表/无损检测仪器/其他无损检测仪器 GULMAY公司作为世界上X的工业X射线高压系统制造厂家之一,GULMAY公司拥有30多年的研发和制造经验,不但为XX射线探伤X域的用户提供种类繁多的标准型号…

动态规划-背包问题——[模版]完全背包问题

1.题目解析 题目来源 [模版]完全背包_牛客题霸_牛客 测试用例 2.算法原理 1.状态表示 与01背包相同,这里的完全背包也是需要一个二维dp表来表示最大价值,具体如下 求最大价值dp[i][j]:在[1,i]区间选择物品,此时总体积不大于j时的最大价值 求…

Android音视频直播低延迟探究之:WLAN低延迟模式

Android WLAN低延迟模式 Android WLAN低延迟模式是 Android 10 引入的一种功能,允许对延迟敏感的应用将 Wi-Fi 配置为低延迟模式,以减少网络延迟,启动条件如下: Wi-Fi 已启用且设备可以访问互联网。应用已创建并获得 Wi-Fi 锁&a…

Android setTheme设置透明主题无效

【问题现象】 1、首先&#xff0c;你在AndroidManifest.xml中声明一个activity&#xff0c;不给application或者activity设置android:theme, 例如这样&#xff1a; <applicationandroid:allowBackup"true"android:icon"mipmap/ic_launcher"android:lab…

基于Spring Boot的在线性格测试系统设计与实现(源码+定制+开发)智能性格测试与用户个性分析平台、在线心理测评系统的开发、性格测试与个性数据管理系统

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

摄像机视频分析软件下载LiteAIServer视频智能分析软件抖动检测的技术实现

在现代社会中&#xff0c;视频监控系统扮演着至关重要的角色&#xff0c;其可靠性和有效性在很大程度上取决于视频质量。然而&#xff0c;由于多种因素&#xff0c;如摄像机安装不当、外部环境振动或视频信号传输的不稳定&#xff0c;视频画面常常出现抖动问题&#xff0c;这不…

一文说清libc、glibc、glib的发展和关系

一 引言 在大家的技术生涯中&#xff0c;一定会遇到glib、glibc、libc这些个名词。 尤其像我这种对英文名脸盲的人&#xff0c;看着它们就头大&#xff0c;因为单从名字上看&#xff0c;也太像了&#xff0c;所以经常容易混淆。 即使翻翻网上的资料&#xff0c;看完还是有点懵…

【postman】怎么通过curl看请求报什么错

获取现成的curl方式&#xff1a; 1&#xff0c;拿别人给的curl 2&#xff0c;手机app界面通过charles抓包&#xff0c;点击接口复制curl 3&#xff0c;浏览器界面-开发者工具-选中接口复制curl 拿到curl之后打开postman&#xff0c;点击import&#xff0c;粘贴curl点击send&am…

综合文化信息管理系统|基于java和小程序的综合文化信息管理系统设计与实现(源码+数据库+文档)

综合文化信息管理系统 目录 基于java和小程序的打印室预约系统设计与实现 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&…

vue3: ref, reactive, readonly, shallowReactive

vue3: ref, reactive, readonly, shallowReactive 原文地址:https://mp.weixin.qq.com/s/S3jPZKEMBP8nQQObF5d2VA <template><!-- <ul><li v-for"item in list.arr">{{item}}</li></ul><button click.prevent"add"…

计算机毕业设计Python+大模型中医养生问答系统 知识图谱 医疗大数据 中医可视化 机器学习 深度学习 人工智能 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

【Java Web】Ajax 介绍及 jQuery 实现

文章目录 AJAX介绍XMLHttpRequestjQuery实现Ajax$.ajax()$().load()$.get()$.post() AJAX介绍 AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;是一种创建高效、动态网页应用的网页开发技术。它允许在不重新加载整个页面的情况下进行异步数据更新和交互&#xf…