tensorboard:可视化数据
在anaconda安装:
pip install tensorboard==2.12.0
最好使用这个版本 不然后面调用会报错 因为版本过高的原因
然后还碰到了安装的时候 安装到C盘去了 但是我用的虚拟环境是在E盘:此时去C盘把那些新安装的复制过来就好了 附录我C盘的路径:C:\Users\asus\AppData\Roaming\Python\Python38\Scripts
(搜索了一下有大佬说可能是python版本的问题 以后pip/conda install的时候指定一下python版本 可以先在虚拟环境中python --version查看一下)
transforms:数据增强(数据预处理)
transforms是个工具箱 里面有很多工具 可以处理图片得到一个结果
tool = transforms.totensor()
result = tool(input)
为什么非要转化成tensor型?因为它里面有很多神经网络深度学习的参数 想要训练就需要tensor型
常见的transforms工具(按住ctrl可以进入源码)
ToTensor()
code:
from PIL import Image from torch.utils.tensorboard import SummaryWriter from torchvision import transforms writer = SummaryWriter('../logs') #tensorboard --logdir=../logs img = Image.open('../images/1.jpg') print(img) # use TOTensor() trans_tensor = transforms.ToTensor() img_tensor = trans_tensor(img) writer.add_image('totensor',img_tensor,dataformats='CHW') writer.close()
logs:
Normalize() 标准化
设置Normalize([0.5,0.5,0.5],[0.5,0.5,0.5]) (这样设置可以实现归一化)
input[channel] = (input[channel] - mean[channel]) / std[channel]
=(input - 0.5) / 0.5
=2 * input - 1
input [0,1]
result [-1,1]
code:(在writer.close()之前加上)
# use Normalize() print(img_tensor[0][0][0]) trans_norm = transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5]) #trans_norm = transforms.Normalize([1,2,3],[3,2,1]) img_norm = trans_norm(img_tensor) print(img_norm[0][0][0]) writer.add_image('normalize',img_norm) #writer.add_image('normalize',img_norm,1)
logs:
可以换几个数据试一下:(冬天寒冷小苏 变成夏天红温小苏了)
Resize()
改变图片大小
code:
#use Resize() print(img.size) trans_resize = transforms.Resize((512,512)) img_resize = trans_resize(img) img_resize = trans_totensor(img_resize) print(img_resize) writer.add_image('resize',img_resize,0)
好吧:是拉伸小饼
Compose()
串联多个图片变换的操作
code:
#use Compose() - Resize() - 2 trans_resize_2 = transforms.Resize(512) trans_compose = transforms.Compose([trans_resize_2,trans_totensor]) img_resize_2 = trans_compose(img) writer.add_image('resize',img_resize_2,1)
RandomCrop()
随机裁剪
code:
#use RandomCrop() trans_random = transforms.RandomCrop(512) trans_compose_2 = transforms.Compose([trans_random,trans_totensor]) #随机裁剪十次 for i in range(10): img_crop = trans_compose_2(img) writer.add_image('random_crop',img_crop,i)
还可以根据宽和高裁剪的
code:
trans_random = transforms.RandomCrop((500,1000)) trans_compose_3 = transforms.Compose([trans_random,trans_totensor]) for i in range(10): img_crop = trans_compose_3(img) writer.add_image('random_crophw',img_crop,i)
以上完整代码
先展示目录结构:
code:
from PIL import Image from torch.utils.tensorboard import SummaryWriter from torchvision import transforms import cv2 import numpy as np writer = SummaryWriter('../logs') #tensorboard --logdir=../logs img = Image.open('../images/1.jpg') print(img) # use TOTensor() trans_totensor = transforms.ToTensor() img_tensor = trans_totensor(img) writer.add_image('totensor',img_tensor,dataformats='CHW') # use Normalize() print(img_tensor[0][0][0]) trans_norm = transforms.Normalize([1,2,3],[3,2,1]) img_norm = trans_norm(img_tensor) print(img_norm[0][0][0]) writer.add_image('normalize',img_norm,1) #use Resize() print(img.size) trans_resize = transforms.Resize((512,512)) img_resize = trans_resize(img) img_resize = trans_totensor(img_resize) print(img_resize) writer.add_image('resize',img_resize,0) #use Compose() - Resize() - 2 trans_resize_2 = transforms.Resize(512) trans_compose = transforms.Compose([trans_resize_2,trans_totensor]) img_resize_2 = trans_compose(img) writer.add_image('resize',img_resize_2,1) #use RandomCrop() trans_random = transforms.RandomCrop(512) trans_compose_2 = transforms.Compose([trans_random,trans_totensor]) for i in range(10): img_crop = trans_compose_2(img) writer.add_image('random_crop',img_crop,i) trans_random = transforms.RandomCrop((500,1000)) trans_compose_3 = transforms.Compose([trans_random,trans_totensor]) for i in range(10): img_crop = trans_compose_3(img) writer.add_image('random_crophw',img_crop,i) writer.close()