pytorch框架中一些代码的解释
预处理函数
class torchvision.transforms.Compose(transforms)
data_transforms = {
'train': transforms.Compose([
transforms.RandomSizedCrop(48),
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
transforms.Normalize([0.5,0.5,0.5], [0.5,0.5,0.5])
]),
'val': transforms.Compose([
transforms.Scale(image_size),
transforms.CenterCrop(crop_size),
transforms.ToTensor(),
transforms.Normalize([0.5,0.5,0.5], [0.5,0.5,0.5])
]),
}
Compose方法是将多种变换组合起来。
1.crop
裁剪(Crop)—— transforms.CenterCrop:中心裁剪:size:所需要裁剪的尺寸 transforms.RandomCrop:从图片中随机裁剪出尺寸为size的图片
transforms.RandomResizedCrop:随机大小、长宽比裁剪图像
transforms.FiveCrop:在图像上下左右以及中心裁剪出尺寸为size的5张图像
transforms.TenCrop:对裁剪的5张图像进行水平或垂直镜像获得10张图像
transforms.RandomCrop:
size:所需裁剪图像尺寸。
padding:填充大小: 当为a时,上下左右均填充为a个像素,当为(a,b)时,上下填充b个像素,左右填充a个像素,当为(a,b,c,d)时,左、上、右、下分别填充a,b,c,d。
pad_if_need:图像小于设定size,则填充。
padding_mode:填充模式,有四种模式。
1、constant:像素值由fill设定
2、edge:像素值由图像边缘像素决定。
3、reflect:镜像填充,最后一个像素不镜像,
eg:[1,2,3,4]——>[3,2,1,2,3,4,3,2]。
4、symmetric:镜像填充,最后一个像素镜像,
eg:[1,2,3 ,4 ] → [2,1,1,2,3,4,4 ,3 ]。
fill:constant时,设置填充的像素值。
transforms.RandomResizedCrop:
size:裁剪图像大小。
scale:随机裁剪面积比例,默认是(0.08,1)。
ratio:随机长宽比,默认(3/4,4/3)。
interpolation:插值方法,PIL.Image.Nearest\PIL.Image.Bilinear\PIL.Image.Bicubic
————————————————
原文链接:https://blog.csdn.net/weixin_43687366/article/details/107740433
transforms.RandomResizedCrop( ) 将给定图像随机裁剪为不同的大小和宽高比,然后缩放所裁剪得到的图像为制定的大小;(即先随机采集,然后对裁剪得到的图像缩放为同一大小)默认scale=(0.08, 1.0)
from PIL import Image
from torchvision import transforms
import matplotlib.pyplot as plt
img = Image.open(r"F:\code DVC\python image processing\hanli2.png")
print("原图大小:",img.size)
data1 = transforms.RandomResizedCrop(200)(img)
print("随机裁剪后的大小:",data1.size)
data2 = transforms.RandomResizedCrop(200)(img)
data3 = transforms.RandomResizedCrop(100)(img)
# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.subplot(2,2,1),plt.imshow(img),plt.axis('off'),plt.title("原图")
#plt.subplot(2,2,1)表示把显示界面分割成2*2的网格。
# 其中,第一个参数是行数,第二个参数是列数,第三个参数表示图形的标号。
plt.subplot(2,2,2),plt.imshow(data1),plt.axis('off'),plt.title("200图1")
plt.subplot(2,2,3),plt.imshow(data2),plt.axis('off'),plt.title("200图2")
plt.subplot(2,2,4),plt.imshow(data3),plt.axis('off'),plt.title("100图3")
plt.show()
2.翻转和旋转
翻转和旋转(Flip and Rotation)
依概率p水平翻转:transforms.RandomHorizontalFlip(p=0.5)
依概率p垂直翻转:transforms.RandomVerticalFlip(p=0.5)
随机旋转:transforms.RandomRotation
3.图像变换
transforms.Pad:对图像边缘进行填充
transforms.ColorJitter:修改图像亮度、对比度饱和度
transforms.Grayscale:转灰度图
transforms.RandomGrayscale:依概率转换为灰度图
transforms.RandomAffine:仿射变换
transforms.LinearTransformation:线性变换
transforms.RandomErasing:随机选择图像中的矩形区域并擦除其像素。 transforms.Lambda
transforms.Resize
transforms.ToTensor:转换为tensor向量
transforms.Normalize:标准化
(1).transform.Normalize经常看到
transform.ToTensor(),
transform.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))
以上面代码为例,ToTensor()能够把灰度范围从0-255变换到0-1之间,而后面的transform.Normalize()则把0-1变换到(-1,1).具体地说,对每个通道而言,Normalize执行以下操作:
image=(image-mean)/std
原文链接:https://blog.csdn.net/jzwong/article/details/104272600
4.transforms的操作
transforms.RandomChoice:从给定的一系列transforms中选一个进行操作
transforms.RandomApply:给一个transforms加上概率,以一定的概率执行该操作
transforms.RandomOrder:将transforms中的操作顺序随机打乱
原文链接:https://blog.csdn.net/weixin_43687366/article/details/107740433