深度学习 PyTorch 中 18 种数据增强策略与实现
深度学习pytorch之简单方法自定义9类卷积即插即用
数据增强通过对训练数据进行多种变换,增加数据的多样性,它帮助我们提高模型的鲁棒性,并减少过拟合的风险。PyTorch 提供torchvision.transforms 模块丰富的数据增强操作,我们可以通过组合多种策略来实现复杂的增强效果。本文将介绍 18 种常用的图像数据增强策略,并展示如何使用 PyTorch 中的 torchvision.transforms 来实现这些策略。
文章目录
- 综合应用:创建一个数据增强流程
- 1. 随机水平翻转(Random Horizontal Flip)
- 2. 随机垂直翻转(Random Vertical Flip)
- 3. 随机旋转(Random Rotation)
- 4. 随机裁剪(Random Crop)
- 5. 随机缩放(Random Resized Crop)
- 6. 颜色抖动(Color Jitter)
- 7. 亮度调整(Brightness Adjust)
- 8. 对比度调整(Contrast Adjust)
- 9. 饱和度调整(Saturation Adjust)
- 10. 色相调整(Hue Adjust)
- 11. 随机灰度转换(Random Grayscale)
- 12. 高斯模糊(Gaussian Blur)
- 13. 切变变换(Shear Transform)
- 14. 仿射变换(Affine Transform)
- 15. 随机噪声添加(Random Noise)
- 16. 随机剪切(Random Erasing)
- 17. 图像平移(Translation)
- 18. 图像归一化(Normalization)
综合应用:创建一个数据增强流程
我们可以将下述增强策略结合起来,创建一个数据增强流程(transform)。以下是流程示例:
transform = transforms.Compose([transforms.RandomHorizontalFlip(p=0.5),transforms.RandomRotation(30),transforms.RandomResizedCrop(224, scale=(0.8, 1.0)),transforms.ColorJitter(brightness=0.5, contrast=0.5, saturation=0.5, hue=0.5),transforms.RandomGrayscale(p=0.2),transforms.ToTensor(),transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])
1. 随机水平翻转(Random Horizontal Flip)
水平翻转是最常见的图像数据增强技术之一。它通过以一定的概率(通常是 50%)对图像进行水平翻转,增加图像的多样性,尤其在对称性较强的物体(如人脸、动物等)中效果显著。
transform = transforms.RandomHorizontalFlip(p=0.5)
2. 随机垂直翻转(Random Vertical Flip)
垂直翻转与水平翻转类似,但适用于那些具有垂直对称性的图像。
transform = transforms.RandomVerticalFlip(p=0.5)
3. 随机旋转(Random Rotation)
随机旋转可以使模型适应不同的物体方向。旋转角度通常在一定范围内随机选择。
transform = transforms.RandomRotation(degrees=30)
4. 随机裁剪(Random Crop)
裁剪操作通过从图像中裁剪出一个随机区域,可以改变图像的视角,模拟拍摄角度的变化。
transform = transforms.RandomCrop(size=(224, 224))
5. 随机缩放(Random Resized Crop)
随机缩放操作首先从图像中随机裁剪出一部分,然后将其缩放到指定的大小。这有助于增强图像的尺度变化。
transform = transforms.RandomResizedCrop(224, scale=(0.8, 1.0))
6. 颜色抖动(Color Jitter)
颜色抖动是通过随机改变图像的亮度、对比度、饱和度和色相来增加图像的多样性。它特别适用于颜色变化较大的场景。
transform = transforms.ColorJitter(brightness=0.5, contrast=0.5, saturation=0.5, hue=0.5)
7. 亮度调整(Brightness Adjust)
通过改变图像的亮度来模拟不同的光照条件,使模型在低光或强光环境下具有更好的鲁棒性。
transform = transforms.ColorJitter(brightness=0.5)
8. 对比度调整(Contrast Adjust)
通过随机调整图像的对比度,帮助模型适应高对比和低对比的图像。
transform = transforms.ColorJitter(contrast=0.5)
9. 饱和度调整(Saturation Adjust)
通过随机调整图像的饱和度,模拟不同的颜色鲜艳度,可以帮助模型适应不同的色彩环境。
transform = transforms.ColorJitter(saturation=0.5)
10. 色相调整(Hue Adjust)
色相调整改变图像的整体色调,通过随机变化色相值来模拟不同的环境色彩。
transform = transforms.ColorJitter(hue=0.5)
11. 随机灰度转换(Random Grayscale)
随机将图像转换为灰度图像,通常通过一定的概率来进行。它有助于减少颜色信息对模型的影响。
transform = transforms.RandomGrayscale(p=0.2)
12. 高斯模糊(Gaussian Blur)
高斯模糊是一种图像模糊技术,可以模拟图像在不同焦距下的效果,增加数据集的多样性。
transform = transforms.GaussianBlur(kernel_size=(5, 5), sigma=(0.1, 2.0))
13. 切变变换(Shear Transform)
切变变换可以对图像进行倾斜,增加图像的几何形状变化,模拟视角变化。
transform = transforms.RandomAffine(degrees=0, shear=20)
14. 仿射变换(Affine Transform)
仿射变换可以通过平移、旋转、缩放等方式对图像进行变换,保持图像的几何形状不变。
transform = transforms.RandomAffine(degrees=0, translate=(0.1, 0.1), scale=(0.8, 1.2))
15. 随机噪声添加(Random Noise)
在图像中添加随机噪声可以帮助模型更好地适应低质量的输入。虽然 PyTorch 中没有内置的噪声添加操作,但可以通过自定义变换来实现。
import numpy as np
import torchclass AddNoise(object):def __init__(self, mean=0., std=1.):self.mean = meanself.std = stddef __call__(self, img):img = np.array(img)noise = np.random.normal(self.mean, self.std, img.shape)img = img + noiseimg = np.clip(img, 0, 255)return Image.fromarray(img.astype(np.uint8))transform = AddNoise(mean=0., std=25.)
16. 随机剪切(Random Erasing)
随机剪切是通过随机选择图像中的一部分并将其替换为随机颜色,增强模型对遮挡和噪声的鲁棒性。
transform = transforms.RandomErasing(p=0.5)
17. 图像平移(Translation)
平移操作对图像进行平移,模拟物体在图像中的移动。可以帮助模型适应不同的定位变化。
transform = transforms.RandomAffine(degrees=0, translate=(0.1, 0.1))
18. 图像归一化(Normalization)
归一化操作将图像的像素值调整到一定范围内,通常是 [0, 1] 或 [-1, 1],通过减去均值并除以标准差来实现。
transform = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
相关文章:
深度学习 PyTorch 中 18 种数据增强策略与实现
深度学习pytorch之简单方法自定义9类卷积即插即用 数据增强通过对训练数据进行多种变换,增加数据的多样性,它帮助我们提高模型的鲁棒性,并减少过拟合的风险。PyTorch 提供torchvision.transforms 模块丰富的数据增强操作,我们可以…...
视觉图像处理
在MATLAB中进行视觉图像处理仿真通常涉及图像增强、滤波、分割、特征提取等操作。以下是一个分步指南和示例代码,帮助您快速入门: 1. MATLAB图像处理基础步骤 1.1 读取和显示图像 % 读取图像(替换为实际文件路径) img = imread(lena.jpg); % 显示原图 figure; subplot(2…...
深度学习与普通神经网络有何区别?
深度学习与普通神经网络的主要区别体现在以下几个方面: 一、结构复杂度 普通神经网络:通常指浅层结构,层数较少,一般为2-3层,包括输入层、一个或多个隐藏层、输出层。深度学习:强调通过5层以上的深度架构…...
Vue3、vue学习笔记
<!-- Vue3 --> 1、Vue项目搭建 npm init vuelatest cd 文件目录 npm i npm run dev // npm run _ 这个在package.json中查看scripts /* vue_study\.vscode可删 // vue_study\src\components也可删除(基本语法,不使用组件) */ // vue_study\.vscode\lau…...
python中C#类库调用+调试方法~~~
因为开发需要,我们经常会用C#来写一些库供python调用,但是在使用过程中难免会碰到一些问题,需要我们抽丝剥茧来解决~~~ 首先,我们在python中要想调用C#(基于.net)的dll,需要安装一个库,它就是 pythonnet …...
L33.【LeetCode笔记】循环队列(数组解法)
目录 1.题目 2.分析 方法1:链表 尝试使用单向循环链表模拟 插入节点 解决方法1:开辟(k1)个节点 解决方法2:使用变量size记录队列元素个数 获取队尾元素 其他函数的实现说明 方法2:数组 重要点:指针越界的解决方法 方法1:单独判断 方法2:取模 3.数组代码的逐步实现…...
css实现元素垂直居中显示的7种方式
文章目录 * [【一】知道居中元素的宽高](https://blog.csdn.net/weixin_41305441/article/details/89886846#_1) [absolute 负margin](https://blog.csdn.net/weixin_41305441/article/details/89886846#absolute__margin_2) [absolute margin auto](https://blog.csdn.net…...
【Python】Django 中的算法应用与实现
Django 中的算法应用与实现 在 Django 开发中,算法的应用可以极大地扩展 Web 应用的功能和性能。从简单的数据处理到复杂的机器学习模型,Django 都可以作为一个强大的后端框架来支持这些算法的实现。本文将介绍几种常见的算法及其在 Django 中的使用方法…...
Docker 运行 GPUStack 的详细教程
GPUStack GPUStack 是一个用于运行 AI 模型的开源 GPU 集群管理器。它具有广泛的硬件兼容性,支持多种品牌的 GPU,并能在 Apple MacBook、Windows PC 和 Linux 服务器上运行。GPUStack 支持各种 AI 模型,包括大型语言模型(LLMs&am…...
Kubernetes中的 iptables 规则介绍
#作者:邓伟 文章目录 一、Kubernetes 网络模型概述二、iptables 基础知识三、Kubernetes 中的 iptables 应用四、查看和调试 iptables 规则五、总结 在 Kubernetes 集群中,iptables 是一个核心组件, 用于实现服务发现和网络策略。iptables 通…...
解决VScode 连接不上问题
问题 :VScode 连接不上 解决方案: 1、手动杀死VS Code服务器进程,然后重新尝试登录 打开xshell ,远程连接服务器 ,查看vscode的进程 ,然后全部杀掉 [cxqiZwz9fjj2ssnshikw14avaZ ~]$ ps ajx | grep vsc…...
AI 驱动的软件测试革命:从自动化到智能化的进阶之路
🚀引言:软件测试的智能化转型浪潮 在数字化转型加速的今天,软件产品的迭代速度与复杂度呈指数级增长。传统软件测试依赖人工编写用例、执行测试的模式,已难以应对快速交付与高质量要求的双重挑战。人工智能技术的突破为测试领域注…...
【Java代码审计 | 第六篇】XSS防范
文章目录 XSS防范使用HTML转义使用Content Security Policy (CSP)输入验证使用安全的库和框架避免直接使用用户输入构建JavaScript代码 XSS防范 使用HTML转义 在输出用户输入时,对特殊字符进行转义,防止它们被解释为HTML或JavaScript代码。 例如&…...
Android WebSocket工具类:重连、心跳、消息队列一站式解决方案
依赖库 使用 OkHttp 的WebSocket支持。 在 build.gradle 中添加依赖: implementation com.squareup.okhttp3:okhttp:4.9.3WebSocket工具类实现 import okhttp3.*; import android.os.Handler; import android.os.Looper; import android.util.Log;import java.ut…...
认识vue2脚手架
1.认识脚手架结构 使用VSCode将vue项目打开: package.json:包的说明书(包的名字,包的版本,依赖哪些库)。该文件里有webpack的短命令: serve(启动内置服务器) build命令…...
【STM32】STM32系列产品以及新手入门的STM32F103
📢 STM32F103xC/D/E 系列是一款高性能、低功耗的 32 位 MCU,适用于工业、汽车、消费电子等领域;基于 ARM Cortex-M3,主频最高 72MHz,支持 512KB Flash、64KB SRAM,适合复杂嵌入式应用,提供丰富的…...
<建模软件安装教程1>Blender4.2系列
Blender4.2安装教程 0注意:Windows环境下安装 第一步,百度网盘提取安装包。百度网盘链接:通过网盘分享的文件:blender.zip 链接: https://pan.baidu.com/s/1OG0jMMtN0qWDSQ6z_rE-9w 提取码: 0309 --来自百度网盘超级会员v3的分…...
CentOS Docker 安装指南
CentOS Docker 安装指南 引言 Docker 是一个开源的应用容器引擎,它允许开发者打包他们的应用以及应用的依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。Docker 容器是完全使用沙箱机制,相互之…...
分布式ID生成方案:数据库号段、Redis与第三方开源实现
分布式ID生成方案:数据库号段、Redis与第三方开源实现 引言 在分布式系统中,全局唯一ID生成是核心基础能力之一。本文针对三种主流分布式ID生成方案(数据库号段模式、Redis方案、第三方开源框架)进行解析,从实现原理…...
tcc编译器教程2 编译lua解释器
本文主要介绍了使用tcc编译器编译lua解释器源码。 1 介绍 lua是一门编程语言,开源且源码很容易编译,我平时用来测试C语言编程环境时经常使用。一般能编译成功就说明编程环境设置正常。下面用之前设置好的tcc编程环境进行测试。 2 获取源码 我一般有保留多个版本的lua源码进…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
