IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 1.Torchvision -> 正文阅读

[人工智能]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

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:23:46  更:2022-07-17 16:27:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:52:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码