P12.常见的Transforms(一) 1.
输入
输出
作用
PILImage.open()
tensorToTensor()
narrayscv.imread()
2.在项目文件夹中存储一张图片
from PIL import Imageimg = Image.open("images/e56420e50cbfef3191ed95d0920b0a9e.jpeg")print(img)
Python中_call_的用法
class Person:def __call__(self, name):print("__call__"+" Hello " + name)def hello(self, name):print("hello" + name)person = Person()person("zhangsan") #调用__call__person.hello("lisi") #调用hello()方法 __call__ Hello zhangsan
hellolisi
3.ToTensor()的使用
【小土堆pytorch教程学习笔记P12P13】class ToTensor(object):"""Convert a ``PIL Image`` or ``numpy.ndarray`` to tensor. from PIL import Imagefrom torch.utils.tensorboard import SummaryWriterfrom torchvision import transformswriter = SummaryWriter("logs")img = Image.open("images/e56420e50cbfef3191ed95d0920b0a9e.jpeg")print(img)trans_totensor = transforms.ToTensor()img_tensor = trans_totensor(img)writer.add_image("ToTensor", img_tensor)writer.close() tensorboard --logdir=logs
4.Normalize()的使用
class Normalize(object):"""Normalize a tensor image with mean and standard deviation.Given mean: ``(M1,...,Mn)`` and std: ``(S1,..,Sn)`` for ``n`` channels, this transform will normalize each channel of the input ``torch.*Tensor`` i.e.``input[channel] = (input[channel] - mean[channel]) / std[channel]`` from PIL import Imagefrom torch.utils.tensorboard import SummaryWriterfrom torchvision import transformswriter = SummaryWriter("logs")img = Image.open("images/e56420e50cbfef3191ed95d0920b0a9e.jpeg")print(img)# ToTensortrans_totensor = transforms.ToTensor()img_tensor = trans_totensor(img)writer.add_image("ToTensor", img_tensor)# Normalizeprint(img_tensor[0][0][0])trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])img_norm = trans_norm(img_tensor)print(img_norm[0][0][0])writer.add_image("Normalize", img_norm)writer.close() # 0.0039*2-1=-0.6662
tensor(0.0039)
tensor(-0.6662)
P13.常见的Transforms(二) 1.Resize()的使用
class Resize(object):"""Resize the input PIL Image to the given size. #输入是PILImageArgs:size (sequence or int): Desired output size. If size is a sequence like (h, w), output size will be matched to this. If size is an int,smaller edge of the image will be matched to this number. from PIL import Imagefrom torch.utils.tensorboard import SummaryWriterfrom torchvision import transformswriter = SummaryWriter("logs")img = Image.open("images/e56420e50cbfef3191ed95d0920b0a9e.jpeg")print(img)# ToTensortrans_totensor = transforms.ToTensor()img_tensor = trans_totensor(img)writer.add_image("ToTensor", img_tensor)# Normalizeprint(img_tensor[0][0][0])trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])img_norm = trans_norm(img_tensor)print(img_norm[0][0][0])writer.add_image("Normalize", img_norm)# Resizeprint(img.size)trans_resize = transforms.Resize((512, 512))# img PIL -> resize -> img_resize PILimg_resize = trans_resize(img)# img_resize PIL -> totensor -> img_resize tensorimg_resize = trans_totensor(img_resize)writer.add_image("Resize", img_resize, 0)print(img_resize)writer.close()
tensor(0.0039)
tensor(-0.9922)
(900, 506)
tensor([[[0.0039, 0.0039, 0.0039,..., 0.0784, 0.1569, 0.1843],
[0.0039, 0.0039, 0.0039,..., 0.1804, 0.2118, 0.2353],
[0.0039, 0.0039, 0.0039,..., 0.2471, 0.2863, 0.3098],
...,
[0.0078, 0.0078, 0.0078,..., 0.0078, 0.0078, 0.0078],
[0.0078, 0.0078, 0.0078,..., 0.0078, 0.0078, 0.0078],
[0.0078, 0.0078, 0.0078,..., 0.0078, 0.0078, 0.0078]],
[[0.0078, 0.0078, 0.0039,..., 0.3098, 0.6157, 0.6431],
[0.0078, 0.0078, 0.0039,..., 0.4196, 0.6353, 0.6588],
[0.0078, 0.0078, 0.0039,..., 0.5098, 0.6588, 0.6824],
...,
[0.0000, 0.0000, 0.0000,..., 0.0000, 0.0000, 0.0000],
[0.0000, 0.0000, 0.0000,..., 0.0000, 0.0000, 0.0000],
[0.0000, 0.0000, 0.0000,..., 0.0000, 0.0000, 0.0000]],
[[0.0000, 0.0000, 0.0000,..., 0.2902, 0.5098, 0.5373],
[0.0000, 0.0000, 0.0000,..., 0.3961, 0.5412, 0.5647],
[0.0000, 0.0000, 0.0000,..., 0.4784, 0.5882, 0.6118],
...,
[0.0118, 0.0118, 0.0118,..., 0.0118, 0.0118, 0.0118],
[0.0118, 0.0118, 0.0118,..., 0.0118, 0.0118, 0.0118],
[0.0118, 0.0118, 0.0118,..., 0.0118, 0.0118, 0.0118]]])
tensorboard --logdir=logs
2.Compose()的使用
class Compose(object):"""Composes several transforms together. #将几个transforms结合在一起Args:transforms (list of ``Transform`` objects): list of transforms to compose.Example:>>> transforms.Compose([>>>transforms.CenterCrop(10), #中心裁剪>>>transforms.ToTensor(), #转换为tensor数据类型>>> ])""" Compose()中的参数需要的是一个列表
Python中 , 列表的表示形式为[数据1 , 数据2 , ...] 。在Compose中 , 数据需要是transforms类型 , 所以得到Compose([transforms参数1, transforms参数2])
from PIL import Imagefrom torch.utils.tensorboard import SummaryWriterfrom torchvision import transformswriter = SummaryWriter("logs")img = Image.open("images/e56420e50cbfef3191ed95d0920b0a9e.jpeg")print(img)# ToTensortrans_totensor = transforms.ToTensor()img_tensor = trans_totensor(img)writer.add_image("ToTensor", img_tensor)# Normalizeprint(img_tensor[0][0][0])trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])img_norm = trans_norm(img_tensor)print(img_norm[0][0][0])writer.add_image("Normalize", img_norm)# Resizeprint(img.size)trans_resize = transforms.Resize((512, 512))# img PIL -> resize -> img_resize PILimg_resize = trans_resize(img)# img_resize PIL -> totensor -> img_resize tensorimg_resize = trans_totensor(img_resize)writer.add_image("Resize", img_resize, 0)print(img_resize)# Compose -resize - 2trans_resize_2 = transforms.Resize(512)# PIL -> PIL -> tensortrans_compose = transforms.Compose([trans_resize_2, trans_totensor]) #trans_resize_2 output = trans_totensor inputimg_resize_2 = trans_compose(img)writer.add_image("Resize", img_resize_2, 1)writer.close() tensorboard --logdir=logs
3.RandomCrop()的使用
class RandomCrop(object):"""Crop the given PIL Image at a random location.Args:size (sequence or int): Desired output size of the crop. If size is an int instead of sequence like (h, w), a square crop (size, size) is made. from PIL import Imagefrom torch.utils.tensorboard import SummaryWriterfrom torchvision import transformswriter = SummaryWriter("logs")img = Image.open("images/e56420e50cbfef3191ed95d0920b0a9e.jpeg")print(img)# ToTensortrans_totensor = transforms.ToTensor()img_tensor = trans_totensor(img)writer.add_image("ToTensor", img_tensor)# Normalizeprint(img_tensor[0][0][0])trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])img_norm = trans_norm(img_tensor)print(img_norm[0][0][0])writer.add_image("Normalize", img_norm)# Resizeprint(img.size)trans_resize = transforms.Resize((512, 512))# img PIL -> resize -> img_resize PILimg_resize = trans_resize(img)# img_resize PIL -> totensor -> img_resize tensorimg_resize = trans_totensor(img_resize)writer.add_image("Resize", img_resize, 0)print(img_resize)# Compose -resize - 2trans_resize_2 = transforms.Resize(512)# PIL -> PIL -> tensortrans_compose = transforms.Compose([trans_resize_2, trans_totensor]) #trans_resize_2 output = trans_totensor inputimg_resize_2 = trans_compose(img)writer.add_image("Resize", img_resize_2, 1)# RandomCroptrans_random = transforms.RandomCrop(256)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() tensorboard --logdir=logs
总结使用方法
1)关注输入和输出类型
若输出类型未知 , 可使用print() , print(type())直接查看 , 也可以设置断点debug
2)多看官方文档
3)关注方法需要什么参数
在init初始化中查看需要设置的参数 , 在Args查看具体的数据类型
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
