【深度学习】(6)--图像数据增强

server/2024/9/25 14:10:11/

文章目录

  • 图像数据增强
    • 一、作用
    • 二、增强方法
    • 三、代码体现
    • 四、增强体现
  • 总结

图像数据增强

数据增强(Data Augmentation),也称为数据增广,是一种在机器学习和深度学习中常用的技术,它通过对现有数据进行各种变换和处理来生成新的训练样本,从而增加数据集的多样性和数量。这种方法在解决数据稀缺、提高模型泛化能力和鲁棒性方面具有重要意义。

一、作用

缓解了深度学习中数据不足的场景,在图像领域首先得到广泛使用,进而延伸到 NLP 领域,并在许多任务上取得效果。一个主要的方向是增加训练数据的多样性,从而提高模型泛化能力。

二、增强方法

图像数据增强:

  • 几何变换:如翻转、旋转、缩放、平移、裁剪等,改变图像的空间位置或尺寸。
  • 颜色变换:调整图像的亮度、对比度、饱和度等颜色属性。
  • 噪声添加:在图像中添加随机噪声,如高斯噪声、椒盐噪声等。
  • 模糊处理:使用高斯模糊、运动模糊等模糊技术处理图像。
  • 仿射变换:进行更复杂的图像变换,如透视变换等。

三、代码体现

方法

-- RandomRotation() --> 随机旋转
-- CenterCrop() --> 中心剪裁
-- RandomHorizontalFlip() --> 随机水平旋转
-- RandomVerticalFlip() --> 随机垂直旋转
-- ColorJitter() --> 颜色变换
-- RandomGrayscale() --> 转化为灰度图
-- Normalize() --> 标准化
from torchvision import transforms
"""-----创建数据集的类---数据增强-----"""
data_transforms = {'train':transforms.Compose([transforms.Resize([300,300]),transforms.RandomRotation(45), # 随机旋转,-45到45度之间随便选transforms.CenterCrop(216), # 从中心开始剪裁transforms.RandomHorizontalFlip(p=0.5),# 随机水平反转,设定一个概率transforms.RandomVerticalFlip(p=0.5),# 随机垂直反转transforms.ColorJitter(brightness=0.2,contrast=0.1,saturation=0.1,hue=0.1),# 参数1亮度,参数2对比度,参数3饱和度,参数4色相transforms.RandomGrayscale(p=0.1),# 转化为灰度图transforms.ToTensor(),transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225]) # 标准化:均值,标准差(统一的)]),'valid':transforms.Compose([transforms.Resize([216,216]),transforms.ToTensor(),transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])]),
}

上述代码中,完全体现了当有图像传入之后,图像会进行的变化。

四、增强体现

从上述代码中,我们也能发现,上述的操作只是将传入的图像进行调整变换并没有增加训练集呀?不像是在机器学习时进行的过采样拟合数据,直观的看到100条数据拟合成了1000条数据,数据明显增多了。这里的数据增强仅仅只是将传入的图像进行调整变换,训练的数据集数量并没有动,那它是怎么将上述代码的作用体现出来从而实现数据增强的呢?

重点环节就在epochs循环中:

epochs = 50
for t in range(epochs):print(f"Epoch {t+1} \n-------------------------")train(train_dataloader,model,loss_fn,optimizer)
print("Done!")

我们在进行epochs循环时,每次都需要调用train_dataloader,我们再看看train_dataloader数据加载器是什么:

train_dataloader = DataLoader(training_data,batch_size=64,shuffle=True)

我们又发现了,train数据加载器是对training_data训练集数据的处理,那我们再看看训练集数据是什么:

training_data = food_dataset(file_path='train_labels.txt',transform=data_transforms['train'])

在这里!!我们发现transform预处理参数设置的是数据增强的代码,所以意味着,每次循环时,原始数据集都会进入到transform操作中进行变换,每次变换都是随机的,也就意味着每次循环训练时都会有大量不同的数据进行训练,从而使得神经网络训练了大量的数据集。

总结

本篇介绍了:

  1. 数据增强的方法。
  2. 数据增强是如何体现的。

注意:数据增强与过采样直接拟合大量数据不同,数据增强体现在每次循环训练数据前,都给数据进行一次随机变换,使得每次训练的数据都不一样,从而实现训练大量的数据。


http://www.ppmy.cn/server/121852.html

相关文章

FAT32取证分析

前言: 在正常工作中经常会有数据恢复或者取证分析的场景,数据是否能被恢复,主要还是看数据是否被覆盖,正常情况下文件虽然被删除,只是修对应的标志位,文件本身数据并不会被破坏,所以我们就可以…

系统架构笔记-2-计算机系统基础知识

知识要点-2.6计算机语言 UML 对系统架构的定义是系统的组织结构,包括系统分解的组成部分以及它们的关联性、交互机制和指导原则等,提供系统设计的信息。 具体有以下 5 个系统视图: 1. 逻辑视图:也称为设计视图,表示…

Flink 中 Checkpoint 的底层原理和机制

Flink 的 Checkpoint 机制是 Apache Flink 在流式处理中的一个核心特性,保证了分布式数据流处理系统的 容错性。通过定期保存 状态快照(checkpoint),即使在发生故障时,Flink 也可以恢复到之前的状态,确保处…

鸿蒙OpenHarmony【轻量系统内核(标准库支持)】子系统开发

CMSIS支持 基本概念 [CMSIS]是Cortex Microcontroller Software Interface Standard(Cortex微控制器软件接口标准)的缩写,是对于那些基于ARM Cortex处理器的微控制器独立于供应商的硬件抽象层。它包含多个组件层,其中之一是RTOS…

Python轴承故障诊断 (一)短时傅里叶变换STFT

​ 前言 本文基于凯斯西储大学(CWRU)轴承数据,进行短时傅里叶变换的介绍与参数选择,最后通过Python实现对故障数据的时频图像分类。凯斯西储大学轴承数据的详细介绍可以参考下文: Python-凯斯西储大学(CWR…

27 C 语言标准库 <stdio.h> 中的两个重要字符串函数:sprintf、sscanf

目录 1 sprintf 1.1 函数原型 1.2 功能说明 1.3 案例演示 1.4 注意事项 2 sscanf 2.1 函数原型 2.2 功能说明 2.3 案例演示 2.4 注意事项 1 sprintf 1.1 函数原型 sprintf 函数是 C 语言标准库中的一个函数,用于将格式化的数据写入字符串。其函数原型定义…

2024年三个月自学手册 网络安全(黑客技术)

🤟 基于入门网络安全/黑客打造的:👉黑客&网络安全入门&进阶学习资源包 前言 什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、…

EasyCVR全方位安全守护智慧电厂:构建高效视频监控系统优势分析

随着信息技术的飞速发展和数字化时代的到来,电厂作为能源供应的重要枢纽,其安全性和管理效率成为社会各界关注的焦点。为了满足电厂对高效、智能、可靠视频监控系统的需求,基于EasyCVR平台建设的电厂视频监控系统应运而生。 一、系统构成 基…