目录
1. 使用Tensorform的ToTensor()类,将 PIL 类型的图像转换成 tensor 类型。
2. opencv 读取图片
3. 用 tensorboard 可视化数据
4. 总结
5. python是区分大小写的,在setting中去掉 Match case 不用设置首字母大小写匹配。
【重点】6. 在tensorboard上绘制 y=x 的图像,引入一张图片:
【重点】7. transforms方法使用:Normalize 、Resize、Compose、RandomCrop。
【重点】8. 使用 CIFAR10 数据集 显示测试集中的图片(两种方式)
transform.py 主要是对图片进行处理变换,产生我们想要的结果。
pip install opencv-python
# 作者:要努力,努力,再努力
# 开发时间: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()
PIL | Python自带的图片打开方式 | Image.open() |
tensor | tensor类型 | ToTensor() |
opencv | numpy.array | cv.imread() |
启用 tensorboard ,必须切换到日志文件的上一级目录:
tensorboard --logdir="logs" --port=6007
# 作者:要努力,努力,再努力
# 开发时间:2022/5/4 8:59
import numpy as np
from torch.utils.tensorboard import SummaryWriter
from PIL import Image
from torchvision import transforms
# 写log
writer = SummaryWriter('logs2')
# 引入一张图片
# img_tensor (torch.Tensor, numpy.array, or string/blobname): Image data
# 可以用tensor也可以用numpy的方式
img_path = '../dataset/train/bees_images/36900412_92b81831ad.jpg'
image_open = Image.open(img_path)
# numpy.array 方式
img_npy = np.array(image_open)
writer.add_image('tb2_image', img_npy, 1, dataformats='HWC')
# totensor 方式
trans_totensor = transforms.ToTensor()
img_totensor = trans_totensor(image_open)
writer.add_image('tb2_image', img_totensor, 2)
# 画 y = x 图像
for i in range(100):
writer.add_scalar('y=x', i, i)
writer.close()
总结:
① 引入图片:可以用tensor也可以用numpy的方式 用 writer.add_image()
② 绘制:用 writer.add_scalar()
# 作者:要努力,努力,再努力
# 开发时间:2022/5/4 10:08
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
img_path = '../dataset/train/ants_images/24335309_c5ea483bb8.jpg'
img_PIL = Image.open(img_path) # PIL
writer = SummaryWriter('logs2')
# totensor方式
trans_tensor = transforms.ToTensor()
img_tensor = trans_tensor(img_PIL)
writer.add_image('img_tensor', img_tensor)
# Normalize
trans_normal = transforms.Normalize([5, 6, 7], [2, 3, 6]) # 输入均值和方差,均为列表方式,这里是随便填的
img_normal = trans_normal(img_tensor) # This transform does not support PIL Image. 所以只能用上面的 totenosr 类型
writer.add_image('img_normal', img_normal)
# Resize
trans_resize = transforms.Resize([512, 512])
img_resize = trans_resize(img_tensor)
writer.add_image('img_resize', img_resize)
# Compose 按照比例缩放
trans_resize_2 = transforms.Resize(512)
trans_compose = transforms.Compose([trans_resize_2, trans_tensor]) # def __init__(self, transforms) 需要transform类型
img_compose = trans_compose(img_PIL)
writer.add_image('img_resize', img_compose, 2)
# RandomCrop 截图
trans_random = transforms.RandomCrop(500, 1000)
trans_compose_2 = transforms.Compose([trans_random, trans_tensor])
for i in range(10):
img_crop = trans_compose_2(img_PIL)
writer.add_image('img_crop', img_crop, i)
writer.close()
总结: 多用crtl,去查查 这些方法的使用方式。
在下面的链接中可以下载想学习的对应数据集
Datasets — Torchvision 0.12 documentationhttps://pytorch.org/vision/stable/datasets.html
方式一:下载数据集,不设置格式,显示图片。
方式二:下载tensor数据集,在 tensorboard 中展示10张图片。
# 作者:要努力,努力,再努力
# 开发时间:2022/5/4 11:13
from torchvision import transforms
from torchvision import datasets
from torch.utils.tensorboard import SummaryWriter
# 1. 下载数据集 建议都把download设置成True
# tran_set = datasets.CIFAR10(root='./dataset', train=True, download=True)
# test_set = datasets.CIFAR10(root='./dataset', train=False, download=True)
# img, target = test_set[0]
# print(img)
# img.show()
# 2. 设置 数据格式为tensor,再展示到tensorboard中
dataset_forms = transforms.Compose({
transforms.ToTensor()
})
tran_set = datasets.CIFAR10(root='./dataset', train=True, transform=dataset_forms, download=True)
test_set = datasets.CIFAR10(root='./dataset', train=False, transform=dataset_forms, download=True)
writer = SummaryWriter('chap04_2')
for i in range(10):
img, target = test_set[i]
writer.add_image('dataset_tensor', img, i)
writer.close()
总结:
1. 数据下载太慢,可以复制下方链接迅雷下载,有镜像加速。
2. 可以设置数据格式。