当前位置: 首页 > news >正文

PyTorch使用技巧4:简单理解transforms.Compose()

在这里插入图片描述

torchvision是pytorch的一个图形库,它服务于PyTorch深度学习框架的,主要用来构建计算机视觉模型。torchvision.transforms主要是用于常见的一些图形变换。以下是torchvision的构成:

torchvision.datasets: 一些加载数据的函数及常用的数据集接口;
torchvision.models: 包含常用的模型结构(含预训练模型),例如AlexNet、VGG、ResNet等;
torchvision.transforms: 常用的图片变换,例如裁剪、旋转等;
torchvision.utils: 其他的一些有用的方法。

参数:一个list数组,数组里是多个’Transform’对象,即[transforms, transforms…]。
所在环境路径:/opt/conda/lib/python3.6/site-packages/torchvision/transforms/transforms.py
操作:如下所示,遍历list数组,对img依次执行每个transforms操作,并返回transforms后的img。

def __call__(self, img):
    for t in self.transforms:
        img = t(img)
    return img

示例:

transforms.Compose([
    transforms.CenterCrop(10),
    transforms.ToTensor(),
])

案例分析:

transform1 = transforms.Compose(
    [
        transforms.ToTensor(),
        transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])

解释:
(1)transforms.Compose就是将transforms组合在一起;

(2)transforms.Normalize使用如下公式进行归一化:

channel=(channel-mean)/std(因为transforms.ToTensor()已经把数据处理成[0,1],那么(x-0.5)/0.5就是[-1.0, 1.0])

完整环境下的代码:

import math
import numbers
import random
import warnings
from collections.abc import Sequence
from typing import Tuple, List, Optional

import torch
from torch import Tensor

try:
    import accimage
except ImportError:
    accimage = None

from . import functional as F
from .functional import InterpolationMode, _interpolation_modes_from_int


__all__ = ["Compose", "ToTensor", "PILToTensor", "ConvertImageDtype", "ToPILImage", "Normalize", "Resize", "Scale",
           "CenterCrop", "Pad", "Lambda", "RandomApply", "RandomChoice", "RandomOrder", "RandomCrop",
           "RandomHorizontalFlip", "RandomVerticalFlip", "RandomResizedCrop", "RandomSizedCrop", "FiveCrop", "TenCrop",
           "LinearTransformation", "ColorJitter", "RandomRotation", "RandomAffine", "Grayscale", "RandomGrayscale",
           "RandomPerspective", "RandomErasing", "GaussianBlur", "InterpolationMode", "RandomInvert", "RandomPosterize",
           "RandomSolarize", "RandomAdjustSharpness", "RandomAutocontrast", "RandomEqualize"]


class Compose:
    """Composes several transforms together. This transform does not support torchscript.
    Please, see the note below.

    Args:
        transforms (list of ``Transform`` objects): list of transforms to compose.

    Example:
        >>> transforms.Compose([
        >>>     transforms.CenterCrop(10),
        >>>     transforms.ToTensor(),
        >>> ])

    .. note::
        In order to script the transformations, please use ``torch.nn.Sequential`` as below.

        >>> transforms = torch.nn.Sequential(
        >>>     transforms.CenterCrop(10),
        >>>     transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)),
        >>> )
        >>> scripted_transforms = torch.jit.script(transforms)

        Make sure to use only scriptable transformations, i.e. that work with ``torch.Tensor``, does not require
        `lambda` functions or ``PIL.Image``.

    """

    def __init__(self, transforms):
        self.transforms = transforms

    def __call__(self, img):
        for t in self.transforms:
            img = t(img)
        return img

    def __repr__(self):
        format_string = self.__class__.__name__ + '('
        for t in self.transforms:
            format_string += '\n'
            format_string += '    {0}'.format(t)
        format_string += '\n)'
        return format_string


class ToTensor:
    """Convert a ``PIL Image`` or ``numpy.ndarray`` to tensor. This transform does not support torchscript.

    Converts a PIL Image or numpy.ndarray (H x W x C) in the range
    [0, 255] to a torch.FloatTensor of shape (C x H x W) in the range [0.0, 1.0]
    if the PIL Image belongs to one of the modes (L, LA, P, I, F, RGB, YCbCr, RGBA, CMYK, 1)
    or if the numpy.ndarray has dtype = np.uint8

    In the other cases, tensors are returned without scaling.

    .. note::
        Because the input image is scaled to [0.0, 1.0], this transformation should not be used when
        transforming target image masks. See the `references`_ for implementing the transforms for image masks.

    .. _references: https://github.com/pytorch/vision/tree/master/references/segmentation
    """

    def __call__(self, pic):
        """
        Args:
            pic (PIL Image or numpy.ndarray): Image to be converted to tensor.

        Returns:
            Tensor: Converted image.
        """
        return F.to_tensor(pic)

    def __repr__(self):
        return self.__class__.__name__ + '()'


class PILToTensor:
    """Convert a ``PIL Image`` to a tensor of the same type. This transform does not support torchscript.

    Converts a PIL Image (H x W x C) to a Tensor of shape (C x H x W).
    """

    def __call__(self, pic):
        """
        Args:
            pic (PIL Image): Image to be converted to tensor.

        Returns:
            Tensor: Converted image.
        """
        return F.pil_to_tensor(pic)

    def __repr__(self):
        return self.__class__.__name__ + '()'

参考资料

https://blog.csdn.net/qq_35037684/2
https://blog.csdn.net/wangkaidehao/article/details/104520022
https://www.cnblogs.com/xinkevinzhang/p/14321134.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 目标检测系列算法:YOLOv7代码复现
  • 微软word中的一个惊天大秘密
  • RTX30系列linux+docker容器的GPU配置(tensorflow-gpu==1.15~2.x、tensorrt 7、cuda、cudnn)附加resnet50模型测试
  • 目标检测系列算法:简单实现YOLO语音TTS报警系统(检测人员入侵室内或室外)
  • python使用技巧(三十):python保存本地npy与C++调用npy
  • 关于J2EE和.NET的争论(转载)
  • 目标检测系列算法:HybridNets端到端感知网络
  • 2004年7月2日
  • 好书推荐:智能交通系统中的计算机视觉和成像
  • BCB中AnsiString类方法总结
  • python使用技巧(三十一):一行代码清理你的linux运行程序后死机或卡顿的情况
  • BCB 编写 DLL 终极手册
  • Ubuntu安装ffmpeg音视频处理工具:联合解决cuda11+opencv4.6编译bug的问题(cap_ffmpeg_impl/opencv_videoioopencv_cuda*)
  • 【强力推荐】基于Nvidia-Docker-Linux(Ubuntu18.04)平台:新版OpenCV5.x(C++)联合CUDA11.1(GPU)完美配置视觉算法开发环境
  • 关于blog的作用的一些思考
  • JS 中的深拷贝与浅拷贝
  • 自己简单写的 事件订阅机制
  • 【前端学习】-粗谈选择器
  • Akka系列(七):Actor持久化之Akka persistence
  • CSS居中完全指南——构建CSS居中决策树
  • Docker: 容器互访的三种方式
  • express + mock 让前后台并行开发
  • Javascript设计模式学习之Observer(观察者)模式
  • 你不可错过的前端面试题(一)
  • 你真的知道 == 和 equals 的区别吗?
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 树莓派 - 使用须知
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​ssh免密码登录设置及问题总结
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #预处理和函数的对比以及条件编译
  • $.proxy和$.extend
  • ${ }的特别功能
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (十)T检验-第一部分
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)Java算法:二分查找
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • ****三次握手和四次挥手
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .gitignore
  • .net mvc 获取url中controller和action
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .NET技术成长路线架构图
  • .ui文件相关
  • @Pointcut 使用
  • [].slice.call()将类数组转化为真正的数组
  • [Angular] 笔记 6:ngStyle
  • [AutoSAR系列] 1.3 AutoSar 架构