小土堆Pytorch笔记P12、13

编程基础很弱,需要机器学习,学习记录,按自己理解写的,希望以后能学懂吧,要是有大神看到还请赐教。

常见的Transforms(一)

使用transforms.py内定义的那些类

关注三个点:1.输入 2.输出 3.作用

# 输入、输出涉及图片格式,比较容易错。

Image.open()处理的格式,PIL

ToTensor()处理的格式,tensor

cv.imread()处理的格式,narrays

基础语法:

__call__

class Person:
    def __call__(self, name):
        print("__call__" + "Hello" + name)

    def hello(self, name):
        print("hello" + name)


# 新建一个对象
person = Person()

# 两种方式调用
person("ZhangSan")  # __call__方式建立的直接对象加括号调用
# 弹幕有种解释:__call__可以让对象当函数用
person.hello("Lisi")

ToTensor的使用

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

writer = SummaryWriter("logs")

# 路径PIL读取
img_path = "D:\\Scientific_Research\\Pycharmproject\\Biji\\20230822144416.jpg"
img = Image.open(img_path)

# trans_totensor代表transforms里的ToTensor
# 由于帮助文档里ToTensor有__call__,可以直接输入?????????????????????
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)  # 将img变为tensor格式


# 将图片写入tensorboard
writer.add_image("小土堆P12、13",img_tensor,1)
#关闭
writer.close()

# 运行完在Terminal里边查看Tensorboard

Normalize的使用 :

将对应信道的Tensor图片归一化处理

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

writer = SummaryWriter("logs")

img_path = "D:\\Scientific_Research\\Pycharmproject\\Biji\\20230822144416.jpg"
img = Image.open(img_path)

trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)

# Normalize
print(img_tensor[0][0][0])#查看归一化之前元素

#__init__初始化???归一化处理
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])#查看归一化后元素
# 写入tensorboard看看啥样
writer.add_image("归一化",img_norm,2)

不常用的:

 ToPILImage

常见的Transforms(二)

Resize的使用:

将输入的PIL图片resize为给定尺寸。

如果给定序列(sequen)例如(h,w)就是将图片resize成这个;

如果给定一个int,图片最小边会匹配这个int。(类似于等比缩放)

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

writer = SummaryWriter("logs")

img_path = "D:\\Scientific_Research\\Pycharmproject\\Biji\\20230822144416.jpg"
img = Image.open(img_path)

# Resize
print(img.size)
trans_resize = transforms.Resize((512,512))
img_resize = trans_resize(img)#此处帮助文档里并没有__call__也输入img,之前理解有问题。
print(img_resize.size)

Compose()的使用:

其中需要参数为列表,这个列表中包含transform的类型。如下列代码所示,Comepose内列表为transforms内的对象(描述可能不对,稍微想象一下)。

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

writer = SummaryWriter("logs")

img_path = "D:\\Scientific_Research\\Pycharmproject\\Biji\\20230822144416.jpg"
img = Image.open(img_path)

# Compose Resize 2
# 输入PIL->改变大小->输出Tensor。
trans_resize_2 = transforms.Resize(512)
trans_totensor = transforms.ToTensor()
trans_compose = transforms.Compose([trans_resize_2,trans_totensor])# 注意列表内前后元素的数据类型需要对应
img_resize_2= trans_compose(img)

 RandomCrop()的使用:

随即裁剪,输入size,若为sequence,裁剪为对应宽高;若为int,裁剪为对应正方形。

from PIL import Image
from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms

writer = SummaryWriter("logs")

img_path = "D:\\Scientific_Research\\Pycharmproject\\Biji\\20230822144416.jpg"
img = Image.open(img_path)

# ToTensor
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)

# RandomCrop
trans_random = transforms.RandomCrop(512)
trans_compose_2 = transforms.Compose([trans_random, trans_totensor])

# for循环随机裁剪10次输入tensorboard
for i in range(10):
    img_crop = trans_compose_2(img)
    writer.add_image("RamdCrop",img_crop,i)

使用方法总结:

1.使用transforms内的方式方法,需要关注他们的输入输出类型。

2.多看帮助文档。

3.关注方法需要什么参数。比如__init__。

4.一般输入类型给你说,但要是不知道输出类型,可以试出来。(print,print(type),debug等)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值