简介
tprchvision是 P y T o r c h PyTorch PyTorch的一个图形库,其服务于 P y T o r c h PyTorch PyTorch的深度学习框架,主要用来构建计算机视觉模型,torchvision主要用于常见的一些图形变换,以下是 t o r c h v i s i o n torchvision torchvision的构成:
- 1.torchvision.datasets: 一些加载的数据函数及常用的数据接口.
- 2.torchvision.models: 包含常用的模型结构: (含预训练模型) 例如AlexNet、VGG、ResNet等;
- 3.torchvision.transforms: 常用的图片变换,裁剪旋转等.
- 4.torchvision.utils: 其他的一些有用的方法。
本文的主题其中是 t o r c h v i s i o n . t r a n s f o r m s . C o m p o s e ( ) torchvision.transforms.Compose() torchvision.transforms.Compose()类,
这个类主要作用是,串联多个图片变换的操作.这个类构造很简单.
class torchvision.transforms.Compose(transforms):
# Composes several transforms together.
# Parameters: transforms (list of Transform objects) – list of transforms to compose.
Example # 可以看出Compose里面的参数实际上就是个列表,而这个列表里面的元素就是你想要执行的transform操作。
>>> transforms.Compose([
>>> transforms.CenterCrop(10),
>>> transforms.ToTensor(),])
事实上, C o m p s e ( ) Compse() Compse()类会将transform列表里面的transform操作进行遍历,实现代码很简单.
## 这里对源码进行了部分截取。
def __call__(self, img):
for t in self.transforms:
img = t(img)
return img
from torchvision import transforms
from PIL import Image
# 常用的数据变换器
resize = 224
tf = transforms.Compose([
lambda x:Image.open(x).convert('RGB'), # 1.string path= > image data 并转换为RGB图像
transforms.Resize( # 2.对图像进行缩放操作
(int(resize * 1.25), int(resize * 1.25))),
transforms.RandomRotation(15), # 3.进行随机旋转
transforms.CenterCrop(resize), # 4.进行中心裁剪防止旋转后边界出现黑框部分
transforms.ToTensor(), # 5.0-255RGB值映射至0-1
transforms.Normalize(mean=[0.485, 0.456, 0.406], # 归一化至[-1,1] mean std 来自imagenet 计算
std=[0.229, 0.224, 0.225])
])
img_path = './train/empty/spot1.jpg'
print(type(img_path))
a = Image.open(img_path)
print(type(a))
img = tf(img_path)
print(type(img))
<class 'str'>
<class 'PIL.JpegImagePlugin.JpegImageFile'>
<class 'torch.Tensor'>
总结
慢慢的将各种操作进行Compose进行变换,会自己理解其参数含义,然后用于自己的代码中,都行啦的理由与打算.