目录
主要关注函数的输入、输出和作用。
图片的三种格式: 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