首页 > 其他分享 >PIL图像转torch的tensor

PIL图像转torch的tensor

时间:2024-04-11 14:45:18浏览次数:22  
标签:convert PIL tensor img torch numpy float32

1、图片转Tensor

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

pic_location = 'dataset/1.png'
img = Image.open(os.path.join(os.getcwd(), pic_location))

# 方法一
img_convert_to_numpy = np.array(img)  # (32, 32, 3)
img_convert_to_tensor1 = torch.tensor(img_convert_to_numpy.transpose(2, 0, 1) / 255)  # torch.Size([3, 32, 32])

# 方法二
transform = transforms.Compose([transforms.ToTensor()])
img_convert_to_tensor2 = transform(img_convert_to_numpy)  # torch.Size([3, 32, 32])

print(torch.equal(img_convert_to_tensor1, img_convert_to_tensor2))  # False
print(img_convert_to_tensor1.dtype)  # torch.float64
print(img_convert_to_tensor2.dtype)  # torch.float32
 

  首先,使用PIL库(Python Imaging Library)读取图片,得到的是PIL图像对象。通过numpy.array(img)或者numpy.asarray(img),转化为uint8的数值数组形式,格式为 H x W x C ,数值范围在0-255之间。(主要区别在于当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,但asarray不会)
  由于在Pytorch中,图像的格式为 C x H x W(想象一下,就是卷积核要卷积图片的形式),所以需要用transpose进行转置。这篇文章使用的图片和我前一篇博文通过cifar-10数据集理解numpy数组的高(H)、宽(W)、通道数(C)中选取的图片一样,通过实例图片和代码解析能更好地帮助你理解。

2、细节

  tensor除法会使输出结果的精度高一级,可能会导致后面计算类型不匹配,如float32 / float32 = float64。在上面的代码中,torch.equal(img_convert_to_tensor1, img_convert_to_tensor2)是等于False的。Tensor默认的dtype是float32,所以当Tensor的类型为float32时,打印Tensor是不会显示的。
  所以,我们要进行这样的处理:img_convert_to_tensor1 = torch.tensor(img_convert_to_numpy.transpose(2, 0, 1) / 255, dtype=torch.float32),结果就等于True了。

3、拓展:将Tensor转换为PIL

  有batch维度的Tensor一定要通过torch.squeeze(image,dim=0)降维,然后img = transforms.ToPILImage()(image)一步搞定。

 

标签:convert,PIL,tensor,img,torch,numpy,float32
From: https://www.cnblogs.com/chentiao/p/18129154

相关文章

  • (o゚v゚)ノ 清华镜像地址 (o゚v゚) ノ查看pytorch版本 (o゚v゚)ノ查看cuda版本的命令。。。
    清华镜像地址pipinstallxxx-ihttps://pypi.tuna.tsinghua.edu.cn/simple安装pytorch#CUDA11.8condainstallpytorch==2.1.2torchvision==0.16.2torchaudio==2.1.2pytorch-cuda=11.8-cpytorch-cnvidia安装DGL#Ifyouhaveinstalleddgl-cudaXX.Xpack......
  • 数据是一维数据,利用tensorflow深度学习框架,写一个带自注意力机制的卷积神经网络,并进行
    下面是一个使用TensorFlow框架的带有自注意力机制的卷积神经网络(Self-AttentionConvolutionalNeuralNetwork)的示例代码,包括数据处理、模型定义和训练过程:importtensorflowastffromtensorflow.keras.layersimportConv1D,Dense,GlobalMaxPooling1D,Concatenate#......
  • 2024.4.11 Pytorch上手2 //
    Pytorch上手2ToTensor()是一个转换操作,它将PIL图片或者NumPyndarray转换成FloatTensor,并且把每一个数值归一化到[0,1]区间(原先的数值区间为[0,255])。这一步是为了方便后续的数值处理和模型训练。Pillow库介绍:Pillow是Python中一个流行的图像处理库,它是著名的PIL(Pyt......
  • 安装 Tensorflow
    1.!pipinstalltensorflow遇到问题ValueError:numpy.ufuncsizechanged,mayindicatebinaryincompatibility.Expected216fromCheader,got192fromPyObject 2.!pipinstall--upgradenumpyLookinginindexes:http://mirrors.cloud.aliyuncs.com/pypi/simple......
  • 搭建Tensorflow gpu版遇到的一堆问题和解决方法
    目录基于NVIDIA显卡,选择最新驱动基于最新驱动,选择CUDA版本基于CUDA版本,选择Tensorflow版本和cuDNN版本基于Tensorflow版本,选择python版本基于NVIDIA显卡,选择最新驱动从NVIDIA官网下载本机显卡对应的驱动。基于最新驱动,选择CUDA版本参考官方表格,选择适用的CUDA。https://do......
  • WSL2-Ubuntu Pytorch深度学习开发环境搭建
    安装Linux发行版删除现有Linux发行版wsl-l-vwsl--unregisterUbuntu从MicrosoftStore安装Linux发行版设置用户名和密码安装CUDACUDA(ComputeUnifiedDeviceArchitecture)是由NVIDIA推出的并行计算平台和编程模型。CUDAToolkit是由NVIDIA提供的一套用于GPU开发......
  • 【TensorRT】TensorRT C# API 项目更新 (1):支持动态Bath输入模型推理(下篇)
    4.接口应用关于该项目的调用方式在上一篇文章中已经进行了详细介绍,具体使用可以参考《最新发布!TensorRTC#API:基于C#与TensorRT部署深度学习模型》,下面结合Yolov8-cls模型详细介绍一下更新的接口使用方法。4.1创建并配置C#项目 首先创建一个简单的C#项目,然后添加项......
  • 基于Anaconda安装Pytorch
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、安装Anaconda二、安装过程中遇见的问题1.文章3.4.2安装失败总结前言Anaconda安装Pytorch具体流程与心得。一、安装Anaconda示例:pandas是基于NumPy的一种工具,该工具是为了解决数......
  • 结合 tensorflow.js 、opencv.js 与 Ant Design 创建美观且高性能的人脸动捕组件并发
    系列文章目录如何在前端项目中使用opencv.js|opencv.js入门如何使用tensorflow.js实现面部特征点检测tensorflow.js如何从public路径加载人脸特征点检测模型tensorflow.js如何使用opencv.js通过面部特征点估算脸部姿态并绘制示意图tensorflow.js使用opencv.js将人......
  • 使用YOLO V8-pose 报错:AttributeError: module ‘torch‘ has no attribute ‘_six‘
    上述为按照yolov8pose官方教程写的代码。使用了python3.7,以及对应的torch版本如下后,报错。AttributeError:module‘torch‘hasnoattribute‘_six‘ 解决方法:更换了虚拟环境,重新安装yltralytics.新环境: 现在可以正常运行:......