当前位置: 首页 > news >正文

深度学习之图像数据集增强(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实现传统数据增强参考文献 一、 数据增强概述 数据增强&#xff08;Data Augmentation&#xff09;是一种技术&#xff0c;通过对现有数据进行各种变换和处理来生成新的训练样本&#xff0c;从而增加数据集的多样性和数量。这些变换可以是…...

小程序与APP的区别

目录 前言1. 开发方式与成本2. 运行环境与获取途径3. 功能复杂度与交互体验4. 更新与维护5. 推广与用户获取6. 占用空间与存储7. 可分享性总结 前言 小程序与APP作为两种不同类型的应用程序&#xff0c;它们在多个方面存在明显的区别。以下是对这些区别的详细阐述&#xff1a;…...

Linux Kernel Makefiles 编译标志详解

在Linux内核开发中&#xff0c;Makefile文件扮演着至关重要的角色&#xff0c;它指导make命令如何编译和链接内核源代码。Makefile中包含了多种编译标志&#xff08;flags&#xff09;&#xff0c;这些标志控制着编译、汇编和链接过程的不同方面。本文将详细介绍几种关键的编译…...

数据可视化pyecharts——数据分析(柱状图、折线图、饼图)

安装 首先确保已经安装了pyecharts库&#xff0c;如果没有&#xff0c;可以通过pip install pyecharts进行安装。 柱状图 从pyecharts.charts导入Bar&#xff0c;从pyecharts导入options。准备数据&#xff08;如类别数据x_data和对应的数值数据y_data&#xff09;。创建Bar对…...

小程序构建npm失败

小程序构建npm失败 项目工程结构说明解决方法引入依赖导致的其他问题 今天在初始化后的小程序中引入TDesign组件库&#xff0c;构建npm时报错。 项目工程结构说明 初始化后的项目中&#xff0c;包含miniprogram文件夹和一些项目配置文件&#xff0c;在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。。。 环境布置&#xff0c;库的安装顺序&#xff1a; 确定显卡可用的cuda上下限 (比如3090需要至少11.x以上的cuda参考&#xff1a; 一文理顺&#xff1a;pytorch、cuda版本&#xff0c;从此不再为兼容问题头疼&#xff01; - 哔哩哔哩 (bilibili.com)&am…...

线性代数书中求解线性方程组的三种方法的实例

目录 一、克拉默法则(P45) 二、逆矩阵(P46) 三、高斯-约旦消元法(P65) 一、克拉默法则(P45) 二、逆矩阵(P46) 三、高斯-约旦消元法(P65)...

Linux容器化管理——Docker常见命令总结

创建镜像 docker build -t &#xff08;镜像名&#xff09; . 自动在当前目录下找dockerfile也可换成其他路径 查看本地镜像 docker images 登陆镜像服务器 docker login -u &#xff08;登录名&#xff09; -p &#xff08;登陆密码&#xff09; &#xff08;镜像服务器…...

智慧校园建设解决方案建设系统简介

一、建设背景 1.1 政策背景 1.2 班牌的演变 1.3 建设愿景 二、 智慧班牌简介 三、智慧班牌系统 3.1 系统概述 3.2 软件平台功能交互简介 3.2.1 智慧班牌与管理平台间的功能关联 3.2.2 手机客户端&#xff08;管理员、教师、家长端&#xff09; 3.2.3 手机客户端&#x…...

用Python打造互动式中秋节庆祝小程序

中秋节&#xff0c;这个充满传统韵味的节日&#xff0c;不仅是家人团聚的时刻&#xff0c;也是程序员展示创意的好机会。本文将引导您使用Python创建一个互动式中秋节庆祝小程序&#xff0c;它不仅能够展示节日祝福&#xff0c;还能通过一些简单的特效增加节日气氛。 文章目录 …...

Linux 生成 git ssh 公钥

在Linux系统中生成SSH公钥以用于Git的步骤如下&#xff1a; 打开终端&#xff1a;首先&#xff0c;你需要打开你的Linux系统的终端。 检查SSH密钥&#xff1a;在生成新的SSH密钥之前&#xff0c;你可以检查是否已经存在SSH密钥。在终端中输入以下命令&#xff1a; ls -al ~/.s…...

CertiK因发现Apple Vision Pro眼动追踪技术漏洞,第6次获苹果认可

​2024年9月20日&#xff0c;头部Web3.0安全机构CertiK自豪地宣布&#xff0c;CertiK的工程师因发现Apple Vision Pro MR&#xff08;混合现实&#xff09;头显设备中的关键漏洞而获得Apple公司认可&#xff0c;这已经是Apple公司第六次公开发布对CertiK的致谢&#xff0c;Cert…...

自动登录 RPA 的进阶:滑块验证的巧妙实现

​在RPA的众多应用场景的探索中&#xff0c;自动登录是一个至关重要的环节&#xff0c;它为后续的自动化操作奠定了基础。然而&#xff0c;当我们面对滑块验证这一常见的挑战时&#xff0c;常常会感到困惑和无从下手。本文就来分享自动登录RPA的进阶----滑块验证如何实现。 在…...

Flask-WTF的使用

组织一个 Flask 项目通常需要遵循一定的结构&#xff0c;以便代码清晰、可维护。下面是一个典型的 Flask 项目结构&#xff1a; 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) 交通流参数统计 数据预处理 数据读取&#xff1a; 从四个视频观测点提取交通流数据&#xff0c;包括每个时间段内的车流量、车速和车道占用率等。 交通流参数计算 3. 计算流量 (Q)&#xff1a; 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】

文章目录 在度量空间中&#xff0c;连续映射概述一、度量空间与距离函数二、连续映射的定义三、连续映射的等价定义四、连续映射的性质五、应用与例子 球形邻域刻画一、球形邻域的定义二、连续映射的球形邻域刻画三、等价性证明四、应用与例子 将度量空间上的连续映射推广到拓扑…...

年度巨献 | OpenCSG开源最大中文合成数据集Chinese Cosmopedia

01 背景 近年来&#xff0c;生成式语言模型&#xff08;GLM&#xff09;的飞速发展正在重塑人工智能领域&#xff0c;尤其是在自然语言处理、内容创作和智能客服等领域展现出巨大潜力。然而&#xff0c;大多数领先的语言模型主要依赖于英文数据集进行训练&#xff0c;中文数据…...

别再乱算相似度了!用Python实战二元变量聚类:从Jaccard系数到病人分组

医疗数据分析实战&#xff1a;用Python实现基于Jaccard系数的病人症状聚类在医疗数据分析领域&#xff0c;如何从海量病人症状数据中发现潜在规律一直是临床研究的难点。传统方法往往依赖医生经验或简单统计&#xff0c;而现代数据挖掘技术为我们提供了更科学的解决方案。本文将…...

SSE 基础知识

SSE 基础知识 一、概念定义 SSE 全称 Server-Sent Events&#xff0c;是基于HTTP协议的服务器单向数据推送技术。 建立一次长连接后&#xff0c;服务端可主动持续向前端推送数据&#xff0c;无需客户端反复轮询请求。 二、核心特点 单向通信&#xff1a;仅服务器 → 客户端发送…...

Android Root检测绕过:从逆向分析到Frida分层Hook实战

1. 这不是“绕过root检测”&#xff0c;而是理解检测逻辑后的精准干预在安卓逆向工程的实际工作中&#xff0c;“过root检测”这个说法本身就容易引发误解——它听起来像某种黑箱魔法&#xff0c;仿佛只要套用某个脚本、加载某个插件&#xff0c;就能让App对设备状态“视而不见…...

基于树莓派打造万能遥控器:从硬件选型到Web控制界面全解析

1. 项目概述&#xff1a;打造一个能“学习”的万能遥控器家里遥控器越来越多&#xff0c;电视、空调、风扇、灯带……每个设备都配一个&#xff0c;找起来麻烦&#xff0c;用起来也乱。市面上所谓的“万能遥控器”其实并不万能&#xff0c;它内置的码库有限&#xff0c;很多小众…...

3步快速解密中兴光猫配置:ZET工具终极实战指南

3步快速解密中兴光猫配置&#xff1a;ZET工具终极实战指南 【免费下载链接】ZET-Optical-Network-Terminal-Decoder 项目地址: https://gitcode.com/gh_mirrors/ze/ZET-Optical-Network-Terminal-Decoder 中兴光猫配置解密工具是每个网络管理员必备的神器&#xff01;Z…...

CentOS 8/Stream 8系统DNF换源后,安装软件还是慢?试试这几个排查命令和优化技巧

CentOS 8/Stream 8系统DNF换源后安装缓慢的深度排查与优化指南当你已经按照教程将CentOS 8/Stream 8的DNF源切换为国内镜像&#xff0c;却发现软件安装速度依然不尽如人意时&#xff0c;这种体验确实令人沮丧。作为长期使用CentOS系统的技术专家&#xff0c;我完全理解这种&quo…...

3分钟上手:NBTExplorer终极指南 - 可视化编辑Minecraft游戏数据的免费神器

3分钟上手&#xff1a;NBTExplorer终极指南 - 可视化编辑Minecraft游戏数据的免费神器 【免费下载链接】NBTExplorer A graphical NBT editor for all Minecraft NBT data sources 项目地址: https://gitcode.com/gh_mirrors/nb/NBTExplorer 你是否曾经想要修改Minecraf…...

API渗透测试:契约驱动的协议/语义/架构三层攻防

1. 为什么“API渗透测试”不是Web渗透的简单延伸&#xff1f;很多人刚接触API安全时&#xff0c;第一反应是&#xff1a;“不就是把Burp Suite抓到的HTTP请求换个参数发一发&#xff1f;跟测网页表单差不多。”我2018年第一次接手某金融类SaaS平台的API安全评估时&#xff0c;也…...

ImageGlass:一个支持90+图像格式的轻量级Windows图片查看器

ImageGlass&#xff1a;一个支持90图像格式的轻量级Windows图片查看器 【免费下载链接】ImageGlass &#x1f3de; A lightweight, versatile image viewer 项目地址: https://gitcode.com/gh_mirrors/im/ImageGlass 还在为Windows自带的图片查看器功能单一而烦恼吗&…...

终极Windows键盘重映射解决方案:SharpKeys完全指南

终极Windows键盘重映射解决方案&#xff1a;SharpKeys完全指南 【免费下载链接】sharpkeys SharpKeys is a utility that manages a Registry key that allows Windows to remap one key to any other key. 项目地址: https://gitcode.com/gh_mirrors/sh/sharpkeys 还在…...