Pytorch个人学习记录总结 03

news2024/11/24 16:10:38

目录

Transeforms的使用

常见的transforms


Transeforms的使用

torchvision中的transeforms,主要是对图像进行变换(预处理)。from torchvision import transforms

transeforms中常用的就是以下几种方法:(Alt+7可唤出左侧的Structure结构)
“Compose”, “ToTensor”, “PILToTensor”, “ConvertImageDtype”, “ToPILImage”, “Normalize”, “Resize”, “Scale”,“CenterCrop”

 

Compose: Composes several transforms together. Args:list of transforms to compose.将几个变换组合在一起。参数:[Transform对象列表],例如transforms.Compose([transforms.CenterCrop(10),transforms.ToTensor(),…])


ToTensor: Convert a PIL Image or numpy.ndarray to tensor.


ToPILImage: Convert a tensor or an ndarray to PIL Image.


Normalize(torch.nn.Module): Normalize a tensor image with mean and standard deviation.This transform does not support PIL Image.用平均值和标准偏差归一化张量图像。此转换不支持PIL图像。(为n个维度给定mean:(mean[1],…,mean[n])和std:(std[1],…,std[n]),此转换将对每个channel进行归一化)


Resize(torch.nn.Module): Resize the input image (PIL Image or Tensor) to the given size.Return PIL Image or Tensor: Rescaled image.将输入的图像(PIL Image or Tensor)的大小缩放到指定的size尺寸。size (sequence or int),当是sequence时则调整到指定的(h, w);当是int时,就将原图的min(h,w)调整到size大小,然后另一条边进行等比例缩放。


RandomCrop(torch.nn.Module): Crop the given image (PIL Image or Tensor) at a random location.在随机位置裁剪给定的size大小的图像(size的输入要求跟Resize一样)。

用ToTensor()将PIL Image转为tensor

也可以用 ToTensor() 将 numpy.ndarray 转为tensor(用opencv读入的数据类型是numpy.ndarray)

import numpy as np
from torchvision import transforms
from PIL import Image

image_path = 'hymenoptera_data/train/ants/0013035.jpg'
image = Image.open(image_path)

# 1.transforms该如何使用(python)
tensor_trans = transforms.ToTensor()	# ToTensor()中不带参数
tensor_img = tensor_trans(image)		# 不能直接写成transforms.ToTensor(image)

print(np.array(image).shape)	# (512, 768, 3)
print(tensor_img.shape)			# torch.Size([3, 512, 768]),通道数变到第0维了

ToTensor与Tensorboard配合使用

import numpy as np
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from PIL import Image

image_path = 'hymenoptera_data/train/ants/0013035.jpg'
image = Image.open(image_path)

# 1.transforms该如何使用(python)
tensor_trans = transforms.ToTensor()
tensor_img = tensor_trans(image)

print(np.array(image).shape)
print(tensor_img.shape)

# 写入tensorboard
writer = SummaryWriter('logs')
writer.add_image('tag', tensor_img, 1)
writer.close()

常见的transforms

图像的数据类型在不同场景往往不同,很容易出错,需要转换为特定格式才能使用!

  • __call__()方法的作用:把一个类的实例化对象变成了可调用对象。调用该实例对象就是执行__call__()方法中的代码。
  • 可以通过内置函数callable来判断是否是可调用对象。例如判断p是否为可调用对象:print(callable(p))返回 True 或 False。
    class Person:
        def __call__(self, name):
            print('__call__' + ' Hello ' + name)
    
        def hello(self, name):
            print('hello ' + name)
    
    
    person = Person()               # 实例化一个对象person
    person('zhangsan')              # 像调用函数一样调用person对象
    person.__call__('zhangshan_2')  # 也可像调用类函数调用
    person.hello('wangwu')          # 调用类函数person
    
    # __call__ Hello zhangsan
    # __call__ Hello zhangshan_2
    # hello wangwu
    
    from torch.utils.tensorboard import SummaryWriter
    from torchvision import transforms
    from PIL import Image
    
    image_path = 'hymenoptera_data/train/ants/0013035.jpg'
    image = Image.open(image_path)
    
    writer = SummaryWriter('logs')
    
    # 1.Totensor
    trans_totensor = transforms.ToTensor()
    img_tensor = trans_totensor(image)
    writer.add_image('ToTensor', img_tensor)  # 这里只传入了tag和image_tensor,没有写入第3个参数global_step,则会默认是第0步
    
    # 2.Normalize 可以改变色调
    trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
    img_norm = trans_norm(img_tensor)
    writer.add_image('Normalize', img_norm)
    
    trans_norm = transforms.Normalize([1, 3, 5], [3, 2, 1])
    img_norm_2 = trans_norm(img_tensor)
    writer.add_image('Normalize', img_norm_2, 1)
    
    trans_norm = transforms.Normalize([2, 0.5, 3], [5, 2.6, 1.5])
    img_norm_3 = trans_norm(img_tensor)
    writer.add_image('Normalize', img_norm_3, 2)
    
    # 3.Resize 将PIL或者tensor缩放为指定大小然后输出PIL或者tensor
    w, h = image.size   # PIL.Image的size先表示的宽再表示的高
    
    trans_resize = transforms.Resize(min(w, h) // 2)    # 缩放为原来的1/2
    img_resize = trans_resize(image)  # 对PIL进行缩放
    writer.add_image('Resize', trans_totensor(img_resize))  # 因为在tensorboard中显示,所以需要转换为tensor或numpy类型
    
    trans_resize = transforms.Resize(min(w, h) // 4)    # 缩放为原来的1/4
    img_resize_tensor = trans_resize(img_tensor)
    writer.add_image('Resize', img_resize_tensor, 1)
    
    # 4.compose 组合这些操作
    trans_compose = transforms.Compose(
        [transforms.Resize(min(w, h) // 2), transforms.ToTensor(), transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])])
    img_campose = trans_compose(image)  # image是PIL.Image格式
    writer.add_image('Compose', img_campose)
    
    # 5.Randomcrop 随机裁剪
    trans_randomcrop = transforms.RandomCrop(min(w, h) // 4)    # 从原图中任意位置裁剪1/4
    # img_ranomcrop = trans_randomcrop(img_tensor)
    for i in range(10):
        img_ranomcrop = trans_randomcrop(img_tensor)
        writer.add_image('RandomCrop', img_ranomcrop, i)
    
    # close()一定要记得写啊!
    writer.close()
    

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

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

相关文章

FileNotFoundException:xxx(系统找不到指定的路径)

目录 前言 背景 解决方法 错误示例 前言 这次是有个两年前的项目吧,不知道为什么无法启动了。中间迭代了多个版本,现在另一个同事接手了,领导让看一下。因为时间间隔过长,问题处理比较费劲。其中有的是配置问题,比…

【Linux学习】超详细——进程(2)

三、进程状态 3.1 准备知识 进程阻塞:进程因为等待某种条件就绪,而导致的一种不推进的状态(例如进程卡顿),因而阻塞一定是在等待某种资源。为什么阻塞?进程需要通过等待的方式,等具体的资源被别…

SpringCloudAlibaba微服务实战系列(二)Nacos配置中心

SpringCloudAlibaba Nacos配置中心 在java代码中或者在配置文件中写配置,是最不雅的,意味着每次修改配置都需要重新打包或者替换class文件。若放在远程的配置文件中,每次修改了配置后只需要重启一次服务即可。话不多说,直接干货拉…

java实现ffmpeg音频文件分割

项目中需要将视频会议中录入的音频文件通过阿里云语音识别为文件,但是阿里云语音识别对音频大小有限制,因此通过ffmpeg将大音频文件分割为几个短音频文件,并进行语音识别操作。 代码如下: package com.vion.utils; import java.i…

openGauss学习笔记-18 openGauss 简单数据管理-WHERE子句

文章目录 openGauss学习笔记-18 openGauss 简单数据管理-WHERE子句18.1 语法格式18.2 参数说明18.3 示例 openGauss学习笔记-18 openGauss 简单数据管理-WHERE子句 当我们需要根据指定条件从表中查询数据时,就可以在SELECT语句中添加WHERE子句,从而过滤…

Install Ansible on CentOS 8

环境准备: 1.至少俩台linux主机,一台是控制节点,一台是受控节点 2.控制节点和受控节点都需要安装Python36 3.控制节点需要安装ansible 4.控制节点需要获得受控节点的普通用户或root用户的权限,控制节点需要ssh客户端,…

24考研数据结构-——绪论

数据结构 引用文章第一章:绪论1.0 数据结构在学什么1.1 数据结构的基本概念1.2 数据结构的三要素1.3 算法的基本概念 引用文章 在此基础上增加自己的学习过程: 《王道》数据结构笔记整理2022 1.2数据结构三要素——逻辑结构和物理结构与数据运算之间的关系 1.3抽象…

JMeter+提取token变成全局变量

注:没打码,就代码乱写的接口,具体请按照你要跑的接口来输入值 一、创建线程组 二、配置HTTP请求默认值 IP地址一模一样,可以配置一个默认值,就不用每次都输入IP地址了 三、配置登陆ip 配置登陆地址,通过…

iOS 测试 iOS 端 Monkey 测试

说起 Monkey 测试,大家想到的是 monkey 测试只有安卓有,monkey 测试只针对安卓 app,今天给大家分享一下 Monkey 测试在 iOS 端也能跑!iOS 端 app 也能使用 Monkey 测试来执行稳定性测试。 一、环境准备 1、准备 Mac 设备&#x…

物业小区管理系统登录页面以及逻辑实现

学习vue3和springboot那肯定是少不了写项目的,在各个项目中肯定是离不开登录和注册的事情的,这也是一个项目起步的需求。 接下来我们来看看我们所写的项目起步。首先搭建vue3和springboot的项目环境,这些搭建大家自行完成即可,架子…

windows 修改 RDP 远程桌面端口号

打开 PowerShell , 执行regedit 依次展开 PortNumber HKEY_LOCAL_MACHINE \SYSTEM \CurrentControlSet \Control \Terminal Server \WinStations \RDP-Tcp 右边找到 PortNumber ,对应修改自己的端口号 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Co…

深度学习:tf.keras实现模型搭建、模型训练和预测

在sklearn中,模型都是现成的。tf.Keras是一个神经网络库,我们需要根据数据和标签值构建神经网络。神经网络可以发现特征与标签之间的复杂关系。神经网络是一个高度结构化的图,其中包含一个或多个隐藏层。每个隐藏层都包含一个或多个神经元。神经网络有多…

echarts3d饼图实现

一、vue中使用3d饼图 效果图: 二、使用步骤 1.引入库 安装echarts 在package.json文件中添加 "dependencies": {"echarts": "^5.1.2""echarts-gl": "^1.1.0",// "echarts-gl": "^2.0.8&quo…

基于AutoEncoder自编码器的MNIST手写数字数据库识别matlab仿真

目录 1.算法理论概述 2.部分核心程序 3.算法运行软件版本 4.算法运行效果图预览 5.算法完整程序工程 1.算法理论概述 MNIST手写数字数据库是机器学习中常用的数据集,包含了0到9这10个数字的手写图片。本文介绍一种基于AutoEncoder自编码器的MNIST手写数字识别算…

高校大数据教材推荐-Hadoop大数据开发基础(第2版)(微课版)

Hadoop大数据开发基础(第2版)(微课版)是“十四五”职业教育国家规划教材,是大数据应用开发“1X”职业技能等级证书配套系列教材,也是“以纸质教材为核心、以互联网为载体”的新形态教材,配套39个微课视频(二维码随扫随学&#xff…

DASCTF 2023 0X401七月暑期挑战赛 Reverse部分题解

文章目录 controlflow1. 异或0x4012. 加i*i3. 异或i*(i1)4. 减i5. 乘36. swap7. judge解题脚本 webserver1.关键函数2. 求约束条件3.Z3求解 controlflow 动态调试观察执行情况 1. 异或0x401 2. 加i*i 3. 异或i*(i1) 注意这里是从data[10i]开始 4. 减i 5. 乘3 6. swap 注意…

redis的简单入门

文章目录 一、前言1.1、什么是Redis? 二、简介三、Redis下载与安装四、Redis服务启动与停止五、Redis设置密码进行远程连接5.1、设置密码5.2、远程连接 六、Redis数据类型七、Redis常用命令7.1、字符串String命令7.2、哈希hash操作命令7.3、列表list操作命令7.4、集合set操作命…

机器人SLAM导航学习-All in one

参考引用 张虎,机器人SLAM导航核心技术与实战[M]. 机械工业出版社,2022.本博客未详尽之处可自行查阅上述书籍 一、编程基础篇 1. ROS 入门必备知识 ROS学习笔记(文章链接汇总) 2. C 编程范式 《21天学通C》读书笔记&#xff0…

leetcode743. 网络延迟时间 DJ

https://leetcode.cn/problems/network-delay-time/ 有 n 个网络节点,标记为 1 到 n。 给你一个列表 times,表示信号经过 有向 边的传递时间。 times[i] (ui, vi, wi),其中 ui 是源节点,vi 是目标节点, wi 是一个信…

python_day13

reduceByKey算子,聚合 列表中存放二元元组,元组中第一个为key,此算子按key聚合,传入计算逻辑 from pyspark import SparkConf, SparkContext import osos.environ["PYSPARK_PYTHON"] "D:/dev/python/python3.10…