Geeks_Z の Blog Geeks_Z の Blog
首页
  • 学习笔记

    • 《HTML》
    • 《CSS》
    • 《JavaWeb》
    • 《Vue》
  • 后端文章

    • Linux
    • Maven
    • 汇编语言
    • 软件工程
    • 计算机网络概述
    • Conda
    • Pip
    • Shell
    • SSH
    • Mac快捷键
    • Zotero
  • 学习笔记

    • 《数据结构与算法》
    • 《算法设计与分析》
    • 《Spring》
    • 《SpringMVC》
    • 《SpringBoot》
    • 《SpringCloud》
    • 《Nginx》
  • 深度学习文章
  • 学习笔记

    • 《PyTorch》
    • 《ReinforementLearning》
    • 《MetaLearning》
  • 学习笔记

    • 《高等数学》
    • 《线性代数》
    • 《概率论与数理统计》
  • 增量学习
  • 哈希学习
GitHub (opens new window)

Geeks_Z

AI小学生
首页
  • 学习笔记

    • 《HTML》
    • 《CSS》
    • 《JavaWeb》
    • 《Vue》
  • 后端文章

    • Linux
    • Maven
    • 汇编语言
    • 软件工程
    • 计算机网络概述
    • Conda
    • Pip
    • Shell
    • SSH
    • Mac快捷键
    • Zotero
  • 学习笔记

    • 《数据结构与算法》
    • 《算法设计与分析》
    • 《Spring》
    • 《SpringMVC》
    • 《SpringBoot》
    • 《SpringCloud》
    • 《Nginx》
  • 深度学习文章
  • 学习笔记

    • 《PyTorch》
    • 《ReinforementLearning》
    • 《MetaLearning》
  • 学习笔记

    • 《高等数学》
    • 《线性代数》
    • 《概率论与数理统计》
  • 增量学习
  • 哈希学习
GitHub (opens new window)
  • Python

  • MLTutorials

  • 卷积神经网络

  • 循环神经网络

  • Transformer

  • VisionTransformer

  • 扩散模型

  • 计算机视觉

  • PTM

  • MoE

  • LoRAMoE

  • LongTailed

  • 多模态

  • 知识蒸馏

  • PEFT

  • 对比学习

  • 小样本学习

  • 迁移学习

  • 零样本学习

  • 集成学习

  • Mamba

  • PyTorch

    • PyTorch概述

    • Tensors

      • Tensors
      • 自动求导
      • AI硬件加速设备
      • tensor类型转换
      • tensor维度转换
      • 常见函数
      • tensor可视化为图片
        • matplotlib
        • transform
        • 文心一言
          • 1. 准备 Tensor
          • 2. 传输到 CPU(如果需要)
          • 3. 转换数据格式(如果需要)
          • 4. 转换数据类型(如果需要)
          • 5. 使用可视化库
          • 使用 matplotlib
          • 使用 PIL
        • GPT
          • 1. 安装必要的库
          • 2. 导入必要的库
          • 3. 定义将张量转换为图像的函数
          • 4. 示例张量
          • 5. 使用 OpenCV 显示图像
          • 6. 完整代码示例
    • 数据处理

    • 模型

    • 训练

    • 并行计算

    • 可视化

    • 实战

    • timm

    • Pytorch Lightning

    • 数据增强

    • 面经与bug解决

    • 常用代码片段

    • Reference
  • CL

  • CIL

  • 小样本类增量学习FSCIL

  • UCIL

  • 多模态增量学习MMCL

  • LTCIL

  • DIL

  • 论文阅读与写作

  • 分布外检测

  • GPU

  • 深度学习调参指南

  • AINotes
  • PyTorch
  • Tensors
Geeks_Z
2024-07-15
目录

tensor可视化为图片

matplotlib

同文心一言

import numpy as np
import matplotlib.pyplot as plt
  # 转换为[H, W, C]
tensor_numpy = inputs[0].cpu().permute(2, 1, 0).numpy() * 255
tensor_numpy = tensor_numpy.astype(np.uint8)  # 转换为无符号8位整型

plt.imshow(tensor_numpy)
plt.axis('off')  # 不显示坐标轴
plt.show()
1
2
3
4
5
6
7
8
9

transform

image_filepath = self.images[idx]
image = cv2.imread(image_filepath)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
label = self.labels[idx]
if self.trsf is not None:
    image = self.trsf(image=image)["image"]
    # 使用torchvision 把transform的数据转化成tensor
    from torchvision import transforms as t
    as_tensor = t.ToTensor()
    image = as_tensor(image)
return idx, image, label
1
2
3
4
5
6
7
8
9
10
11

文心一言

在 GPU 上处理 Tensor(尤其是在使用深度学习框架如 TensorFlow 或 PyTorch 时),将 Tensor 可视化为图片通常是在 CPU 上完成的,因为可视化过程涉及到图形处理,这通常是 CPU 更擅长的领域。不过,你可以从 GPU 上将 Tensor 传输到 CPU,然后使用相应的库(如 matplotlib、PIL 或 OpenCV)来将其转换为图片并显示或保存。

以下是一个使用 PyTorch 框架将 Tensor 可视化为图片的示例步骤:

1. 准备 Tensor

首先,你需要有一个 Tensor,它代表了图像数据。在 PyTorch 中,这个 Tensor 通常是[C, H, W]格式的(C 是通道数,H 是高度,W 是宽度),但也可能需要转换为[H, W, C]格式,这取决于你使用的可视化库的要求。

2. 传输到 CPU(如果需要)

如果 Tensor 在 GPU 上,你需要先将其传输到 CPU。

import torch

# 假设tensor_gpu是你的GPU上的Tensor
tensor_cpu = tensor_gpu.cpu()
1
2
3
4

3. 转换数据格式(如果需要)

如果你需要将 Tensor 的通道顺序从[C, H, W]更改为[H, W, C],可以使用permute方法。

tensor_cpu = tensor_cpu.permute(1, 2, 0)  # 转换为[H, W, C]
1

4. 转换数据类型(如果需要)

确保 Tensor 的数据类型适合用于可视化。通常,你可能需要将 Tensor 的数据类型从torch.float转换为numpy.array,并可能需要将值归一化到 0-255 的范围内(如果原始数据不是)。

import numpy as np

# 假设tensor_cpu的值在[0, 1]范围内
tensor_numpy = tensor_cpu.numpy() * 255  # 乘以255并转换为整数
tensor_numpy = tensor_numpy.astype(np.uint8)  # 转换为无符号8位整型
1
2
3
4
5

5. 使用可视化库

现在,你可以使用 matplotlib 或 PIL 等库来显示或保存图像。

使用 matplotlib

import matplotlib.pyplot as plt

plt.imshow(tensor_numpy)
plt.axis('off')  # 不显示坐标轴
plt.show()
1
2
3
4
5

使用 PIL

from PIL import Image

image = Image.fromarray(tensor_numpy)
image.show()  # 显示图片
# 或者保存到文件
# image.save('image.png')
1
2
3
4
5
6

请注意,上述代码示例假设你正在处理的是单个图像。如果你在处理一批图像,你可能需要遍历这个批次的每个图像,并对每个图像执行上述步骤。

此外,根据你的 Tensor 的具体内容和格式(如是否包含归一化或标准化等预处理步骤),在可视化之前可能需要进行额外的处理步骤。

TODO 未调通

GPT

要在 GPU 上进行张量的可视化并显示为图像,我们可以使用 PyTorch 的 CUDA 张量,将其转换为 CPU 张量,然后再进行可视化。以下是一个详细的步骤,说明如何从 GPU 上的张量转换为图像并使用 OpenCV 可视化它:

1. 安装必要的库

pip install torch torchvision opencv-python
1

2. 导入必要的库

import torch
import torchvision.transforms as transforms
import cv2
import numpy as np
from torchvision.utils import make_grid
1
2
3
4
5

3. 定义将张量转换为图像的函数

def tensor_to_image(tensor):
    # 将张量从GPU移动到CPU
    tensor = tensor.cpu().clone()  # 确保张量在CPU上
    tensor = tensor.squeeze(0)     # 去掉批次维度
    tensor = transforms.ToPILImage()(tensor)  # 转换为PIL图像
    return cv2.cvtColor(np.array(tensor), cv2.COLOR_RGB2BGR)  # 转换为OpenCV格式(BGR)
1
2
3
4
5
6

4. 示例张量

我们从 CIFAR-10 数据集中加载一个示例图片,并将其转换为张量。

from torchvision import datasets

transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),
])

dataset = datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
dataloader = torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=True)

# 获取一个示例图片
dataiter = iter(dataloader)
images, labels = dataiter.next()

# 将批次中的第一个张量移动到GPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
images = images.to(device)

# 将批次中的第一个张量转换为图片
image = images[0]
cv2_image = tensor_to_image(image)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

5. 使用 OpenCV 显示图像

cv2.imshow('Image', cv2_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
1
2
3

6. 完整代码示例

将上述所有步骤结合在一起,得到如下完整代码示例:

import torch
import torchvision.transforms as transforms
import cv2
import numpy as np
from torchvision import datasets
from torchvision.utils import make_grid

def tensor_to_image(tensor):
    # 将张量从GPU移动到CPU
    tensor = tensor.cpu().clone()  # 确保张量在CPU上
    tensor = tensor.squeeze(0)     # 去掉批次维度
    tensor = transforms.ToPILImage()(tensor)  # 转换为PIL图像
    return cv2.cvtColor(np.array(tensor), cv2.COLOR_RGB2BGR)  # 转换为OpenCV格式(BGR)

# 数据预处理
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),
])

# 加载数据集
dataset = datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
dataloader = torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=True)

# 获取一个示例图片
dataiter = iter(dataloader)
images, labels = dataiter.next()

# 将批次中的第一个张量移动到GPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
images = images.to(device)

# 将批次中的第一个张量转换为图片
image = images[0]
cv2_image = tensor_to_image(image)

# 使用OpenCV显示图像
cv2.imshow('Image', cv2_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

这段代码展示了如何从 GPU 上的张量转换为图像,并使用 OpenCV 进行可视化。通过这种方式,可以在利用 GPU 加速计算的同时方便地检查和调试图像数据。

上次更新: 2025/06/25, 11:25:50
常见函数
DataLoader 与 DataSet

← 常见函数 DataLoader 与 DataSet→

最近更新
01
帮助信息查看
06-08
02
常用命令
06-08
03
学习资源
06-07
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Geeks_Z | MIT License
京公网安备 11010802040735号 | 京ICP备2022029989号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式