pytorch框架(计算机视觉)一.数据增强

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值