深度学习之图像数据集增强(Data Augmentation)
文章目录
- 一、 数据增强概述
- 二、python实现传统数据增强
- 参考文献
一、 数据增强概述
数据增强(Data Augmentation)是一种技术,通过对现有数据进行各种变换和处理来生成新的训练样本,从而增加数据集的多样性和数量。这些变换可以是几何变换、颜色变换、噪声添加等,使模型在训练过程中能够见到更多种类的数据,从而提升模型的泛化能力和鲁棒性。
在机器学习和深度学习中,数据的数量和质量对模型的性能至关重要。然而,获取大量标注数据通常既耗时又昂贵。数据增强通过对现有数据进行多种处理,模拟出更多样化 的训练样本,有效解决了数据稀缺的问题。这样不仅能防止模型过拟合(即模型在训练数据上表现很好,但在测试数据上表现不佳),还能够提升模型在不同情况下的表现,使其具有更强的泛化能力。
数据增强的方法多种多样,如下图所示:

这些方法各有优劣,可以根据具体任务和数据特点灵活选择和组合使用,以达到最佳的数据增强效果。通过数据增强,模型能够在有限的数据基础上获得更多的训练样本,提高训练效率和效果,最终在实际应用中表现得更加稳健和可靠。其中,传统数据增强方法比较常用且实现简单,因此本文主要实现传统数据增强的方法,其他数据增强方法后续有空再进行尝试。
二、python实现传统数据增强
import os
import random
from PIL import Image, ImageEnhance, ImageOps, ImageFilter# 翻转图像
def flip_image(image, mode='horizontal'):if mode == 'horizontal':return image.transpose(Image.FLIP_LEFT_RIGHT)elif mode == 'vertical':return image.transpose(Image.FLIP_TOP_BOTTOM)else:raise ValueError("Mode should be 'horizontal' or 'vertical'")# 旋转图像
def rotate_image(image, angle):return image.rotate(angle)# 缩放图像
def scale_image(image, scale_factor):width, height = image.sizereturn image.resize((int(width * scale_factor), int(height * scale_factor)))# 图像平移
def move(img): #平移,平移尺度为offoffset = ImageChops.offset(img, np.random.randint(1, 20), np.random.randint(1, 40))return offset# 裁剪图像
def crop_image(image, crop_box):return image.crop(crop_box)# 调整亮度、对比度、饱和度、色调
def adjust_color(image, brightness=1, contrast=1, saturation=1, hue=1):enhancer = ImageEnhance.Brightness(image)image = enhancer.enhance(brightness)enhancer = ImageEnhance.Contrast(image)image = enhancer.enhance(contrast)enhancer = ImageEnhance.Color(image)image = enhancer.enhance(saturation)# hue adjustment not directly available in PIL, skippedreturn image# 添加噪声
def add_noise(image, noise_type='gaussian', mean=0, std=1):# This function is a placeholder; PIL doesn't support direct noise additionreturn image# 模糊图像
def blur_image(image, blur_type='gaussian', radius=2):if blur_type == 'gaussian':return image.filter(ImageFilter.GaussianBlur(radius))elif blur_type == 'motion':return image.filter(ImageFilter.MotionBlur(radius)) # Pillow doesn't have MotionBlur, custom implementation neededelse:raise ValueError("Blur type should be 'gaussian' or 'motion'")# 仿射变换
def affine_transform(image, matrix):return image.transform(image.size, Image.AFFINE, matrix)def test():input_image_path = 'skadi.jpg' # 输入图像路径output_folder = 'output_path' # 输出文件夹if not os.path.exists(output_folder):os.makedirs(output_folder)image = Image.open(input_image_path)# 设置增强方法及其参数methods = [('flip', {'mode': 'horizontal'}),('rotate', {'angle': 45}),('scale', {'scale_factor': 1.5}),('translate', {'x': 10, 'y': 20}),('crop', {'crop_box': (10, 10, 200, 200)}),('adjust_color', {'brightness': 1.2, 'contrast': 1.5, 'saturation': 1.3}),('add_noise', {'noise_type': 'gaussian', 'mean': 0, 'std': 1}),('blur', {'blur_type': 'gaussian', 'radius': 2}),('affine', {'matrix': (1, 0.2, 0, 0.2, 1, 0)})]# 应用选择的增强方法for method_name, params in methods:if method_name == 'flip':result_image = flip_image(image, **params)elif method_name == 'rotate':result_image = rotate_image(image, **params)elif method_name == 'scale':result_image = scale_image(image, **params)elif method_name == 'translate':result_image = translate_image(image, **params)elif method_name == 'crop':result_image = crop_image(image, **params)elif method_name == 'adjust_color':result_image = adjust_color(image, **params)elif method_name == 'add_noise':result_image = add_noise(image, **params)elif method_name == 'blur':result_image = blur_image(image, **params)elif method_name == 'affine':result_image = affine_transform(image, **params)else:continueoutput_image_path = os.path.join(output_folder, f"{method_name}_output.jpg")result_image.save(output_image_path)if __name__ == '__main__':test()
例子:对图像进行随机翻转
def pair_flip_image(img, label):p = 0.5if np.random.random() < p:return flip_image(img), flip_image(label)return img, labeldef data_expand():image_dir = r"D:\test"image_list = os.listdir(os.path.join(image_dir, 'image'))expand_time = 10for idx in range(len(image_list)):if image_list[idx].endswith(('.png', '.jpg', '.tif')):print(image_list[idx])image = Image.open(os.path.join(image_dir, 'image', image_list[idx]))label = Image.open(os.path.join(image_dir, 'label', image_list[idx]))for k in range(expand_time):image, label = pair_flip_image(image, label)image.save("image.png")label.save("label.png") if __name__ == '__main__':data_expand()
参考文献
[1] 数据增强基本介绍和常用的数据增强方法
[2] 使用python及PIL库对图像分类数据图片进行数据增强扩充
相关文章:
深度学习之图像数据集增强(Data Augmentation)
文章目录 一、 数据增强概述二、python实现传统数据增强参考文献 一、 数据增强概述 数据增强(Data Augmentation)是一种技术,通过对现有数据进行各种变换和处理来生成新的训练样本,从而增加数据集的多样性和数量。这些变换可以是…...
小程序与APP的区别
目录 前言1. 开发方式与成本2. 运行环境与获取途径3. 功能复杂度与交互体验4. 更新与维护5. 推广与用户获取6. 占用空间与存储7. 可分享性总结 前言 小程序与APP作为两种不同类型的应用程序,它们在多个方面存在明显的区别。以下是对这些区别的详细阐述:…...
Linux Kernel Makefiles 编译标志详解
在Linux内核开发中,Makefile文件扮演着至关重要的角色,它指导make命令如何编译和链接内核源代码。Makefile中包含了多种编译标志(flags),这些标志控制着编译、汇编和链接过程的不同方面。本文将详细介绍几种关键的编译…...
数据可视化pyecharts——数据分析(柱状图、折线图、饼图)
安装 首先确保已经安装了pyecharts库,如果没有,可以通过pip install pyecharts进行安装。 柱状图 从pyecharts.charts导入Bar,从pyecharts导入options。准备数据(如类别数据x_data和对应的数值数据y_data)。创建Bar对…...
小程序构建npm失败
小程序构建npm失败 项目工程结构说明解决方法引入依赖导致的其他问题 今天在初始化后的小程序中引入TDesign组件库,构建npm时报错。 项目工程结构说明 初始化后的项目中,包含miniprogram文件夹和一些项目配置文件,在project.config.json文件中…...
计算机人工智能前沿进展-大语言模型方向-2024-09-20
计算机人工智能前沿进展-大语言模型方向-2024-09-20 1. Multimodal Fusion with LLMs for Engagement Prediction in Natural Conversation Authors: Cheng Charles Ma, Kevin Hyekang Joo, Alexandria K. Vail, Sunreeta Bhattacharya, Alvaro Fern’andez Garc’ia, Kailan…...
cv环境设置
pytorch TensorFlow。。。 环境布置,库的安装顺序: 确定显卡可用的cuda上下限 (比如3090需要至少11.x以上的cuda参考: 一文理顺:pytorch、cuda版本,从此不再为兼容问题头疼! - 哔哩哔哩 (bilibili.com)&am…...
线性代数书中求解线性方程组的三种方法的实例
目录 一、克拉默法则(P45) 二、逆矩阵(P46) 三、高斯-约旦消元法(P65) 一、克拉默法则(P45) 二、逆矩阵(P46) 三、高斯-约旦消元法(P65)...
Linux容器化管理——Docker常见命令总结
创建镜像 docker build -t (镜像名) . 自动在当前目录下找dockerfile也可换成其他路径 查看本地镜像 docker images 登陆镜像服务器 docker login -u (登录名) -p (登陆密码) (镜像服务器…...
智慧校园建设解决方案建设系统简介
一、建设背景 1.1 政策背景 1.2 班牌的演变 1.3 建设愿景 二、 智慧班牌简介 三、智慧班牌系统 3.1 系统概述 3.2 软件平台功能交互简介 3.2.1 智慧班牌与管理平台间的功能关联 3.2.2 手机客户端(管理员、教师、家长端) 3.2.3 手机客户端&#x…...
用Python打造互动式中秋节庆祝小程序
中秋节,这个充满传统韵味的节日,不仅是家人团聚的时刻,也是程序员展示创意的好机会。本文将引导您使用Python创建一个互动式中秋节庆祝小程序,它不仅能够展示节日祝福,还能通过一些简单的特效增加节日气氛。 文章目录 …...
Linux 生成 git ssh 公钥
在Linux系统中生成SSH公钥以用于Git的步骤如下: 打开终端:首先,你需要打开你的Linux系统的终端。 检查SSH密钥:在生成新的SSH密钥之前,你可以检查是否已经存在SSH密钥。在终端中输入以下命令: ls -al ~/.s…...
CertiK因发现Apple Vision Pro眼动追踪技术漏洞,第6次获苹果认可
2024年9月20日,头部Web3.0安全机构CertiK自豪地宣布,CertiK的工程师因发现Apple Vision Pro MR(混合现实)头显设备中的关键漏洞而获得Apple公司认可,这已经是Apple公司第六次公开发布对CertiK的致谢,Cert…...
自动登录 RPA 的进阶:滑块验证的巧妙实现
在RPA的众多应用场景的探索中,自动登录是一个至关重要的环节,它为后续的自动化操作奠定了基础。然而,当我们面对滑块验证这一常见的挑战时,常常会感到困惑和无从下手。本文就来分享自动登录RPA的进阶----滑块验证如何实现。 在…...
Flask-WTF的使用
组织一个 Flask 项目通常需要遵循一定的结构,以便代码清晰、可维护。下面是一个典型的 Flask 项目结构: my_flask_app/ │ ├── app/ │ ├── __init__.py │ ├── models.py │ ├── views.py │ ├── forms.py │ ├── templat…...
Docker 进入容器并运行命令的方法
目录 理解 Docker 容器的基本概念 使用 docker exec 进入运行中的容器 基本用法 常用选项解析 选项详解 实际案例演示 1. 进入容器的交互式 Shell 2. 在容器中运行单个命令 3. 以指定用户运行命令 4. 设置环境变量并运行命令 5. 指定工作目录 使用 docker attach 附…...
2024“华为杯”中国研究生数学建模竞赛(E题)深度剖析_数学建模完整过程+详细思路+代码全解析
问题1详细解答过程 (1) 交通流参数统计 数据预处理 数据读取: 从四个视频观测点提取交通流数据,包括每个时间段内的车流量、车速和车道占用率等。 交通流参数计算 3. 计算流量 (Q): Q ( t ) N ( t ) Δ t Q(t) \frac{N(t)}{\Delta t} Q…...
伊犁云计算22-1 apache 安装rhel8
1 局域网网络必须通 2 yum 必须搭建成功 3 apache 必须安装 开干 要用su 用户来访问 一看httpd 组件安装完毕 到这里就是测试成功了 如何修改主页的目录 网站目录默认保存在/var/WWW/HTML 我希望改变/home/www 122 127 167 行要改...
概率论原理精解【13】
文章目录 在度量空间中,连续映射概述一、度量空间与距离函数二、连续映射的定义三、连续映射的等价定义四、连续映射的性质五、应用与例子 球形邻域刻画一、球形邻域的定义二、连续映射的球形邻域刻画三、等价性证明四、应用与例子 将度量空间上的连续映射推广到拓扑…...
年度巨献 | OpenCSG开源最大中文合成数据集Chinese Cosmopedia
01 背景 近年来,生成式语言模型(GLM)的飞速发展正在重塑人工智能领域,尤其是在自然语言处理、内容创作和智能客服等领域展现出巨大潜力。然而,大多数领先的语言模型主要依赖于英文数据集进行训练,中文数据…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...
倒装芯片凸点成型工艺
UBM(Under Bump Metallization)与Bump(焊球)形成工艺流程。我们可以将整张流程图分为三大阶段来理解: 🔧 一、UBM(Under Bump Metallization)工艺流程(黄色区域ÿ…...
数据库——redis
一、Redis 介绍 1. 概述 Redis(Remote Dictionary Server)是一个开源的、高性能的内存键值数据库系统,具有以下核心特点: 内存存储架构:数据主要存储在内存中,提供微秒级的读写响应 多数据结构支持&…...
