常见的Transforms使用方法

目录

前言

一、pythion中__call__()方法的用法

二、ToTensor的使用

三、Normalize(归一化)的使用

四、Resize的使用

五、在Compose中使用Resize

六、RandomCrop(随机裁剪)的使用

总结


前言

transforms的使用要非常注意三点:输入——输出——作用
常见的图片格式有:PIL(使用Image.open()打开,python自带的);tensor(使用ToTensor()打开);narrays(使用cv.imread()打开)


一、python中__call__()方法的用法

我们知道函数是可被调用的。内置函数callable可以验证该对象是否是可以调用对象,所以如果把一个函数名传给callable(),就会返回True。
__call__() 方法可以用来将类实例变成为可调用对象, 说的直白点就是如果在类里重写了__call__函数,该类实例就可以当做函数一样被调用。

代码如下:

class Person:                       #创建一个Person类
    def __call__(self, name):     #定义___call__函数,name是参数
        print("__call__ "+ "hello "+ name)

def hello(self, name):        #定义hello函数,name是参数
        print("hello "+ name)

person = Person()     #新建一个Person的对象,名字叫person(创建一个Person实例person)
person("zhangsan")    #调用__call__函数
person.hello("haha")  #调用hello函数

二、ToTensor的使用

TensorBoard默认是tensor的数据类型。

代码如下:

trans_ToTensor = transforms.ToTensor()    #创建一个实例
img_tensor = trans_ToTensor(img)    #使用totensor方法把图片转化为tensorg类型
writer.add_image("totensor", img_tensor, 1)   #写入tensorboard中

三、Normalize(归一化)的使用

归一化一个tensor的数据类型,给入均值和标准差,输出归一化结果

代码如下:

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, 2)  #写入tensorboard中

四、Resize的使用

代码如下:

print(img.size)   #输出图片尺寸
trans_resize = transforms.Resize(400)   #创建一个实例,调用resize()方法
img_resize = trans_resize(img)          #按比例进行变换
img_resize_tensor = trans_ToTensor(img_resize)     #将图片格式转换为tensor类型
print(img_resize_tensor)            #输出图片尺寸
writer.add_image("resize", img_resize_tensor , 3)   #写入tensorboard中

五、在Compose中使用Resize

如果说torchvision.transforms是pytorch中的图像预处理包,有很多步骤。Compose的作用就是把多个步骤整合到一起。

比如说:
transforms.Compose([
transforms.CenterCrop(10),
transforms.ToTensor(),  ])
这样就把两个步骤整合到了一起。

注意:compose([], [], ...)  中括号内的每一步都是有顺序的,从前到后,前一个输出的结果,就是后一步输入的,所以要保证数据类型一致,要不然会报错。

代码如下:

trans_resize_2 = transforms.Resize(500)    #创建一个实例,调用resize()方法
trans_compose = transforms.Compose([trans_resize_2, trans_ToTensor])   #使用compose函数
img_resize_2 = trans_compose(img)
writer.add_image("conpose_resize", img_resize_2, 5)    #写入tensorboard中

六、RandomCrop(随机裁剪)的使用

代码如下:

trans_random = transforms.RandomCrop(300, 200)     #创建一个实例,调用randomcrap()方法
trans_compose_2 = transforms.Compose([trans_random, trans_ToTensor])    #先裁剪,在转换成tensor类型
for i in range(10):         #for循环
    img_crop = trans_compose_2(img)
    writer.add_image("randomcrop", img_crop, i)

全部代码如下:

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

writer = SummaryWriter("logs")

img = Image.open("train/ants/0013035.jpg")
print(img)

#ToTensor的使用
trans_ToTensor = transforms.ToTensor()  #创建一个实例
img_tensor = trans_ToTensor(img)        #使用totensor方法把图片转化为tensorg类型
writer.add_image("totensor", img_tensor, 1)  #写入tensorboard中

#Normalize
print(img_tensor[0, 0, 0])  #归一化前图片的数据
trans_norm = transforms.Normalize([0.5,2,1.5], [0.5,1,1.2])    #创建一个实例,输入均值,方差
img_norm = trans_norm(img_tensor)   #调用函数随图片进行归一化处理
print(img_norm[0, 0, 0])   #归一化后图片的数据
writer.add_image("normalize", img_norm, 1)  #写入tensorboard中

#Resize
print(img.size)   #输出图片尺寸
trans_resize = transforms.Resize(400)   #创建一个实例,调用resize()方法
img_resize = trans_resize(img)          #按比例进行变换
img_resize_tensor = trans_ToTensor(img_resize)     #将图片格式转换为tensor类型
print(img_resize_tensor)            #输出图片尺寸
writer.add_image("resize", img_resize_tensor , 3)   #写入tensorboard中

#在Compose中使用resize
trans_resize_2 = transforms.Resize(250)    #创建一个实例,调用resize()方法
trans_compose = transforms.Compose([trans_resize_2, trans_ToTensor])   #使用compose函数
img_resize_2 = trans_compose(img)
writer.add_image("conpose_resize", img_resize_2, 6)    #写入tensorboard中

#RandomCorp
trans_random = transforms.RandomCrop(300, 200)     #创建一个实例,调用randomcrap()方法
trans_compose_2 = transforms.Compose([trans_random, trans_ToTensor])    #先裁剪,在转换成tensor类型
for i in range(10):         #for循环
    img_crop = trans_compose_2(img)
    writer.add_image("randomcrop", img_crop, i)

writer.close()


总结

使用transforms要注意输入输出的数据类型;
多看官方的注解/用法;
关注方法需要什么参数;
不知道返回值的类型的时候可以使用print(); print(typr()); debug来运行查看一下。

常见的Transforms的使用方法相关推荐

  1. 论文《一种金融市场预测的深度学习模型: FEPA》(4)----金融市场预测的架构--常见的数据降为方法

    金融市场预测的基本的步骤: (1)获得交易数据 (2)交易价格数据特征提取 (3)输入预测模型进行 训练 (4)预测量输出 思考: 基本都是这样的架构啊 常见的数据降为方法: (1)LPP  Loca ...

  2. 病理分析常见数据集及常用模型方法总结

    病理分析常见数据集及常用模型方法总结 目录 病理分析常见数据集 病理图像分类常见处理方法 病理图像常见数据集详细说明 相关论文梳理

  3. c3074 无法使用带圆括号的_小学生常见易考标点符号使用方法及练习(含答案)...

    小学生常见易考标点符号使用方法及练习(含答案)+标点符号相关的幽默小故事 你家的正在上小学的孩子会正确使用标点符号吗?答案我猜是不会,因为各学校在小学阶段都没有特别重视标点符号的教学,很多孩子平时使用 ...

  4. ASP.NET常见错误,原因及解决方法(2003版)_不断更新.....

    [标题]             ASP.NET常见错误,原因及解决方法[错误提示]    异常详细信息: System.Net.WebException: 请求因 HTTP 状态 401 失败:Un ...

  5. 伺服驱动器接线怎么画_百格拉伺服驱动器维修常见故障现象及处理方法

    百格拉维修故障方法如下 百格拉维修故障方法如下: 1.增加伺服驱动器的减速时间.有些时候也没法判断到底是不是数控系统本身故障百格拉伺服驱动器报警故障维修 或者要在基本设置下更改参数设置,请务必输入相应 ...

  6. 常见SMT极性元器件识别方法(图解)

    简 介: 这是整理自公号"电子工程师笔记"上的一篇推文 常见SMT极性元器件识别方法(图解) . 关键词: 元器件,封装极性   极性元件在整个PCBA加工过程中需要特别注意,因为 ...

  7. 360p4虚拟服务器,360安全路由p4c常见的问题以及解决方法介绍

    360安全路由p4c在使用的时候会遇到哪些问题呢?360安全路由p4c在使用的时候操作并不是很复杂,但是对于新手用户来说还是有点难度的,接下来的文章中小编将介绍使用这款路由器遇到的五大问题及其姐姐方法 ...

  8. 连接被远程计算机621,拨号上网常见错误代码提示及解决方法

    错误代码提示及解决方法 1.错误 678 问题:线路故障问题,不能进行连接,连接被远程计算机关闭,远程计算机没有响应 原因:网线接触不好或其它线路故障. 解决:自行检查网线的连接是否出现接触不良的情况 ...

  9. 机器学习中常见的过拟合解决方法

    机器学习中常见的过拟合解决方法 参考文章: (1)机器学习中常见的过拟合解决方法 (2)https://www.cnblogs.com/jiangxinyang/p/9281107.html 备忘一下 ...

最新文章

  1. redis主从复制如何保证数据一致性_面试官:Redis 主从复制时网络开小差了怎么整?...
  2. 应用场景的多样,奠定了区块链的未来
  3. XDOC云服务API(二)
  4. powerdesigner中生成数据库脚本时出现长度限制问题的解决方法
  5. css 禁止录入中文
  6. [30期] 第一个项目总结-—数码黑店在这一年开张
  7. 利用武汉市遥感影像进行土地利用分类分析
  8. vue echarts在中国地图让某个省份凸起
  9. 硬件工程师基本元器件类复习——三极管
  10. 下钻图生成 highcharts-column-drilldown
  11. 拼音打字时不定时出现重复字母
  12. 形式语言与自动机 Part 3.有限自动机
  13. 流量分析(安恒八月月赛)
  14. 好用的平板触控笔,apple pencil的平替笔推荐
  15. 软考笔记——5.2网络安全技术
  16. 2018年6月编程语言tiobe排行
  17. conda env create -f environment.yml 出现Package XX conflicts for:
  18. 苹果变了:Mac 用自研芯片、iPhone 替代车钥匙
  19. 《零基础入门学习Python》第063讲:论一只爬虫的自我修养11:Scrapy框架之初窥门径
  20. Arduino开发实例-DIY酒精浓度检测计

热门文章

  1. python week 获取 星期 第几周 开始日期 结束日期 星期几
  2. 你因为拖延症,错过了什么?
  3. 逍遥安卓模拟器下载|逍遥安卓模拟器个人版下载
  4. 上线十个月后,终于看懂视频号对于微信的意义
  5. 小程序 朋友圈,点赞 ,评论,发布动态,功能,上传图片 -----发布动态
  6. SSL2811 2017年10月30日提高组T2 摘Galo(树形dp)
  7. [Erlang危机](3.1)常见过载情景
  8. 被孙杨遮挡LOGO的安踏,到底做错了什么?
  9. C语言初步入门学习大略
  10. 【你知道路由重分布吗】