目录
1. 使用Tensorform的ToTensor()类,将 PIL 类型的图像转换成 tensor 类型。
2. opencv 读取图片
3. 用 tensorboard 可视化数据
4. 总结
5. python是区分大小写的,在setting中去掉 Match case 不用设置首字母大小写匹配。
【重点】6. 在tensorboard上绘制 y=x 的图像,引入一张图片:
【重点】7. transforms方法使用:PIL、Normalize 、Resize、Compose、RandomCrop。
【重点】8. 使用 CIFAR10 数据集 显示测试集中的图片(两种方式)
transform.py 主要是对图片进行处理变换,产生我们想要的结果。
1. 使用Tensorform的ToTensor()类,将 PIL 类型的图像转换成 tensor 类型。
2. opencv 读取图片
pip install opencv-python
pip install opencv-python
3. 用 tensorboard 可视化数据
# 作者:要努力,努力,再努力
# 开发时间:2022/5/2 14:42
from PIL import Image
from torchvision import transforms
import cv2
from torch.utils.tensorboard import SummaryWriter
img_path = '../dataset/train/ants_images/24335309_c5ea483bb8.jpg'
img = Image.open(img_path)
# print(img)
# 1. transform 的使用
tensor_trains = transforms.ToTensor() # 看 ToTensor()类 ,可以返回 Image to be converted to tensor. tensor类的图像
tensor_img = tensor_trains(img) # 将 PIL 类型的图像转换成 tensor 类型
# 2. opencv使用
cv_img = cv2.imread(img_path)
# 3、画图
write = SummaryWriter('logs')
write.add_image('tensor_img', tensor_img)
# write.add_image('cv_img', cv_img)
write.close()
4. 总结
| PIL | Python自带的图片打开方式 | Image.open() |
| tensor | tensor类型 | ToTensor() |
| opencv | numpy.array | cv.imread() |
5. python是区分大小写的,在setting中去掉 Match case 不用设置首字母大小写匹配。
【重点】6. 在tensorboard上绘制 y=x 的图像,引入一张图片:
# 作者:要努力,努力,再努力
# 开发时间:2022/5/2 10:59
from torch.utils.tensorboard import SummaryWriter
import numpy as np
from PIL import Image
img_path = "../dataset/train/bees_images/29494643_e3410f0d37.jpg" # 图片路径地址
img_PIL = Image.open(img_path) # 打开图片地址 PIL 格式
img_array = np.array(img_PIL) # 将 PIL 格式 的图片转成 numpy 方式
# print(img_array.shape)
write = SummaryWriter('logs') # tensorboard写logs
write.add_image('test2', img_array, 1, dataformats='HWC')
# 看一下add_image函数使用,add_image(self, tag, img_tensor, global_step=None, walltime=None, dataformats='CHW'):
for i in range(100):
write.add_scalar('y=x', i, i) # 保存数据,做可视化
write.close() # 书写关闭
【重点】7. transforms方法使用:PIL、Normalize 、Resize、Compose、RandomCrop。
# 作者:要努力,努力,再努力
# 开发时间:2022/5/2 16:52
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
img_path = '../dataset/train/ants_images/24335309_c5ea483bb8.jpg'
# 1. PIL 方式
img = Image.open(img_path)
print(img)
# 2. transform方式 Totensor方法
trans_totensor = transforms.ToTensor() # Convert a ``PIL Image`` or ``numpy.ndarray`` to tensor.
img_totensor = trans_totensor(img)
# tensorboard 可视化
writer = SummaryWriter('logs')
writer.add_image('ToTensor', img_totensor)
# Normalize 归一化 output[channel] = (input[channel] - mean[channel]) / std[channel]
print(img_totensor[0][0][0]) # 归一化之前
trans_normal = transforms.Normalize([6, 2, 9], [3, 5, 5])
img_normal = trans_normal(img_totensor)
print(img_normal[0][0][0]) # 归一化之后
writer.add_image('Normalize', img_normal, 2)
# Resize
print(img.size)
trans_resize = transforms.Resize((512, 512))
img_resize = trans_resize(img)
print(img_resize) # PIL类型
img_resize_totensor = trans_totensor(img_resize) # 转tensor类型
writer.add_image('Resize', img_resize_totensor, 1)
# Compose 按比例缩放
trans_resize_2 = transforms.Resize(512)
trans_compose = transforms.Compose([trans_resize_2, trans_totensor]) # Compose 中数据需要transform数据类型,且数据时一个列表
img_compose = trans_compose(img)
writer.add_image('Resize', img_compose, 2)
# RandomCrop
trans_random = transforms.RandomCrop(500, 1000) # 指定高和宽
trans_compose_2 = transforms.Compose([trans_random, trans_totensor])
for i in range(10):
img_crop = trans_compose_2(img)
writer.add_image('RandomCrop', img_crop, i)
writer.close()
【重点】8. 使用 CIFAR10 数据集 显示测试集中的图片(两种方式)
# 作者:要努力,努力,再努力
# 开发时间:2022/5/2 16:52
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
img_path = '../dataset/train/ants_images/24335309_c5ea483bb8.jpg'
# 1. PIL 方式
img = Image.open(img_path)
print(img)
# 2. transform方式 Totensor方法
trans_totensor = transforms.ToTensor() # Convert a ``PIL Image`` or ``numpy.ndarray`` to tensor.
img_totensor = trans_totensor(img)
# tensorboard 可视化
writer = SummaryWriter('logs')
writer.add_image('ToTensor', img_totensor)
# Normalize 归一化 output[channel] = (input[channel] - mean[channel]) / std[channel]
print(img_totensor[0][0][0]) # 归一化之前
trans_normal = transforms.Normalize([6, 2, 9], [3, 5, 5])
img_normal = trans_normal(img_totensor)
print(img_normal[0][0][0]) # 归一化之后
writer.add_image('Normalize', img_normal, 2)
# Resize
print(img.size)
trans_resize = transforms.Resize((512, 512))
img_resize = trans_resize(img)
print(img_resize) # PIL类型
img_resize_totensor = trans_totensor(img_resize) # 转tensor类型
writer.add_image('Resize', img_resize_totensor, 1)
# Compose 按比例缩放
trans_resize_2 = transforms.Resize(512)
trans_compose = transforms.Compose([trans_resize_2, trans_totensor]) # Compose 中数据需要transform数据类型,且数据时一个列表
img_compose = trans_compose(img)
writer.add_image('Resize', img_compose, 2)
# RandomCrop
trans_random = transforms.RandomCrop(500, 1000) # 指定高和宽
trans_compose_2 = transforms.Compose([trans_random, trans_totensor])
for i in range(10):
img_crop = trans_compose_2(img)
writer.add_image('RandomCrop', img_crop, i)
writer.close()
【重点】8. 使用 CIFAR10 数据集 显示测试集中的图片(两种方式)
在下面的链接中可以下载想学习的对应数据集
Datasets — Torchvision 0.12 documentationhttps://pytorch.org/vision/stable/datasets.html
方式一:
# 作者:要努力,努力,再努力 # 开发时间:2022/5/2 22:24 import torchvision from torch.utils.tensorboard import SummaryWriter # 1. 下载数据集 train_set = torchvision.datasets.CIFAR10(root='./dataset', train=True, download=True) test_set = torchvision.datasets.CIFAR10(root='./dataset', train=False, download=True) # print(test_set[0]) # print(test_set.classes) # 显示测试数据集第一张图片 img, target = test_set[0] # print(img) # print(target) # print(test_set.classes[target]) img.show()
方式二:
# 作者:要努力,努力,再努力
# 开发时间:2022/5/2 22:24
import torchvision
from torch.utils.tensorboard import SummaryWriter
# 2. 将数据集转换成tensor的类型
dataset_transform = torchvision.transforms.Compose({
torchvision.transforms.ToTensor()
})
# 使用tensor类型下载数据下载数据集
train_set2 = torchvision.datasets.CIFAR10(root='./dataset', train=True, transform=dataset_transform, download=True)
test_set2 = torchvision.datasets.CIFAR10(root='./dataset', train=False, transform=dataset_transform, download=True)
# print(test_set2[0]) # 看出是tensor数据类型
writer = SummaryWriter('chap04')
for i in range(10):
img, target = test_set2[i]
writer.add_image('test_set2', img, i)
writer.close()



