对于如何使用tensorBoard的方法已经在前文中进行描述,传送门:
首先还是导入PIL和torch的模块,同时我们也可以导入cv2模块,cv2模块中存在transform方法,而torchvision模块中存在transforms类。
此处,我们导入的包内容如下:
#coding=utf-8
from asyncore import write
from PIL import Image
from cv2 import transform
from torchvision import transforms
from torch.utils.tensorboard import SummaryWriter
这里我们载入一张我们同学的图片~
我们通过Image.open方法来打开这张图片。
通过type方法,我们能够得到,通过Image方法打开的图片是一张PIL格式的图片。
from PIL import Image
img = Image.open(img_path)
print(type(img))
输出内容:<class ‘PIL.JpegImagePlugin.JpegImageFile’>
在这里,我们针对图片规范化的处理需要使用到transforms的Normalize方法。
官方文档如下:
根据文档描述,这个方法是不支持PIL Image格式的。这在官方文档中明确的给出了。
This transform does not support PIL Image.
如果我们使用错误的代码进行,那么我们会得到错误信息。
TypeError: img should be Tensor Image. Got <class ‘PIL.JpegImagePlugin.JpegImageFile’>
因此,我们需要对PIL.Image格式的图片进行张量化处理,使用tensor类型的格式作为输入。
PIL.images格式转换为tensor的方法,可以使用transforms提供的ToTensor方法进行。
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
在张量化后,我们能够看到我们的张量场中的数据都是float32类型。
至于ToTensor函数,官方文档描述如下:
接下来我们使用for循环对其进行处理
for i in range(10,1,-1):
trans_norm = transforms.Normalize([0.1*i,0.1*i,0.1*i],[0.1*i,0.1*i,0.1*i])
img_norm = trans_norm(img_tensor)
img_norm = img_norm.double()
writer.add_image("tensor_img",img_norm,10-i)
并在处理结束后关闭writer
writer.close()
完整代码如下:
#coding=utf-8
from asyncore import write
from PIL import Image
from cv2 import transform
from torchvision import transforms
from torch.utils.tensorboard import SummaryWriter
writer = SummaryWriter("logs")
img_path = "0E86E9932FF1E53803F022DB333C2ABE.jpg"
img = Image.open(img_path)
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
#writer.add_image("tensor_img_test",img_tensor)
for i in range(10,1,-1):
trans_norm = transforms.Normalize([0.1*i,0.1*i,0.1*i],[0.1*i,0.1*i,0.1*i])
img_norm = trans_norm(img_tensor)
img_norm = img_norm.double()
writer.add_image("tensor_img",img_norm,10-i)
writer.close()
在运行完代码之后,我们能够得到一个日志存储在logs下。
同样采用tensorboard进行数据可视化。
图像处理过程如下:
(漏一张自己补…………)