小土堆pytorch教程学习笔记P12P13

P12.常见的Transforms(一)

1.

输入

输出

作用

PIL         Image.open()

tensor         ToTensor()

narrays         cv.imread()

2.在项目文件夹中存储一张图片

from PIL import Image

img = Image.open("images/e56420e50cbfef3191ed95d0920b0a9e.jpeg")
print(img)

<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=900x506 at 0x7FC1526E1630> 

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()的使用

class ToTensor(object):
"""Convert a ``PIL Image`` or ``numpy.ndarray`` to tensor.
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

writer = 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 Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

writer = SummaryWriter("logs")
img = Image.open("images/e56420e50cbfef3191ed95d0920b0a9e.jpeg")
print(img)

# ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor", img_tensor)


# Normalize
print(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. #输入是PILImage

    Args:
        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 Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

writer = SummaryWriter("logs")
img = Image.open("images/e56420e50cbfef3191ed95d0920b0a9e.jpeg")
print(img)

# ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor", img_tensor)


# Normalize
print(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)

# Resize
print(img.size)
trans_resize = transforms.Resize((512, 512))
# img PIL -> resize -> img_resize PIL
img_resize = trans_resize(img)
# img_resize PIL -> totensor -> img_resize tensor
img_resize = trans_totensor(img_resize)
writer.add_image("Resize", img_resize, 0)
print(img_resize)

writer.close()

<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=900x506 at 0x7F1E8BFBF7F0>
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 Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

writer = SummaryWriter("logs")
img = Image.open("images/e56420e50cbfef3191ed95d0920b0a9e.jpeg")
print(img)

# ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor", img_tensor)


# Normalize
print(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)

# Resize
print(img.size)
trans_resize = transforms.Resize((512, 512))
# img PIL -> resize -> img_resize PIL
img_resize = trans_resize(img)
# img_resize PIL -> totensor -> img_resize tensor
img_resize = trans_totensor(img_resize)
writer.add_image("Resize", img_resize, 0)
print(img_resize)

# Compose -resize - 2
trans_resize_2 = transforms.Resize(512)
# PIL -> PIL -> tensor
trans_compose = transforms.Compose([trans_resize_2, trans_totensor]) #trans_resize_2 output = trans_totensor input
img_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 Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

writer = SummaryWriter("logs")
img = Image.open("images/e56420e50cbfef3191ed95d0920b0a9e.jpeg")
print(img)

# ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)
writer.add_image("ToTensor", img_tensor)


# Normalize
print(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)

# Resize
print(img.size)
trans_resize = transforms.Resize((512, 512))
# img PIL -> resize -> img_resize PIL
img_resize = trans_resize(img)
# img_resize PIL -> totensor -> img_resize tensor
img_resize = trans_totensor(img_resize)
writer.add_image("Resize", img_resize, 0)
print(img_resize)

# Compose -resize - 2
trans_resize_2 = transforms.Resize(512)
# PIL -> PIL -> tensor
trans_compose = transforms.Compose([trans_resize_2, trans_totensor]) #trans_resize_2 output = trans_totensor input
img_resize_2 = trans_compose(img)
writer.add_image("Resize", img_resize_2, 1)

# RandomCrop
trans_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查看具体的数据类型

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值