发布于2019-12-07 22:53 阅读(1051) 评论(0) 点赞(20) 收藏(0)
上一篇博客讲解了如何组织自己的数据集,这节讲解如何对数据集进行一系列的预处理操作,即Transform。
该API将多个 transform 组合起来对数据进行预处理,其中参数 transforms 是由 transform 构成的列表。
现在举一个例子,先看原始图片:
接着对这个图片进行预处理操作 ToTensor(),即将 PILImage 或者 numpy 的 ndarray 转化成 Tensor。
import torch
import torchvision
import torchvision.transforms as transforms
import cv2
import numpy as np
from PIL import Image
img_path = "./data/train/Daffodil/image_0001.jpg"
# transforms.ToTensor()
transform1 = transforms.Compose([
transforms.ToTensor(), # range [0, 255] -> [0.0,1.0]
]
)
# Way1
# numpy.ndarray --> tensor
img = cv2.imread(img_path) # 读取图像, returned 500*689*3 (H * W * channel),数值[0, 255]
print("img type", type(img), img.shape)
img1 = transform1(img) # 归一化到 [0.0,1.0], img1 is a returned tensor, torch.Size([3, 500, 689])
print("img type after ToTensor transform", type(img1), img1.size())
# 转化为numpy.ndarray并显示
img_1 = img1.numpy()*255
img_1 = img_1.astype('uint8')
img_1 = np.transpose(img_1, (1,2,0))
cv2.imshow('img_1', img_1) # cv2.imshow() input shape: (H * W * channel)
cv2.waitKey()
# Way2
# PIL --> tensor
img = Image.open(img_path).convert('RGB') # 读取图像
img2 = transform1(img) # 归一化到 [0.0, 1.0]
print("img type after ToTensor transform", type(img2), img2.size())
# 转化为PILImage并显示
img_2 = transforms.ToPILImage()(img2).convert('RGB')
print("type", img_2)
img_2.show()
注意:shape为 (H,W,C) 的numpy.ndarray,转换成 size 为 [C,H,W]的 tensor ,并且 tensor 的取值范围是[0, 1.0]。通道数在第一个维度
至于为什么对数据使用 transforms.Normalize() 变换到 [-1, 1],请读者自行思考!
作者:大壮
链接:https://www.pythonheidong.com/blog/article/170258/08bdbe31d0373d12945d/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!