DAY06:【pytorch】图像增强

1、基本概念

数据增强,又称数据增广、数据扩增,是对训练集进行变换,使训练集更丰富,从而让模型更具泛化能力

2、裁剪 — — Crop

2.1 transforms.CenterCrop

功能:从图像中心裁剪图片

  • size:所需裁剪图片尺寸

2.2 transforms.RandomCrop

# transforms.RandomCrop(
#     size,
#     padding=None,
#     pad_if_needed=False,
#     fill=0,
#     padding_mode='constant',
# )

功能:从图片中随机裁剪出尺寸为 size 的图片

  • size:所需裁剪图片尺寸

  • padding:设置填充大小

    • 为 a 时,上下左右均填充 a 个像素
    • 为 (a, b) 时,上下填充 b 个像素,左右填充 a 个像素
    • 为 (a, b, c, d) 时,左、上、右、下分别填充 a,b,c,d 个像素
  • pad_if_need:若图像小于设定的 size,则填充

  • padding_mode:填充模式,有4种模式

    1. constant:像素值由 fill 设定
    2. edge:像素值由图像边缘像素决定
    3. reflect:镜像填充,最后一个像素不镜像
    4. symmetric:镜像填充,最后一个像素要镜像
  • fill:为 constant时,设置填充的像素值

2.3 RandomResizedCrop

# transforms.RandomResizedCrop(
#     size,
#     scale=(0.08, 1.0),
#     ratio=(3/4, 3/4),
#     interpolation
# )

功能:随机大小、长宽比裁剪图片

  • size:所需裁剪图片尺寸

  • scale:随机裁剪面积比例,默认为(0.08, 1.0)

  • ratio:随机长宽比,默认为(3/4, 4/3)

  • interpolation:插值方式,默认为PIL.Image.BILINEAR

    • PIL.Image.NEAREST:最近邻近插值
    • PIL.Image,BILINEAR:双线性插值
    • PIL.Image.BICUBIC:三次样条插值
    • PIL.Image.LANCZOS:兰索斯插值
    • PIL.Image.HAMMING:汉明码插值
    • PIL.Image.BOX:盒插值

2.4 FiveCrop

# transforms.FiveCrop(
#     size
# )

2.5 TenCrop

# transforms.TenCrop(
#     size,
#     vertical_flip=False,
# )

功能:在图像的上下左右以及中心裁剪出尺寸为 size 的图片,TenCrop 对5张图片进行水平或垂直镜像获得10张图片

  • size:所需裁剪图片的尺寸
  • vertical_flip:是否进行垂直镜像

3、翻转 — — Flip

3.1 RandomHorizontalFlip

# transforms.RandomHorizontalFlip(
#     p=0.5
# )

3.2 RandomVerticalFlip

# transforms.RandomVerticalFlip(
#     p=0.5
# )

功能:依概率水平(左右)或垂直(上下)翻转图片

  • p:翻转概率,默认为0.5

3.3 RandomRotation

# transforms.RandomRotation(
#     degrees,
#     resample=False,
#     expand=False,
#     center=None
# )

功能:随机翻转图片

  • degree:旋转角度

    • 为 a 时,在 (-a, a) 之间选择旋转角度
    • 为 (a, b) 时,在 (a, b) 之间选择旋转角度
  • resample:重采样方法

  • expand:是否扩大图片,以保持原图信息

  • center:旋转点设置,默认为图像中心

4、图像变换

4.1 Pad

# transforms.Pad(
#     padding,
#     fill=0,
#     padding_mode='constant'
# )

功能:对图片边缘进行填充

  • padding:设置填充大小

    • 为 a 时,上下左右均填充 a 个像素
    • 为 (a, b) 时,上下填充 a 个像素,左右填充 b 个像素
    • 为 (a, b, c, d) 时,分别填充上、下、左、右的 a,b,c,d 个像素
  • padding_mode:填充模式

    • constant:常数填充
    • edge:边缘填充,即边缘像素会被重复
    • reflect:镜像填充,即边缘像素会被镜像到对称位置
    • symmetric:对称填充,即边缘像素会被镜像到对称位置,最后一个镜像也会镜像
  • fill:为 constant 时,设置填充像素值,(R, G, B) 或 (Gray)

4.2 ColorJitter

# transforms.ColorJitter(
#     brightness=0,
#     contrast=0,
#     saturation=0,
#     hue=0
# )

功能:调整亮度、对比度、饱和度和色相

  • brightness:亮度调整因子

    • 为 a 时,从 [max(0, 1-a), 1+a] 中随机选择
    • 为 (a, b) 时,从 [a, b] 中随机选择
  • constrast:对比度参数,同 brightness

  • saturation:饱和度参数,同 brightness

  • hue:色相参数

    • 为 a 时,从 [-a, a] 中随机选择,且 a 的取值范围为 [0, 0.5]
    • 为 (a, b) 时,从 [a, b] 中随机选择,且 a、b 的取值范围为 [0, 0.5]

4.3 GrayScale

# transforms.Grayscale(
#     num_output_channels=1
# )

4.4 RandomGradeCrop

# transforms.RandomGrayscale(
#     num_output_channels=1,
#     p=0.1
# )

功能:依概率将图片转换为灰度图

  • num_outpuut_channels:输出通道数,1表示灰度图,3表示 RGB 彩色图
  • p:概率,0.5表示将图片转换为灰度图的概率为 50%

4.5 RandomAffine

# transforms.RandomAffine(
#     degrees,
#     translate=None,
#     scale=None,
#     shear=None,
#     resample=False,
#     fillcolor=0
# )

功能:对图像进行仿射变换,仿射变换是二维的线性变换,由五种基本原子变换构成,分别是旋转、平移、缩放、错切、剪切

  • degrees:旋转角度设置

  • translate:平移区间设置

    • 为 (a, b) 时,表示 x 轴和 y 轴的平移范围均为 [-a, b]
    • 为 (a, b, c, d) 时,表示 x 轴平移范围为 [-a, b],y 轴平移范围为 [-c, d]
  • scale:缩放比例(以面积为单位)

  • fillcolor:填充色设置

4.6 RandomErasing

# transforms.RandomErasing(
#     p=0.5,
#     scale=(0.02, 0.33),
#     ratio=(0.3, 3.3),
#     value=0,
#     inplace=False
# )

功能:对图像进行随机遮挡

  • p:概率值,执行该操作的概率
  • scale:遮挡区域的面积
  • ratio:遮挡区域长宽比
  • value:设置遮挡区域的像素值,(R, G, B) 或 (Gray),默认为0

4.7 Lamdba

# transforms.Lambda(
#     lambda
# )

功能:用户自定义 lamdba 方法

  • lambda:匿名函数,可以把函数作为参数传递给另一个函数

5、方法选择

5.1 transforms.RandomChoice

# transforms.RandomChoice(
#     [transforms1, transforms2, transforms3]
# )

功能:从一系列 transforms 方法中随机挑选一个

5.2 transforms.RandomApply

# transforms.RandomApply(
#     [transforms1, transforms2, transforms3],
#     p=0.5
# )

功能:依概率执行一组 transforms 操作

5.3 transforms.RandomOrder

# transforms.RandomOrder(
#     [transforms1, transforms2, transforms3]
# )

功能:对一组 transforms 操作打乱顺序

6、自定义

# class Compose(object):
#     def __call__(self, img):
#         for t in self.transforms:
#             img = t(img)
#         return img

二要素:

  1. 仅接受一个参数,返回一个参数
  2. 注意上下游的输出和输入
# 通过继承类,实现多参数传入
# class YourTransform(object):
#     def __init__(self, ...):
#         ...#     def __call__(self, img):
#         ...
#         return img

示例 — — 椒盐噪声:

  1. 概念:椒盐噪声,又称脉冲噪声,是一种随机出现的白点或者黑点,白点称为盐噪声,黑点称为椒噪声。
  2. 产生原因:椒盐噪声的产生是由于光照不均匀导致的。光线经过物体时,某些部分会被吸收,而另一些部分会被反射,产生了椒噪声和盐噪声。椒噪声的大小与光照强度成正比,盐噪声的大小与物体表面粗糙度成正比。椒盐噪声的产生是随机的,并不是均匀分布的。
  3. 解决方法:椒盐噪声的解决方法有两种:一是采用白盒处理,即对图像进行预处理,去除椒盐噪声;二是采用白盒处理,采用数据增强的方法,对图像进行数据增强,增加椒盐噪声。
  4. 信噪比:信噪比(SNR)是指信号与噪声的比值,即信噪比越高,则噪声的影响越小,信号的影响越大。信噪比越高,图像的质量越好。
class AddPepperNoise(object):"""增加椒盐噪声Args:snr (float): Signal Noise Ratep (float): 概率值,依概率执行该操作"""def __init__(self, snr, p=0.9):assert isinstance(snr, float) or (isinstance(p, float))self.snr = snrself.p = pdef __call__(self, img):"""Args:img (PIL Image): PIL ImageReturns:PIL Image: PIL image."""if random.uniform(0, 1) < self.p:img_ = np.array(img).copy()h, w, c = img_.shapesignal_pct = self.snrnoise_pct = (1 - self.snr)mask = np.random.choice((0, 1, 2), size=(h, w, 1), p=[signal_pct, noise_pct/2., noise_pct/2.])mask = np.repeat(mask, c, axis=2)img_[mask == 1] = 255   # 盐噪声img_[mask == 2] = 0     # 椒噪声return Image.fromarray(img_.astype('uint8')).convert('RGB')else:return img

微语录:自己有了光芒才配得上自己追逐的星星。

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

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

相关文章

mysql 禁止 读 某个 表

mysql 禁止 读 某个 表 mysql禁用某张表,禁用MySQL表的操作 https://shuyeidc.com/wp/89479.html MySQL严格禁止读取表如何避免数据泄露 https://www.kdun.cn/ask/394700.html select host,user from mysql.user; FLUSH PRIVILEGES; 1. MySQL严格禁止读取表如何避免数据泄露…

机器学习 从入门到精通 day_03

1. KNN算法-分类 1.1 样本距离判断 明可夫斯基距离&#xff1a;欧式距离&#xff0c;明可夫斯基距离的特殊情况&#xff1b;曼哈顿距离&#xff0c;明可夫斯基距离的特殊情况。 两个样本的距离公式可以通过如下公式进行计算&#xff0c;又称为欧式距离。 &#xff08;…

LeetCode 热题 100_零钱兑换(85_322_中等_C++)(动态规划)

LeetCode 热题 100_零钱兑换&#xff08;85_322&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;动态规划&#xff09;&#xff1a; 代码实现代码实现&#xff08;思路一&#xff08;动态规划&#xff09;&a…

游戏盾IP可以被破解吗

游戏盾IP&#xff08;如上海云盾SDK、腾讯云游戏盾&#xff09;是专为游戏行业设计的高防服务&#xff0c;旨在抵御DDoS攻击、CC攻击等威胁。其安全性取决于​​技术架构、防护能力​​以及​​运维策略​​。虽然理论上没有绝对“无法破解”的系统&#xff0c;但游戏盾IP在合理…

SpringBoot实战1

SpringBoot实战1 一、开发环境&#xff0c;环境搭建-----创建项目 通过传统的Maven工程进行创建SpringBoot项目 &#xff08;1&#xff09;导入SpringBoot项目开发所需要的依赖 一个父依赖&#xff1a;&#xff08;工件ID为&#xff1a;spring-boot-starter-parent&#xf…

【软考-高级】【信息系统项目管理师】【论文基础】进度管理过程输入输出及工具技术的使用方法

定义 项目进度管理是为了保证项目按时完成&#xff0c;对项目中所需的各个过程进行管理的过程&#xff0c;包括规划进度、定义活动、活动优先级排序、活动持续时间、制定进度计划和控制进度。 管理基础 制定进度计划的一般步骤 选择进度计划方法&#xff08;如关键路径法&a…

【Linux】之【Get】 chroot 环境下安装deb包时 .postinst:行 9: 201 段错误 (核心已转储)ldconfig

背景 如题&#xff0c;在postinst文件中直接执行了ldconfig命令&#xff0c; chroot 环境下出错&#xff0c;安装失败 分析 chroot 环境下不能用 ldconfig 和 systemctl 但是&#xff1a;如果环境是 chroot&#xff0c;系统有可能没完整挂载 /proc、/dev、系统路径&#xff…

【论文精读与实现】EDC²-RAG:基于动态聚类的文档压缩方法提升检索增强生成RAG性能

🧠 向所有学习者致敬! “学习不是装满一桶水,而是点燃一把火。” —— 叶芝 我的博客主页: https://lizheng.blog.csdn.net 🌐 欢迎点击加入AI人工智能社区! 🚀 让我们一起努力,共创AI未来! 🚀 1. 论文核心思想 这篇由清华大学团队提出的EDC-RAG框架,针对当前…

OSPF接口的网络类型和不规则区域

网络类型(数据链路层所使用的协议所构建的二层网络类型) 1、MA --- 多点接入网络 BMA --- 支持广播的多点接入网络 NBMA --- 不支持广播的多点接入网络 2、P2P --- 点到点网络 以太网 --- 以太网最主要的特点是需要基于MAC地址进行物理寻址&#xff0c;主要是因为以太网接口所连…

HTTP代理:内容分发战场上的「隐形指挥官」

目录 一、技术本质&#xff1a;流量博弈中的「规则改写者」 二、战略价值&#xff1a;内容分发的「四维升级」 三、实战案例&#xff1a;代理技术的「降维打击」 四、未来进化&#xff1a;代理技术的「认知升级」 五、结语&#xff1a;代理技术的「战略觉醒」 在数字内容爆…

(2)网络学习之堡垒机

堡垒机和防火墙的区别&#xff1a; 1.功能定位 防火墙主要负责抵御外部攻击&#xff0c;就像一道坚固的城墙&#xff0c;防止黑客进入内部网络。堡垒机则专注于内部管理&#xff0c;监控和记录运维人员的操作行为&#xff0c;确保内部网络的安全。 2.部署位置与作用范围 防…

minio命令行客户端mc常见用法

安装minio命令行客户端mc https://min-io.cn/docs/minio/linux/reference/minio-mc-admin.html # Windows安装minio命令行客户端 choco install minio-client -y# Linux安装mc客户端 wget -c -P /usr/local/bin/ https://dl.min.io/client/mc/release/linux-amd64/mc # 赋予可…

idea调整控制台日志显示长度

概述 在调试时&#xff0c;idea控制台显示的日志有长度显示&#xff0c;当显示的日志太长时&#xff0c;后生成的日志会覆盖掉之前生成的日志内容。想要调整长度就可以按以下方式进行设置。 设置方法 Settings -> Editor -> General -> Console -> Override con…

oracle em修复之路

很早以前写的文章&#xff0c;再草稿中存放太久了&#xff0c;今天开始整理20年来工作体会&#xff0c;以后陆续发出&#xff0c;希望给大家提供小小的帮助。 去年做的项目使用的oracle数据库&#xff0c;最近要看一下&#xff0c;启动机器进入系统&#xff0c;出现无法加载数…

QT中怎么隐藏或显示最大化、最小化、关闭按钮

文章目录 方法一&#xff1a;通过代码动态设置1、隐藏最大化按钮2、隐藏最小化按钮3、隐藏关闭按钮方法 1&#xff1a;移除 WindowCloseButtonHint方法 2&#xff1a;使用 Qt::CustomizeWindowHint 并手动控制按钮 4、同时隐藏最大化和最小化按钮5、同时隐藏最大化和关闭按钮6、…

性能比拼: Redis vs Memcached

本内容是对知名性能评测博主 Anton Putra Redis vs Memcached Performance Benchmark 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 在本视频中&#xff0c;我们将对比 Redis 和 Memcached。我会介绍一些功能上的不同&#xff0c;但主要关注 性能。 首先&#xf…

P1331 洛谷 海战

题目描述 思路 这个题需要读懂题意&#xff0c;即“什么样的形式表示两只船相撞&#xff1f;” ----> 上下相邻或左右相邻 如果图是不和法的&#xff0c;一定存在如下结构&#xff1a; # # . # 或 # # # . 或 # . # # 或 . # # #即四个格子里有三个#&#xff0c;一个"…

传统项目纯前端实现导出excel之xlsx.bundle.js

传统项目纯前端实现导出excel之xlsx.js 自从vue问世后&#xff0c;使得前端开发更加简洁从容&#xff0c;极大的丰富组件样式和页面渲染效果&#xff0c;使得前端功能的可扩展性得到极大地加强。虽然vue的使用对于前后端分离的项目对于功能实现与扩展有了质的飞跃&#xff0c;但…

2025.04.10-拼多多春招笔试第四题

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 04. 优惠券最优分配问题 问题描述 LYA是一家电商平台的运营经理,负责促销活动的策划。现在平台上有 n n n

基于 Spring Boot 瑞吉外卖系统开发(三)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;三&#xff09; 分类列表 静态页面 实现功能所需要的接口 定义Mapper接口 Mapper public interface CategoryMapper extends BaseMapper<Category> {}定义Service接口 public interface CategoryService extends ISe…