九、常见的transform(二)

目录

一、Normlize()类

1、作用

2、结构(输入输出等

3、结合tensorboard实战

二、Resize()类

        1、作用

2、结构(输入输出等)

3、 结合tensorboard实战

三、Compose()类

1、作用

2、结构(输入输出等)

3、结合Resize和Tensorboard进行实战 

四、RandomCrop()类

1、功能

2、结构

3、结合compose、tensorboard实战

五、总结

1、快捷键

2、类内方法

3、函数功能查看


主要关注函数的输入、输出和作用。

图片的三种格式:       PIL          Image.open()读取图片

                                    narrays    cv2.Imread()读取图片

                                   tensor       ToTensor从前面另个转变

一、Normlize()类

1、作用

将图片标准化,图片3个维度的值在[0,1]之间,通过标准化图片可以将值转化为想要的区间内

2、结构(输入输出等)

输入:实例化对象时__init__输入:均值(mean),标准差(std)

自动调用内置函数输入:tensor类型的图片

标准化:(img-mean)/std。此时图片将进行改变。

 3、结合tensorboard实战

(1)Image.open()读取图片

(2)transforms.ToTensor()将图片转化为tensor类型,分两步:建立Totensor类的实例对象->调用内置函数进行转化

(3)SummaryWriter在tensorboard上展示tensor类型的图片,分四步:建立SummaryWriter实例化对象(注意参数:文件名)->调用共有函数add_Image(参数为:“图名”,tensor类型的图片,第几步(可省略))进行图片添加->对象.close()方法关闭->右键打开本文件的后台(Terminal),运行 tensorboard --logdir=(文件名) --port=6007,若未打开,在谷歌浏览器上查看

(4)图片归一化:创建Normalize类的实例对象(参数为:均值,标准差),一般图片有3个维度,均值和标准差各写3个即可->调用内置方法进行归一化(参数为tensor类型的图片)

(5)在)SummaryWriter在tensorboard上展示归一化后的图片,如(3),其中add_image参数“图名”可以不一样,若一样,标好第几步。两个只用一个close()方法关闭即可。

from torch.utils.tensorboard import SummaryWriter
from torchvision import transforms
from PIL import Image
img=Image.open("E:\\pytorch pycharm\\Image\\sansan.jpg")
tensor_trans=transforms.ToTensor()
img_tensor=tensor_trans(img)
write=SummaryWriter("logs")
write.add_image("tensor",img_tensor)
#Normlize类:归一化,输入:img,mean(均值),std(标准差),将img的值归一化为(img-mean)/std
trans_norm=transforms.Normalize([-2,-1,-3],[1,3,2])#实例化对象,图片有3个维度(C,H,W),均值好标准差提供3个
img_norm=trans_norm(img_tensor)
print(img_tensor[0][0][0])
print(img_norm[0][0][0])
write.add_image("normlize",img_norm,1)
write.close()

二、Resize()类

1、作用

将PIL类型的图片重新变换尺寸,如200*200的图片尺寸,变为512*512

2、结构(输入输出等)

实例化对象输入:重新定义的尺寸大小(输入一般为( ,)类型,若为一个int型的值,如224,则表示把图像的短边统一为224,另外一边做同样倍速缩放,不一定为224)

调用内置函数输入:PIL类型的图片

输出:重新定义尺寸的图片

3、 结合tensorboard实战

改变图片尺寸并在tensorboard上进行输出:(在前面代码基础上进行)

#Resize类,将PIL类型的图片重新变换尺寸,如200*200的图片尺寸,变为512*512
print(img.size)#先打印原先PIL图片尺寸
tensor_resize=transforms.Resize((512,512))#创建Resize实例化对象,参数为size
img_resize=tensor_resize(img)#改变传入尺寸大小
print(img_resize.size)#打印Resize之后的图片尺寸
img_TReszie=tensor_trans(img_resize)#转为tensor类型
write.add_image("Resize",img_TReszie,0)#tensorboard进行输出
write.close()

三、Compose()类

1、作用

连接多个transforms类型的方法,这些方法组成列表作为Compose实例化对象的输入,前一个方法的输出为后一个方法的输入

2、结构(输入输出等)

实例化对象的输入:transforms类型的列表,列表内前一个方法的输出是回一个方法的输入

调用内置函数输入:列表第一个方法的输入

输出:列表最后一个方法的输出

3、结合Resize和Tensorboard进行实战 

将PIL类型图片改变尺寸大小,并转化为tensor类型在tensorboard上进行展示

#compose类,连接多个方法,前一个方法的输出是后一个方法的输入。方法是transforms类型的,且组成列表作为compose函数的输入
#compose结合resize方法,resize方法如果输入的是一个值,则是图像的短边统一为这个值,另外一边做同样倍速缩放,不一定为这个值
tensor_resize1=transforms.Resize(20)#resize输入一个值的例子
tensor_compose=transforms.Compose([tensor_resize1,tensor_trans])#两个transforms类型的实例化对象,先改变尺寸大小,再变为tensor类型
img_compose=tensor_compose(img)#输入为第一个实例化对象的输入类型,输出为最后一个实例化对象的输出类型
write.add_image("Compose",img_compose,0)#tensorboard进行展示
write.close()

 

四、RandomCrop()类

1、功能

对图片进行随机尺度的裁剪,输入一个值,或者两个值(代表图片的宽,高),从图片的任意区域剪裁输入尺寸的图片

2、结构

实例化对象输入:剪裁图像的尺寸大小(一个值,多个值都可)

内置方法调用:PIL/tensor格式的图片

输出:随机位置剪裁后的图片

3、结合compose、tensorboard实战

对图片进行裁剪,,循环1次,并在tensorboard上进行输出 :(接上一段代码)

#RandomCrop()类
tensor_random=transforms.RandomCrop((110,110))
tensor_compose1=transforms.Compose([tensor_random,tensor_trans])
for i in range(10):#循环10次
    img_random = tensor_compose1(img)
    write.add_image("random",img_random,i)
write.close()

五、总结

1、快捷键

(1)功能查看:按住ctrl键,点击名称进入解释文件,有的要进两次(比如transforms,第一次出来的是__init__.py文件,再按住ctrl键,点击transforms才会出现解释文件)

         内部相应类的功能查看:pycharm左边有一个structure,点击即出现所有的类及其函数,点击相应的类或者函数就会跳转

                                                                               

(2)查看类实例对象初始化或者函数调用时需要什么参数:鼠标放在括号内,点击ctrl+P,灰色可以省略,self省略,固定值省略

(3)查看红色下划曲线出了什么错误:Alt+Enter ,一般会有解决方法

(4)Ctrl+C:退出terminal

2、类内方法

(1)初始化方法__init__(self,):在创建实例对象时调用,传递对象的参数给类,类内函数间局部变量不能互相传递,但是__init__()中创建的self.**变量可以,所以把对象传递过来的外部变量赋值给self.**变量,就可以在类内其他函数中使用

(2)内置方法__***__():不能被外部引用的方法,由实例对象(方法所需参数)/实例对象[索引]直接调用

(3)共有方法:实例对象.方法名(参数)调用

3、函数功能查看

(1)找到函数对应的官方文档解释(按住ctrl键,点击即可进入)

(2)关注输入和输出类型

(3)关注各个方法需要什么参数(初始化方法__init__()、内置方法__***__(),公共方法***())

(4)不知道函数返回值的时候:1)直接打印:print( )     2) 打印类型:print(type( ))   打印大小:print(**.size)     3)debug

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值