1.Torchvision

Torchvision

from torchvision import models
from torchvision import datasets
from torchvision import ops
from torchvision import transforms
from torchvision import utils
from torchvision import io

Torchvision.datasets

支持下载/加载的数据集有几十种。每一个数据对应一个py文件,并且有相似的下载和载方法。

下载/载入CIFAR10数据集

# root 下载或载入路径
# train=True 载入训练集,False是验证集
# download=True 是否下载
# transform=transform对数据做处理
# target_transform=transform多标签进行处理,一般是分割和检测使用
train_set = torchvision.datasets.CIFAR10(
root='./data', train=True, download=True, transform=transform)

Torchvision.models

提供各种模型定义,包括图像分类如AlexNet、VGG等;对象检测如Faster R-CNN、Mask R-CNN等;分割、关键点检测等。

from .alexnet import *
from .resnet import *
from .vgg import *
from .squeezenet import *
from .inception import *
from .densenet import *
from .googlenet import *
from .mobilenet import *
from .mnasnet import *
from .shufflenetv2 import *
from . import segmentation
from . import detection
from . import video
from . import quantization

使用模型

from torchvision  import models
net = models.alexnet(pretrained=True)

Torchvision.ops

实现特定于计算机视觉的操作,如RoI(Region of Interest) Align、RoI(Region of Interest) Pool等。

Torchvision.transforms

实现图像变换。大多数转换同时接受PIL图像和tensor图像,尽管有些转换仅适用于PIL,有些则仅适用于tensor。接受tensor图像的转换也接受批量的tensor图像。tensor图像是具有(C, H, W)形状的tensor。
包含数据变换和数据增强

from .transforms import *
from .autoaugment import *

transforms

transforms作用
ToTensorConvert a PIL Image or numpy.ndarray to tensor. This transform does not support torchscript. ==并且像素范围从[0, 255] 变换到[0, 1] ==
ConvertImageDtype将张量图像转换为给定的 dtype 并相应地缩放值。一个参数dtype
ToPILImageConvert a tensor or an ndarray to PIL Image. This transform does not support torchscript. 一个参数mode 模式,具体再查询
Normalize用均值和标准差对张量图像进行归一化。不支持 PIL Image。 Args:mean (sequence): Sequence of means for each channel. std (sequence): Sequence of standard deviations for each channel. inplace(bool,optional): Bool to make this operation in-place.
ResizeResize the input image to the given size. 参数:size:缩放的图像尺度(,);interpolation:插值方法;max_size 调整后图像的较长边缘允许的最大值;antialias:很少用到
CenterCrop在中心裁剪给定的图像 ,参数:size (sequence or int)
Pad用给定的“pad”值填充给定图像的所有侧面。padding (int or sequence)
Lambda应用用户定义的 lambda 作为转换。此转换不支持 torchscript。
RandomTransforms具有随机性的变换列表的基类
RandomApply以给定的概率随机应用一系列变换。
RandomOrder以随机顺序应用转换列表。此转换不支持 torchscript。
RandomChoice应用从列表中随机选择的单个转换。此转换不支持 torchscript
RandomCrop在随机位置裁剪给定图像。
RandomHorizontalFlip以给定的概率随机水平翻转给定的图像。
RandomVerticalFlip以给定的概率随机垂直翻转给定的图像。
RandomPerspective以给定的概率对给定图像执行随机透视变换。
RandomResizedCrop裁剪图像的随机部分并将其调整为给定大小。
FiveCrop将给定的图像裁剪成四个角和中央裁剪。
TenCrop将给定的图像裁剪成四个角,中央裁剪加上这些的翻转版本(默认使用水平翻转)
LinearTransformation使用平方变换矩阵和离线计算的 mean_vector 变换张量图像。
ColorJitter随机改变图像的亮度、对比度、饱和度和色调
RandomRotation按角度旋转图像。
RandomAffine图像保持中心不变的随机仿射变换。
Grayscale将图像转换为灰度
RandomGrayscale以 p 的概率(默认 0.1)随机将图像转换为灰度。
RandomErasing在torch张量图像中随机选择一个矩形区域并擦除其像素。
GaussianBlur使用随机选择的高斯模糊来模糊图像。
RandomInvert以给定的概率随机反转给定图像的颜色
RandomPosterize通过减少每个颜色通道的位数,以给定的概率随机对图像进行后处理。
RandomSolarize通过反转高于阈值的所有像素值,以给定概率随机曝光图像
RandomAdjustSharpness以给定的概率随机调整图像的清晰度。如果图像是 Torch Tensor,它应该具有 […, 1 or 3, H, W] 形状,其中 … 表示任意数量的前导维度。
RandomAutocontrast以给定的概率随机自动对比给定图像的像素。
RandomEqualize以给定的概率随机均衡给定图像的直方图。
from torchvision import transforms
from PIL import Image
# 如何使用transforms
# 为什么需要tensor数据

img = Image.open("data/test.png")

# 转换为tnesor
img_tensor = transforms.ToTensor()(img)
# 因为ToTensor类中构造了__call__(self, pic)方法,可以将类的实例当作方法,座椅ToTensor()是类实例,然后调用__call__(img)

# normalize 归一化,
img_normalize = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])(img_tensor)  # (mean, std)因为图片三个通道,对每一个通道归一化
# 因为 Normalize函数的forward函数的return F.normalize(),返回的是一个函数,所以后面有(img_tensor)
# output[channel] = (input[channel] - mean[channel]) / std[channel]

# resize更改尺寸  输入PIL类型,返回的也是PIL类型, 输入的是tensor类型返回的也是tensor类型
img_resize = transforms.Resize((512, 512))(img)

# 随机裁剪
img_random_crop = transforms.RandomCrop(512, 512)(img)

# 组合处理, 注意[]列表里的方法输入输出的类型要对应.
trans_compose = transforms.Compose([
    transforms.Resize(512),  # 正方形
    transforms.ToTensor()
])(img)

# 不知道返回类型的时候可以print(type())
					

import os
import torch
from PIL import Image
from torchvision import transforms
import matplotlib.pyplot as plt
import torchvision
'''
torchvision.transforms是pytorch中的图像预处理包(图像变换),
一般用Compose把多个步骤整合到一起signal_trans
signal_trans: signal_trans
'''
def signal_trans():
    # 实例化transforms对象,用Compose整合多个操作
    data_transform = transforms.Compose(
        [transforms.Resize(256),
         transforms.CenterCrop(224),
         transforms.ToTensor(),
         transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])])
    # load image
    img_path = "../data/1.png"
    assert os.path.exists(img_path), "file: '{}' dose not exist.".format(img_path)
    img = Image.open(img_path)
    print("图片的size:{}".format(img.size))
    plt.imshow(img)
    plt.title("tulip")
    plt.show()
    # [C, H, W]
    img = data_transform(img)
    print("转换后的图片size:{}".format(img.size()))
    print("转换后的图片类型:{}".format(img.type()))
    img = torch.unsqueeze(img, dim=0)# expand batch dimension  [N, C, H, W]
    print("增加图片维度后的size:{}".format(img.size()))

def multi_trans():
    data_transform = {
        "train": transforms.Compose([transforms.RandomResizedCrop(224),
                                     transforms.RandomHorizontalFlip(),
                                     transforms.ToTensor(),
                                     transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])]),
        "val": transforms.Compose([transforms.Resize(256),
                                   transforms.CenterCrop(224),
                                   transforms.ToTensor(),
                                   transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])])}

    # 实例化官方训练数据集 ,第一次使用时要将download设置为True才会自动去下载数据集
    train_set = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=data_transform["train"])
    val_set = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=data_transform["val"])


    # # 实例化自己的训练数据集
    # train_dataset = MyDataSet(images_path=train_images_path,
    #                           images_class=train_images_label,
    #                           transform=data_transform["train"])
    #
    # # 实例化验证数据集
    # val_dataset = MyDataSet(images_path=val_images_path,
    #                         images_class=val_images_label,
    #                         transform=data_transform["val"])

if __name__ == '__main__':
    signal_trans()
    multi_trans()

autoaugment

谷歌在2018年提出通过AutoML来自动搜索数据增强策略,称之为AutoAugment(算是自动数据增强开山之作)。搜索方法采用强化学习,和NAS类似,只不过搜索空间是数据增强策略,而不是网络架构。在搜索空间里,一个policy包含5个sub-policies,每个sub-policy包含两个串行的图像增强操作,每个增强操作有两个超参数:进行该操作的概率和图像增强的幅度(magnitude,这个表示数据增强的强度,比如对于旋转,旋转的角度就是增强幅度,旋转角度越大,增强越大)。每个policy在执行时,首先随机从5个策略中随机选择一个sub-policy,然后序列执行两个图像操作。

from torchvision.transforms import autoaugment, transforms

train_transform = transforms.Compose([
    transforms.RandomResizedCrop(crop_size, interpolation=interpolation),
    transforms.RandomHorizontalFlip(hflip_prob),
    # 这里policy属于torchvision.transforms.autoaugment.AutoAugmentPolicy,
    # 对于ImageNet就是 AutoAugmentPolicy.IMAGENET
    # 此时aa_policy = autoaugment.AutoAugmentPolicy('imagenet')
    autoaugment.AutoAugment(policy=aa_policy, interpolation=interpolation),
 transforms.PILToTensor(),
    transforms.ConvertImageDtype(torch.float),
    transforms.Normalize(mean=mean, std=std)
 ])

Torchvision.utils

Torchvision.io

提供执行IO操作函数,用于读写视频和图像,输出的是tensor格式。不常用,

# 读写图像: torchvision.io包
img = io.read_image("./data/image/1.png")
print("img shape:", img.shape)
io.write_png(img, "./data/image/result.png")

参考网站

1

https://blog.csdn.net/qq_42244418/article/details/124210655#:~:text=torchvis,%E6%AD%A5%E9%AA%A4%E6%95%B4%E5%90%88%E5%88%B0%E4%B8%80%E8%B5%B7%E3%80%82

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`torch.ops.torchvision.deform_conv2d` 的默认参数如下: ```python def deform_conv2d( input, offset, weight, bias=None, stride=1, padding=0, dilation=1, groups=1, deform_groups=1, im2col_step=64, ): # 函数实现 ``` 参数含义如下: - `input`:输入张量。形状为 `(batch_size, in_channels, height, width)`。 - `offset`:偏移量张量。形状为 `(batch_size, deform_groups * 2 * kernel_size[0] * kernel_size[1], out_height, out_width)`。其中,`deform_groups` 表示分组卷积的数量,`kernel_size` 表示卷积核的大小,`out_height` 和 `out_width` 分别表示输出特征图的高度和宽度。 - `weight`:卷积核张量。形状为 `(out_channels, in_channels // groups, kernel_size[0], kernel_size[1])`。 - `bias`:偏置张量。形状为 `(out_channels,)`。默认值为 `None`,表示不使用偏置。 - `stride`:卷积的步幅。可以是一个整数或者是一个元组,例如 `(stride_h, stride_w)`。默认值为 `1`。 - `padding`:输入张量的填充大小。可以是一个整数或者是一个元组,例如 `(pad_h, pad_w)`。默认值为 `0`。 - `dilation`:卷积核的膨胀率。可以是一个整数或者是一个元组,例如 `(dilation_h, dilation_w)`。默认值为 `1`。 - `groups`:输入通道和输出通道之间的分组数。默认值为 `1`,表示不分组卷积。 - `deform_groups`:偏移量张量的分组数量。默认值为 `1`。 - `im2col_step`:im2col 操作的步长。默认值为 `64`,表示每次处理 `64` 个输入通道。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值