PyTorch框架学习七——自定义transforms方法

  • 一、自定义transforms注意要素
  • 二、自定义transforms步骤
  • 三、自定义transforms实例:椒盐噪声

虽然前面的笔记介绍了很多PyTorch给出的transforms方法,也非常有用,但是也有可能在具体的问题中需要开发者自定义transforms方法,这次笔记就介绍如何自定义transforms方法。

ps:本次笔记中使用的原始图像出自上次笔记:https://blog.csdn.net/qq_40467656/article/details/107958492

一、自定义transforms注意要素

从数据读取机制DataLoader我们知道了transforms的内部工作原理,是在Compose类的__call__函数定义并实现的:

class Compose(object):"""Composes several transforms together.Args:transforms (list of ``Transform`` objects): list of transforms to compose.Example:>>> transforms.Compose([>>>     transforms.CenterCrop(10),>>>     transforms.ToTensor(),>>> ])"""def __init__(self, transforms):self.transforms = transformsdef __call__(self, img):for t in self.transforms:img = t(img)return img

由此出发,可以看出自定义transforms需要注意两个要素:

  1. 仅接收一个参数img,并返回一个参数img;
  2. transforms之间要注意上下游的输入与输出的格式匹配。

二、自定义transforms步骤

首先,自定义的transforms的输入参数可能不只img一个,如概率p等等,但是原来的代码只允许接收一个参数返回一个参数,所以可以在原来的基础上改进:

class YourTransforms(object):def __init__(self, ...):  # ...是要传入的多个参数# 对多参数进行传入# 如 self.p = p 传入概率# ...def __call__(self, img):  # __call__函数还是只有一个参数传入# 该自定义transforms方法的具体实现过程# ...return img

步骤如下:

  1. 自定义一个类YourTransforms,结构类似Compose类
  2. __init__函数作为多参数传入的地方
  3. __call__函数具体实现自定义的transforms方法

三、自定义transforms实例:椒盐噪声

椒盐噪声:又称为脉冲噪声,是一种随机出现的白点或黑点,白点被称为盐噪声,黑点被称为椒噪声,其与信噪比(SNR)息息相关。

此外,我们还想加入概率p这个参数,实现随机添加椒盐噪声。

仿照实现步骤,先写出其实现的大致框架:

class AddPepperNoise(object):def __init__(self, snr, p):  # snr, p 是要传入的多个参数self.snr = snrself.p = p def __call__(self, img):  # __call__函数还是只有一个参数传入'''添加椒盐噪声的具体实现过程'''return img

完整实现代码:

class AddPepperNoise(object):"""增加椒盐噪声Args:snr (float): Signal Noise Ratep (float): 概率值,依概率执行该操作"""def __init__(self, snr, p=0.9):assert isinstance(snr, float) and (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

添加椒盐噪声之后:

PyTorch框架学习七——自定义transforms方法相关推荐

  1. PyTorch框架学习六——图像预处理transforms(二)

    PyTorch框架学习六--图像预处理transforms(二) (续)二.transforms的具体方法 4.图像变换 (1)尺寸变换:transforms.Resize() (2)标准化:tran ...

  2. PyTorch框架学习五——图像预处理transforms(一)

    PyTorch框架学习五--图像预处理transforms(一) 一.transforms运行机制 二.transforms的具体方法 1.裁剪 (1)随机裁剪:transforms.RandomCr ...

  3. PyTorch框架学习八——PyTorch数据读取机制(简述)

    PyTorch框架学习八--PyTorch数据读取机制(简述) 一.数据 二.DataLoader与Dataset 1.torch.utils.data.DataLoader 2.torch.util ...

  4. PyTorch框架学习二十——模型微调(Finetune)

    PyTorch框架学习二十--模型微调(Finetune) 一.Transfer Learning:迁移学习 二.Model Finetune:模型的迁移学习 三.看个例子:用ResNet18预训练模 ...

  5. PyTorch框架学习十七——Batch Normalization

    PyTorch框架学习十七--Batch Normalization 一.BN的概念 二.Internal Covariate Shift(ICS) 三.BN的一个应用案例 四.PyTorch中BN的 ...

  6. PyTorch框架学习十六——正则化与Dropout

    PyTorch框架学习十六--正则化与Dropout 一.泛化误差 二.L2正则化与权值衰减 三.正则化之Dropout 补充: 这次笔记主要关注防止模型过拟合的两种方法:正则化与Dropout. 一 ...

  7. PyTorch框架学习十五——可视化工具TensorBoard

    PyTorch框架学习十五--可视化工具TensorBoard 一.TensorBoard简介 二.TensorBoard安装及测试 三.TensorBoard的使用 1.add_scalar() 2 ...

  8. PyTorch框架学习十四——学习率调整策略

    PyTorch框架学习十四--学习率调整策略 一._LRScheduler类 二.六种常见的学习率调整策略 1.StepLR 2.MultiStepLR 3.ExponentialLR 4.Cosin ...

  9. PyTorch框架学习十九——模型加载与保存

    PyTorch框架学习十九--模型加载与保存 一.序列化与反序列化 二.PyTorch中的序列化与反序列化 1.torch.save 2.torch.load 三.模型的保存 1.方法一:保存整个Mo ...

最新文章

  1. java培训学费_参加java培训大概的费用是多少钱?
  2. 附近的人 php,php 附近的人
  3. 常规流之块级格式化上下文(Block Formatting Contexts)
  4. 接收超时死信的死信交换机
  5. JAVA程序员面试必知32个知识点
  6. CentOS 7 yum 安装php5.6
  7. C++ Maps MultiMaps
  8. Tomcat在Linux上的安装
  9. 基于http 构建 yum 网络源
  10. 英伟达显卡不同架构_求历代英伟达显卡架构名称
  11. 生产排程系统_【PSI系统】在生产中进行更智慧的详细计划:计划排程工具APS是否值得企业投资?...
  12. 4-9 Python对象的自省机制
  13. seo入门需掌握的基础知识
  14. Houdini学习 —— 使用VOP进行陨石坑效果制作
  15. 'localtime': This function or variable may be unsafe. Consider using localtime_s instead.
  16. 模拟计算机打字,JS实现电脑虚拟键盘打字测试
  17. WinPcap编程常用函数和数据结构
  18. 耿庆国 的旱震理论(可能这个理论不是他先提出来的)
  19. BuddyPress创建组、查看成员信息等找不到页面
  20. 字符串匹配 RK 算法总结

热门文章

  1. 模型评价 - 机器学习与建模中怎么克服过拟合问题?
  2. treemap怎么保证有序_干货!208道面试题教你怎么通过面试!
  3. 全球仅3000人通过的TensorFlow开发人员认证到底有多香!
  4. 简化Swagger使用的自制Starter:spring-boot-starter-swagger,欢迎使用和吐槽
  5. 会议交流 | CNCC2021中国计算机大会 —— 知识图谱赋能数字化转型论坛
  6. 开放开源 | DeepKE:基于深度学习的开源中文关系抽取工具
  7. 论文浅尝 | 面向单关系事实问题的中文问答模型
  8. TypeError: cannot unpack non-iterable NoneType object
  9. 2 操作系统第一章 操作系统体系结构、中断和异常、系统调用
  10. ASP.NET MVC教程八:_ViewStart.cshtml