PyTorch概述(一)---图像变换和增强

TorchVision

  • torchvision 包由流行的数据集、模型架构以及用于计算机视觉的通用图片转换工具组成

TorchVision 包构成

  • 图像变换和增强
  • TVTensors
  • 模型和预训练的权重
  • 数据集
  • 工具
  • 操作
  • 图像和视频的编/解码
  • 用于模型检测的特征提取

图像变换和增强

  • torchvision支持通用的计算机视觉变换;
  • 变换可用于数据增强、训练和推理;
  • 用于图片分类,探测,分割,视频分类等;
  • 大部分变换接收PIL图像和张量格式的输入;
  • 基于性能的考虑推荐以张量的型式输入;
  • 张量图像的期望形状为:(C,H,W);
  • 大部分变换支持批量的张量输入;
  • 批量张量图像的形状为(N,C,H,W),N为批量数目;
  • V2变换接收任意数值作为前导维度(...,C,H,W),可以批量处理图像或视频;
  • CPU和CUDA张量都给与支持;

数据类型和期望的范围

  • 张量图像的值范围被张量dtype隐式的定义;
  • 具有float类型的张量图像的值范围期望为【0,1】;
  • 具有integer类型的张量图像的值范围期望为【0,max_dtype】;
  • 典型的torch.uint8类型的图像期望的值范围为【0,255】;

V1 or V2?

  • 推荐使用V2;
  • V2更快,功能更为丰富;
  • V2的特点:
  • 可以变换图像、边界框、掩膜或者视频;
  • 对图像分类之外的任务提供支持:检测、分割、视频分类;
  • 支持更多的变换,比如:CutMix和MixUp;
  • 更快;
  • 支持任意的输入结构(字典、列表,元组等);
  • 后续只对V2的进行功能更新;
  • 完全向后兼容V1;

考虑性能

  • 推荐使用V2:torchvision.transforms.v2
  • 使用张量输入而不是PIL图像;
  • 使用torch.uint8数据类型,尤其是对于resizing操作;
  • resize操作推荐使用bilinear或者bicubic;

典型的变换流水线

from torchvision.transforms import v2
transforms=v2.Compose([v2.ToImage(),#Convert to tensor,only needed if you had a PIL imagev2.ToDtype(torch.uint8,scale=True),#optional,most input are already uint8 at this pointv2.RandomResizeCrop(size=(224,224),antialias=True),#Or Resize(antialias=True)v2.ToDtype(torch.float32,scale=True),#Normalize expects float inputv2.Normalize(mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225])])
  • 在num_workers>0的torch.utils.data.DataLoader的模块作用下,上述代码将给出典型训练环境中的最好性能;
  • 变换对输入步长、内存格式敏感;
  • 一些变换对于通道在前的图像具有更快的性能;
  • 另一些对通道在后的图像具有更快的性能;
  • 变换对于tensor的操作,将保持输入的格式,但根据具体情况,这也不总是期望的;
  • 如果追求更快的性能,可能需要自己去尝试;
  • 单个变换使用torch.compile()可帮助分解内存格式变量;
  • 类似于Resize和RandomResizedCrop的变换,倾向于通道最后的输入,且torch.compile()没有任何优势;

变换类、函数和内核

  • 像Resize这样的变化可以作为类来使用;
  • 同时对于torchvision.transforms.v2.functional中的resize()函数也可作为类来使用;
  • 以上两种情况类似于torch.nn包,同时定义了类和功能等效的函数在torch.nn.functional中;
  • 函数的功能支持PIL图像,纯张量格式的输入或者TVTensors;
  • resize(imgae_tensor)和resize(boxes)都是有效的;
  • 像RandomCrop这样的随机变换当每次被调用时会随机采样参数;
  • 但是他们的函数等效(crop())不做任何随机采样,因此具有稍有不同参数;
  • 当使用函数API时,get_params()变换类方法被用于执行参数采样;
  • torchvision.transforms.v2.functional命名空间也包含称为kernel的对象;
  • 这些是低级别的函数实现核心的功能用于特定的类型,比如:resize_bounding_boxes和resized_crop_mask;
  • 虽然没有记录,但他们是公开的;
  • 如果你要想获得torchscipt support用于bounding box 或mask类型的话,kernel是十分有用的;

Torchscript 支持

  • 很多变换类和函数支持torchscript;
  • 对于组合变换,使用torch.nn.Sequential而不是Compose:
transforms=torch.nn.Sequential(CenterCrop(10),Normalize((0.485,0.456,0.406),(0.229,0.224,0.225)))
scripted_trtansforms=torch.jit.script(transforms)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/697278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot+vue的车辆管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

获取淘宝商品详情API、商品主图、图片搜索api

获取淘宝详情API的方式有以下几种: 使用淘宝开放平台提供的接口:淘宝开放平台提供了多个API接口,让开发者可以通过接口获取商品详情信息。你可以到淘宝开放平台官网申请开发者账号,并查看相关接口文档,了解如何使用接…

C语言翻译环境:预编译+编译+汇编+链接详解

目录 翻译环境和运行环境 翻译环境 预处理(预编译) 编译 词法分析 语法分析 语义分析 汇编 链接 运行环境 ⭐翻译环境和运行环境 在ANSI C的任何⼀种实现中,存在两个不同的环境。 第1种是翻译环境,在这个环境中源代码被…

H桥逆变方式介绍(单极性)

H桥逆变电路实现的就是一个从DC——AC的过程 这个电路有两个时序,Q6Q4是一个导通时序,Q5Q7是一个导通时序 左边两个是高频20KHZ的、互补的sPWM波,右边是低频的50HZ的PWM波 三角波一般叫载波,正弦波叫调制波(单片机内…

Hbase和Clickhouse对比简单总结

Hbase和Clickhouse是两种不同的数据库系统,它们各自适用于不同的场景。以下是两者之间的对比: 数据模型: HBase 是一种基于列的存储系统,它适合处理大规模的数据集,特别是那些需要快速随机访问的场景。ClickHouse 则是…

对“绝地求生“源码调节

调整了一些界面和降低游戏难度 #include "c.h" using namespace std; ExMessage msg; struct ME {int x 100; int y 100; int life 1000; int knapsack[18]; int Maximum_ammunition_capacity 0;int Ammunition_capacity 0; int primary_weapon 0; int moveme…

springboot/ssm仓库管理系统Java货物出入库管理系统wms系统web

springboot/ssm仓库管理系统Java货物出入库管理系统wms系统web 基于springboot(可改ssm)vue项目 开发语言:Java 框架:springboot/可改ssm vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库&#xff1a…

Vi/Vim 使用小窍门,如何消除搜索后的关键字高亮

Vim/Vi 基本上是 *nix 世界最受欢迎的编辑器了,不知道为什么,一直以来觉得和 Emacs 比起来,Vim 更加有亲和力。用起来很舒服。 今天就记录一个困扰了我很久的问题。 大家应该都知道,在 Vi 里面如果要搜索某个关键字,…

C语言开发教程

C语言开发教程 电子书下载 下载地址 第一章 导言 1.1 入门 1.2 变量与算术表达式 1.3 for语句 1.4 符号常量 1.5 字符输入/输出 1.6 数组 1.7 函数 1.8 参数--传值调用 1.9 字符数组 1.10 外部变量与作用域 第二章 类型、运算符与表达式 2.1 变量名 2.2 数据类型及长度 2.3 常…

汽车会撞死人,应不应该限制汽车?

激进派表示事故率很低,损失相比汽车带来的收益不值一提,不能限制汽车 保守派表示行人什么也没有做错,却飞来横祸,只要发生一起事故,可能对一个家庭就是灭顶之灾,应该严格限制汽车 两边都有道理&#xff0c…

Python-pdfplumber读取PDF内容

文章目录 前言一、pdfplumber模块1.1 pdfplumber的特点1.2 pdfplumber.PDF类1.3pdfplumber.Page类 二 pdfplumber的使用2.1 加载PDF2.2 pdfplumber.PDF 类2.3 pdfplumber.Page 类2.4 读取PDF2.5 读取PDF文档信息2.6 查看总页数2.7 查看总页数读取第一页的宽度,页高等…

263集成客服系统:提升电商平台用户体验

{连接:无缝整合客服渠道} 在电子商务领域,客服是保持客户满意度和忠诚度的关键因素。263集成客服系统允许电商平台无缝连接到各种客服通道,包括在线聊天、电子邮件和社交媒体等。这种无代码开发方式不仅消除了传统API开发的复杂性&#xff…

使用Java调用Cplex求解带时间窗的车辆路径问题

使用Java调用Cplex求解VRPTW问题 一、带时间窗车辆路径优化问题(Vehicle Routing Problem with Time Window,VRPTW)1.1 问题描述1.2 模型构建 二、使用Java调用Cplex求解VRPTW问题2.1 完整代码2.2 求解结果 三、求解过程中踩的坑 一、带时间窗…

DevOps:实现软件开发与运维的协同革命

DevOps作为一种新型的软件开发和运维模式,在当今信息技术领域引起了广泛关注和应用。本文通过对DevOps的定义、原则、核心实践以及优势等方面进行探讨,旨在深入剖析DevOps对软件开发与运维的革命性影响,并从实践角度探讨其在现代软件开发中的…

VsCode编译wxWidgets的HelloWorld

wxWidgets 环境搭建 在wxWidgets 官网下载页面点击Download Windows Binaries选择TDM-GCC 10.3和MinGW-w64 8.1下的头文件和开发包进行下载。这儿我们会用两种 gcc 编译器进行对比,所以下载 2 个种编译器对应的库文件。正常只需根据自己安装的编译器下载对应的 1 种…

[每周一更]-(第88期):Nginx 之 proxy_pass使用详解

proxy_pass 指令用于指定后端服务器的地址,可以采用以下不同的格式: 直接指定地址和端口: location / {proxy_pass http://backend_server:8080; }这将请求代理到 http://backend_server:8080。 使用变量: location / {set $ba…

petalinux_zynq7 驱动DAC以及ADC模块之五:nodejs+vue3实现web网页波形显示

前文: petalinux_zynq7 C语言驱动DAC以及ADC模块之一:建立IPhttps://blog.csdn.net/qq_27158179/article/details/136234296petalinux_zynq7 C语言驱动DAC以及ADC模块之二:petalinuxhttps://blog.csdn.net/qq_27158179/article/details/1362…

flutter开发实战-手势Gesture与ListView滚动竞技场的可滑动关闭组件

flutter开发实战-手势Gesture与ListView滚动竞技场的可滑动关闭组件 最近看到了一个插件,实现一个可滑动关闭组件。滑动关闭组件即手指向下滑动,组件随手指移动,当移动一定位置时候,手指抬起后组件滑出屏幕。 一、GestureDetect…

大保司保费贵,是否物有所值?

《大保司保费贵,是否物有所值》 这是罗师兄的原创文章 预计8-9分钟读完 作者:罗师兄 微信号:luoyun515 当我们想要买一份重疾险、储蓄险等长期险时, 我们会发现,同样的保障责任和保额, 不同保险公司的…

基于AdaBoost算法的情感分析研究-微博情感分析-文本分类

基于AdaBoost算法的情感分析研究 摘 要 随着互联网的快速发展,各类社交媒体平台如微信、QQ等也与日俱增,而微博更是集成了传统网站、论坛、博客等的优点,并加上了人与人之间的互动性、关系亲密程度等多种智能算法,并以简练的形式…