学习记录:👇
关于图像处理
图片有不同的输入格式:
(1)PIL image
(2)tensor image:
·单独的tensor image的形状:(C, H, W)。【C:channel数,H:height ,W:width】
·一个batch的Tensor images的形状:(N, C, H, W)。【N:batch中图片的数量】
(3)Numpy image:(H,W,C)
torchvision库——transforms(对图片进行处理)
(有两种:torchvision.transforms,torchvision.transforms.v2(后者是升级版))
例:
import torchvision.transforms as transforms
1、torchvision库的torchvision.transforms.Compose()类
使用transforms.Compose(transforms)将多个transforms操作组合起来用
某某某=transforms.Compose([
一些操作
])
例如:
transform_1 = transforms.Compose([
transforms.RandomResizedCrop(参数),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize(参数)])
具体的transforms操作有很多种:
(1)transforms.RandomResizedCrop():裁剪图像的随机部分,并将其调整为给定大小
包含的参数:
·size:裁剪输出的尺寸。如果尺寸是一个 int 而不是序列(h, w),则会输出一个正方形尺寸(int, int)
·scale:scale=(0.5, 1.0)裁剪随机区域的上下限最少是图片的50%(面积范围的图),最多是原始的整张图
·ratio:图片高宽比范围
·interpolation:缩放图片时使用的插值方法(估计图像中未知像素值)【包括:PIL.Image.NEAREST最近邻插值、PIL.Image.BILINEAR双线性插值、PIL.Image.BICUBIC双三次插值】
(2)transforms.RandomHorizontalFlip():以给定概率随机水平翻转图像,默认值0.5
(3)transforms.ToTensor()
(4)transforms.Normalize():用平均值和标准差对张量图像进行归一化处理。此变换不支持 PIL 图像,所以这步上面要进行transforms.ToTensor()操作
·给定 n 个通道的均值:(mean[1],...,mean[n])和标准差:(std[1],...,std[n]),此变换将对输入张量的每个通道进行归一化处理,即输出[通道] = (输入[通道] - 均值[通道]) /标准差[通道]
(5)transforms.Resize([h, w]):指定PILImage的高宽值
torchvision库——Datasets
1、datasets.ImageFolder
datasets.ImageFolder(root, transform)
·root:路径
·transform: 接收 PIL 图像,进行transform操作,返回操作后的图像
torch.utils.data.random_split(dataset, lengths)
#随手记:·(python)
__getitem__
方法允许对象使用索引(如列表或字典)来访问其元素
__len__
方法允许对象使用 len()
函数来获取其长度
class MyList:
def __init__(self, data):
self.data = data
def __getitem__(self, index):
return self.data[index]
def __len__(self):
return len(self.data)
my_list = MyList([1, 2, 3, 4])
print(my_list[1]) # 输出: 2
print(len(my_list)) # 输出: 4
·os.path
os.path.join
import os
path = os.path.join('dir1', 'dir2', 'file.txt')
print(path) # 'dir1/dir2/file.txt' 或 'dir1\dir2\file.txt'