深度学习入门笔记——Transform的使用
Transfrom是什么?
可以看作是一个图像处理的工具箱,通过查看Transform类可以找到不同的图像处理方法
更准确的说,Transform中有各种类的的定义,我们可以通过继承或者构造这些类,然后调用里面的方法来实现相应的功能
可以通过结构来便捷的查看transform中的类和方法,然后实现对应的对象即可。其中__call__函数的作用就是在调用这个对象的时候自动调用的函数比如这是Totensor类的定义,可以看到就是将其他格式的图像转化为tensor格式的图像
具体的代码如下,输出的就是tensor类型的图像
from torchvision import transforms
from PIL import Image
image_path="dataset/hymenoptera_data/train/ants_image/7759525_1363d24e88.jpg"
image=Image.open(image_path)
transform_class = transforms.ToTensor() # 构造transform中的ToTensor类
image_tensor =transform_class(image) # 调用类将图像转化为tensor格式(__call__函数)
print(type(image_tensor))
Tensor格式有什么用
相较于PIL的image格式和numpy的array格式,tensor图像格式的作用在于它包含了用于神经网络的一些属性,比如反向传递、使用的是CPU还是GPU进行训练等等,所以tensor图像格式更适合用来进行神经网络的训练
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from PIL import Image
image_path="dataset/hymenoptera_data/train/ants_image/7759525_1363d24e88.jpg"
image=Image.open(image_path)
transform_class = transforms.ToTensor() # 构造transform中的ToTensor类
image_tensor =transform_class(image) # 调用类将图像转化为tensor格式(__call__函数)
writer = SummaryWriter("logs")
writer.add_image("tensor_image",image_tensor,1) # 用tensor格式显示图像
writer.close()
此外,我们可以看到,使用PIL处理的图像格式是Jpeg格式,opencv处理的图像是numpy的array格式,transform处理的图像是tensor格式,三者是不相同的
各种格式以及对应的调用方法如下:
本文作者:cyMessi
本文链接:https://www.cnblogs.com/cyMessi/p/18509826
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步