【深度学习实验】图像处理(三):PIL——自定义图像数据增强操作(随机遮挡、擦除、线性混合)

文章目录

  • 一、实验介绍
  • 二、实验环境
    • 1. 配置虚拟环境
    • 2. 库版本介绍
  • 三、实验内容
    • 0. 导入必要的库
    • 1. PIL基础操作
    • 2. Cutout(遮挡)
      • 2.1 原理
      • 2.2 实现
      • 2.3 效果展示
    • 3. Random Erasing(随机擦除)
      • 3.1 原理
      • 3.2 实现
      • 3.3 效果展示
    • 4. Mixup(混合)
      • 4.1 原理
      • 4.2 实现
      • 4.3 效果展示

一、实验介绍

  在深度学习任务中,数据增强是提高模型泛化能力的关键步骤之一。通过对训练集进行变换和扩充,可以有效地增加数据量,引入样本之间的差异,使模型更好地适应不同的输入。
  本实验将实现自定义图像数据增强操作,具体包括 Cutout(遮挡)、Random Erasing(随机擦除)和 Mixup(混合)

二、实验环境

1. 配置虚拟环境

conda create -n Image python=3.9 
conda activate Image
conda install pillow numpy

2. 库版本介绍

软件包本实验版本
numpy1.21.5
python3.9.13
pillow9.2.0

三、实验内容

0. 导入必要的库

import numpy as np
from PIL import Image
import random

1. PIL基础操作

【深度学习实验】图像处理(一):Python Imaging Library(PIL)库:图像读取、写入、复制、粘贴、几何变换、图像增强、图像滤波
【深度学习实验】图像处理(二):PIL 和 PyTorch(transforms)中的图像处理与随机图片增强

2. Cutout(遮挡)

2.1 原理

  Cutout 操作是在图像上随机选择一个或多个方形区域,并将这些区域的像素值设置为零,达到遮挡的效果。该操作有助于模型对于部分区域的缺失具有鲁棒性,使得模型更加关注图像的其他部分。

2.2 实现

class Cutout(object):def __init__(self, n_holes, length):self.n_holes = n_holesself.length = lengthdef __call__(self, img):h, w, c = img.shapemask = np.ones((h, w), np.float32)for _ in range(self.n_holes):y = np.random.randint(h)x = np.random.randint(w)y1 = np.clip(y - self.length // 2, 0, h)y2 = np.clip(y + self.length // 2, 0, h)x1 = np.clip(x - self.length // 2, 0, w)x2 = np.clip(x + self.length // 2, 0, w)mask[y1: y2, x1: x2] = 0.mask = np.expand_dims(mask, axis=2)mask = np.repeat(mask, c, axis=2)img = img * maskreturn img
  • 初始化参数:
    • n_holes (int): 每个图像要遮挡的区域数量。
    • length (int): 每个正方形区域的边长(以像素为单位)。
  • call
    • 参数:
      • img: 大小为 (h, w, c) 的图像数组。
    • 返回
      • 从图像中剪切出 n_holes 个边长为 length 的正方形区域后的图像。

2.3 效果展示

img = Image.open('example.jpg').convert('RGB')# 转换为 NumPy 数组
img = np.array(img)# 创建 Cutout 实例
cutout = Cutout(3, 64)# 应用 Cutout 操作
img_cut = cutout(img)# 将 NumPy 数组转换回 PIL 图像
img_result = Image.fromarray(img_cutout.astype('uint8')).convert('RGB')# 保存图像
img_result.save('./cutout_image.jpg')

在这里插入图片描述

3. Random Erasing(随机擦除)

3.1 原理

  Random Erasing 操作随机选择图像中的一个矩形区域,并将该区域的像素值擦除,用随机值替代。该操作模拟了在现实场景中图像可能被部分遮挡或损坏的情况,从而提高了模型对于不完整图像的适应能力。

3.2 实现

class RandomErasing(object):def __init__(self, region_w, region_h):self.region_w = region_wself.region_h = region_hdef __call__(self, img):if self.region_w < img.shape[1] and self.region_h < img.shape[0]:x1 = random.randint(0, img.shape[1] - self.region_w)y1 = random.randint(0, img.shape[0] - self.region_h)img[y1:y1+self.region_h, x1:x1+self.region_w, 0] = np.random.randint(0, 255, size=(self.region_h, self.region_w))img[y1:y1+self.region_h, x1:x1+self.region_w, 1] = np.random.randint(0, 255, size=(self.region_h, self.region_w))img[y1:y1+self.region_h, x1:x1+self.region_w, 2] = np.random.randint(0, 255, size=(self.region_h, self.region_w))return img
  • 初始化:
    • region_w: 擦除区域的宽度
    • region_h: 擦除区域的高度
  • call
    • 参数:
      • img: 大小为 (h, w, c) 的图像数组
    • 检查擦除区域的宽度和高度是否小于图像的宽度和高度
      • 随机选择擦除区域的左上角坐标 ( x 1 , y 1 ) (x_1, y_1) (x1,y1)
      • 生成随机像素值并将其应用于图像的擦除区域
    • 返回
      • 随机擦除后的图像

3.3 效果展示

img = Image.open('example.jpg').convert('RGB')
img = np.array(img)# 创建 Random Erasing 实例
random_erasing = RandomErasing(region_w=150, region_h=200)# 应用 Random Erasing 操作
img_erasing = random_erasing(img)img_result = Image.fromarray(img_erasing.astype('uint8')).convert('RGB')
img_result.save('./erasing_image.jpg')

在这里插入图片描述

4. Mixup(混合)

4.1 原理

  Mixup选择两张图像,按照一定的比例进行线性混合,得到一张新的图像。通过引入样本之间的混合,增加了训练集的多样性,有助于模型更好地适应不同的输入。

4.2 实现

class Mixup(object):def __init__(self, alpha):self.alpha = alphaself.lam = np.random.beta(self.alpha, self.alpha)def __call__(self, img1, img2):img = self.lam * img1 + (1 - self.lam) * img2return img
  • 初始化参数:
    • alpha: 混合参数
    • lam: 使用 Beta 分布生成一个随机值
  • call
    • 参数:
      • img1、img2: 大小为 (h, w, c) 的图像数组。
    • 使用混合比例将两个图像进行线性混合

4.3 效果展示

  将 Mixup 操作应用于下述两张图像
在这里插入图片描述
在这里插入图片描述

# 读取两张图像
img1 = Image.open('example2.jpg').convert('RGB')
img2 = Image.open('example3.jpg').convert('RGB')# 调整图像大小
img1 = img1.resize((1920, 1080), Image.Resampling.BICUBIC)
img2 = img2.resize((1920, 1080), Image.Resampling.BICUBIC)# 转换为 NumPy 数组
img1 = np.array(img1)
img2 = np.array(img2)# 创建 Mixup 实例
mixup = Mixup(0.6)# 应用 Mixup 操作
img_mixup = mixup(img1, img2)# 将 NumPy 数组转换回 PIL 图像
img_result = Image.fromarray(img_mixup.astype('uint8')).convert('RGB')# 保存图像
img_result.save('./mixup_image.jpg')

在这里插入图片描述

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

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

相关文章

健身房服务预约会员管理系统小程序效果怎样

健身房是很多人锻炼的主要场所之一&#xff0c;各地城区都有大量品牌&#xff0c;主要以同城客户为主&#xff0c;具备较强的客户管理和门店运营属性 &#xff0c;面对当今互联网环境&#xff0c;需要商家进一步管理赋能。 那么通过【雨科】平台搭建健身房管理系统能帮助商家实…

【raect.js + hooks】useRef 搭配 Houdini 创造 useRipple

水波纹点击特效 really cool&#xff0c;实现水波纹的方案也有很多&#xff0c;笔者经常使用 material 组件&#xff0c;非常喜欢 mui 中的 ripple&#xff0c;他家的 ripple 特效就是通过 css Houdini 实现的。 今天&#xff0c;我们将复刻一个 ripple&#xff0c;并封装成 ho…

淘宝商品详情数据接口(店铺搬家、数据分析、代购商城、ERP选品、无货源铺货、品牌监控)

使用淘宝API接口需要以下步骤&#xff1a; 注册开发者账号&#xff1a;在淘宝开放平台&#xff08;https://o0b.cn/anzexi&#xff09;上注册一个开发者账号&#xff0c;并创建一个应用。 获取API密钥&#xff1a;在应用页面上获取API密钥&#xff0c;这是后续调用API接口的凭…

Mendix组件推荐:灵活的在线表格

- 视频 mendix在线表格.mp4 20.95MB - 客户需求 如果你是一个中小型企业的负责人&#xff0c;你可能面临着&#xff1a; 多人协作录入数据展示数据库中的数据对数据安全有要求、希望本地离线部署并且IT人员配置有限等挑战 为了更好地管理你的业务数据&#xff0c;你需要一个…

如何防止网络被入侵?

随着互联网的普及&#xff0c;网络安全问题越来越受到人们的关注。其中&#xff0c;如何防止网络被入侵是一个重要的问题。本文将介绍一些防止网络被入侵的方法&#xff0c;帮助大家保护自己的网络安全。 一、使用强密码 强密码是防止网络被入侵的第一道防线。一个好的密码应该…

【brpc学习实践十二】bthread

概览 bthread(代码)是baidu-rpc使用的M:N线程库,是其稳定和高效的关键组件。能更好地利用多核cpu,能在pthread中运行,需要注意的是,bthread的work stealing机制会da让任务pthread发生切换,从而让thread_local变量不可信,通常在bthread_usleep或这join的时候就有可能发生…

Agent举例与应用

什么是Agent OpenAI 应用研究主管 Lilian Weng 在一篇长文中提出了 Agent LLM&#xff08;大型语言模型&#xff09;记忆规划技能工具使用这一概念&#xff0c;并详细解释了Agent的每个模块的功能。她对Agent未来的应用前景充满信心&#xff0c;但也表明到挑战无处不在。 现…

Linux RN6752 驱动编写

一、概述 关于 RN6752V1 这个芯片这里就不做介绍了&#xff0c;看到这篇笔记的小伙伴应该都明白&#xff0c;虽然说 RN6752V1 芯片是 AHD 信号的解码芯片&#xff0c;但是也可以把芯片当做是一个 YUV 信号的 MIPI 摄像头&#xff0c;所以驱动的编写和 MIPI 摄像头无太大的区别。…

虚拟机虚拟化原理

目录 什么是虚拟化广义虚拟化狭义虚拟化 虚拟化指令集敏感指令集虚拟化指令集的工作模式监视器对敏感指令的处理过程&#xff1a; 虚拟化类型全虚拟化类虚拟化硬件辅助虚拟化 虚拟化架构裸金属架构宿主机模式架构 什么是虚拟化 虚拟化就是通过模仿下层原有的功能模块创造接口来…

中国版的 GPTs:InsCode AI 生成应用

前言 在上一篇文章 《InsCode&#xff1a;这可能是下一代应用开发平台&#xff1f;》中&#xff0c;我们介绍了一个新的应用开发平台 InsCode&#xff0c;它是基于云原生开发环境 云 IDE AI 辅助编程的一站式在线开发平台。 最近&#xff0c;InsCode 又推出了另一种全新的开…

Python三十个常见的脚本汇总

1、冒泡排序 2、计算x的n次方的方法 3、计算a*a b*b c*c …… 4、计算阶乘 n! 5、列出当前目录下的所有文件和目录名 6、把一个list中所有的字符串变成小写&#xff1a; 7、输出某个路径下的所有文件和文件夹的路径 8、输出某个路径及其子目录下的所有文件路径 9、输出某个路…

深度学习毕设项目 医学大数据分析 - 心血管疾病分析

# 1 前言 &#x1f6a9; 基于大数据的心血管疾病分析 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 1 课题背景 本项目的任务是利用患者的检查结果预测心血管疾病(CVD)的存在与否。 2 数据…

【开源视频联动物联网平台】流媒体传输协议HLS,FLV的功能和特点

HLS&#xff08;HTTP Live Streaming&#xff09;和FLV&#xff08;Flash Video&#xff09;都是用于视频流传输的协议或容器格式&#xff0c;但它们在某些方面有着显著的区别和特点。 HLS是一种由苹果公司开发的用于流媒体传输的协议&#xff0c;而FLV则是Adobe公司开发的用于…

【ArcGIS Pro二次开发】:CC工具箱1.1.4更新_免费_50+工具

CC工具箱1.1.4更新【2023.11.30】 使用环境要求&#xff1a;ArcGIS Pro 3.0 一、下载链接 工具安装文件及使用文档&#xff1a; https://pan.baidu.com/s/1OJmO6IPtMfX_vob3bMtvEg?pwduh5rhttps://pan.baidu.com/s/1OJmO6IPtMfX_vob3bMtvEg?pwduh5r 二、使用方法 1、在下…

从物理机到K8S:应用系统部署方式的演进及其影响

公众号「架构成长指南」&#xff0c;专注于生产实践、云原生、分布式系统、大数据技术分享。 概述 随着科技的进步&#xff0c;软件系统的部署架构也在不断演进&#xff0c;从以前传统的物理机到虚拟机、Docker和Kubernetes&#xff0c;我们经历了一系列变化。 这些技术的引入…

VBA技术资料MF88:测试Excel文件名是否有效

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

系列二十五、Spring设计模式之适配器模式

一、适配器模式 1.1、概述 适配器模式&#xff08;Adapter Pattern&#xff09;用于兼容不相关的接口之间&#xff0c;类似于一个桥梁&#xff0c;它结合了两个独立接口的功能&#xff0c;这种类型的设计属于结构型模式&#xff0c;为了方便大家伙的理解&#xff0c;我举个例子…

什么是美颜sdk?集成第三方美颜sdk的步骤

本文将深入探讨如何集成第三方美颜sdk&#xff0c;为直播平台引入更先进、更具吸引力的美颜特效。 第一步&#xff1a;选择合适的第三方美颜sdk 在开始集成美颜sdk之前&#xff0c;首要任务是选择适合自己直播平台需求的第三方美颜sdk。不同的sdk可能具有不同的特色和性能&a…

如何修改.exe文件的修改时间,亲测有效

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 演示视频&#xff1a; 10秒钟实现将文件的修改…

Linux:可视化管理工具Webmin的安装

一、下载 地址&#xff1a;Webmin官网 我这里下载的是1.700-1版本 二、安装 1、在虚拟机上新建目录并安装软件 mkdir /opt/webmin rpm -ivh webmin-1.700-1.noarch.rpm2、修改webmin的root密码 /usr/libexec/webmin/changepass.pl /etc/webmin root 1234563、修改端口(可…