TorchVision Transforms API 大升级,支持目标检测、实例/语义分割及视频类任务

2023/11/30 8:19:49

内容导读:TorchVision Transforms API 扩展升级,现已支持目标检测、实例及语义分割以及视频类任务。新 API 尚处于测试阶段,开发者可以试用体验。

本文首发自微信公众号:PyTorch 开发者社区

在这里插入图片描述

TorchVision 现已针对 Transforms API 进行了扩展, 具体如下:

  • 除用于图像分类外,现在还可以用其进行目标检测、实例及语义分割以及视频分类等任务;

  • 支持从 TorchVision 直接导入 SoTA 数据增强,如 MixUp、 CutMix、Large Scale Jitter 以及 SimpleCopyPaste。

  • 支持使用全新的 functional transforms 转换视频、Bounding box 以及分割掩码 (Segmentation Mask)。

Transforms 当前的局限性

稳定版 TorchVision Transforms API,也也就是我们常说的 Transforms V1,只支持单个图像,因此,只适用于分类任务:

from torchvision import transforms
trans = transforms.Compose([
   transforms.ColorJitter(contrast=0.5),
   transforms.RandomRotation(30),
   transforms.CenterCrop(480),
])
imgs = trans(imgs)

上述方法不支持需要使用 Label 的目标检测、分割或分类 Transforms, 如 MixUp 及 cutMix。这使分类以外的计算机视觉任务都不能用 Transforms API 执行必要的扩展。同时,这也加大了用 TorchVision 原语训练高精度模型的难度。

为了克服这个局限性,TorchVision 在其 reference script 中提供了自定义实现, 用于演示所有任务中的增强是如何执行的。

尽管这种做法使得开发者能够训练出高精度的分类、目标检测及分割模型,但做法比较粗糙,TorchVision 二进制文件中还是不能导入 Transforms。

全新的 Transforms API

Transforms V2 API 支持视频、bounding box、label 以及分割掩码, 这意味着它为许多计算机视觉任务提供了本地支持。新的解决方案是一种更为直接的替代方案:

from torchvision.prototype import transforms
# Exactly the same interface as V1:
trans = transforms.Compose([
    transforms.ColorJitter(contrast=0.5),
    transforms.RandomRotation(30),
    transforms.CenterCrop(480),
])
imgs, bboxes, labels = trans(imgs, bboxes, labels)

全新的 Transform Class 无需强制执行特定的顺序或结构,就可以接收任意数量的输入:

# Already supported:
trans(imgs)  # Image Classification
trans(videos)  # Video Tasks
trans(imgs_or_videos, labels)  # MixUp/CutMix-style Transforms
trans(imgs, bboxes, labels)  # Object Detection
trans(imgs, bboxes, masks, labels)  # Instance Segmentation
trans(imgs, masks)  # Semantic Segmentation
trans({"image": imgs, "box": bboxes, "tag": labels})  # Arbitrary Structure
# Future support:
trans(imgs, bboxes, labels, keypoints)  # Keypoint Detection
trans(stereo_images, disparities, masks)  # Depth Perception
trans(image1, image2, optical_flows, masks)  # Optical Flow

functional API 已经更新,支持所有输入必要的 signal processing kernel,如 resizing, cropping, affine transforms, padding 等:

from torchvision.prototype.transforms import functional as F
# High-level dispatcher, accepts any supported input type, fully BC
F.resize(inpt, resize=[224, 224])
# Image tensor kernel
F.resize_image_tensor(img_tensor, resize=[224, 224], antialias=True)
# PIL image kernel
F.resize_image_pil(img_pil, resize=[224, 224], interpolation=BILINEAR)
# Video kernel
F.resize_video(video, resize=[224, 224], antialias=True)
# Mask kernel
F.resize_mask(mask, resize=[224, 224])
# Bounding box kernel
F.resize_bounding_box(bbox, resize=[224, 224], spatial_size=[256, 256])

API 使用 Tensor subclassing 来包装输入,附加有用的元数据,并 dispatch 到正确的内核。 利用 TorchData Data Pipe 的 Datasets V2 相关工作完成后,就不再需要手动包装输入了。目前,用户可以通过以下方式手动包装输入:

from torchvision.prototype import features
imgs = features.Image(images, color_space=ColorSpace.RGB)
vids = features.Video(videos, color_space=ColorSpace.RGB)
masks = features.Mask(target["masks"])
bboxes = features.BoundingBox(target["boxes"], format=BoundingBoxFormat.XYXY, spatial_size=imgs.spatial_size)
labels = features.Label(target["labels"], categories=["dog", "cat"])

除新 API 之外,PyTorch 官方还为 SoTA 研究中用到的一些数据增强提供了重要实现,如 MixUp、 CutMix、Large Scale Jitter、 SimpleCopyPaste、AutoAugmentation 方法以及一些新的 Geometric、Colour 和 Type Conversion transforms。

该 API 继续支持 single image 或 batched input image 的 PIL 和 Tensor 后端,并在 functional API 上保留了 JIT-scriptability。这使得图像映射得以从 uint8 延迟到 float, 带来了性能的进一步提升。

它目前可以在 TorchVision 的原型区域 (prototype area) 中使用,并且支持从 nightly build 版本中导入。经验证,新 API 与先前实现的准确性一致。

当前的局限性

functional API (kernel) 仍然保持 JIT-scriptable 及 fully-BC,Transform Class 提供了相同的接口,却无法使用脚本。

这是因为 Transform Class 使用的是张量子类 (Tensor Subclassing),且接收任意数量的输入,这是 JIT 所不支持的。该局限将在后续版本中不断优化。

一个端到端示

以下是一个新 API 示例,它可以同时使用 PIL 图像和张量。

测试图片:

在这里插入图片描述
代码示例:

import PIL
from torchvision import io, utils
from torchvision.prototype import features, transforms as T
from torchvision.prototype.transforms import functional as F
# Defining and wrapping input to appropriate Tensor Subclasses
path = "COCO_val2014_000000418825.jpg"
img = features.Image(io.read_image(path), color_space=features.ColorSpace.RGB)
# img = PIL.Image.open(path)
bboxes = features.BoundingBox(
    [[2, 0, 206, 253], [396, 92, 479, 241], [328, 253, 417, 332],
     [148, 68, 256, 182], [93, 158, 170, 260], [432, 0, 438, 26],
     [422, 0, 480, 25], [419, 39, 424, 52], [448, 37, 456, 62],
     [435, 43, 437, 50], [461, 36, 469, 63], [461, 75, 469, 94],
     [469, 36, 480, 64], [440, 37, 446, 56], [398, 233, 480, 304],
     [452, 39, 463, 63], [424, 38, 429, 50]],
    format=features.BoundingBoxFormat.XYXY,
    spatial_size=F.get_spatial_size(img),
)
labels = features.Label([59, 58, 50, 64, 76, 74, 74, 74, 74, 74, 74, 74, 74, 74, 50, 74, 74])
# Defining and applying Transforms V2
trans = T.Compose(
    [
        T.ColorJitter(contrast=0.5),
        T.RandomRotation(30),
        T.CenterCrop(480),
    ]
)
img, bboxes, labels = trans(img, bboxes, labels)
# Visualizing results
viz = utils.draw_bounding_boxes(F.to_image_tensor(img), boxes=bboxes)
F.to_pil_image(viz).show()

—— 完 ——


http://www.jnnr.cn/a/116494.html

相关文章

基于SSM实现的演唱会网上订票系统-JAVA【数据库设计、毕业设计、源码、开题报告】

​​源码下载地址:​​https://download.csdn.net/download/itrjxxs_com/22174377​​​​​ 绪论 研究背景 随着时代的发展,信息化进程不断加快,人们的工作和生活已经逐步进入到了信息化时代。演唱会网上订票系统,是以销售管理为…

将uc/OS移植到stm32F103上实现LED灯和串口操作

文章目录一、建立一个HAL库二、移植过程三、配置代码四、效果五、总结六、参考资料一、建立一个HAL库 默认你已经创建了项目,下面进行项目配置。 时钟RCC配置,将HSE选为外部晶振模式 SYS设置,选择Serial Wire模式。 串口设置 时钟树设置…

【flexbox弹性布局学习指南】CSS热门布局方案

【flexbox弹性布局学习指南】CSS热门布局方案 文章目录【flexbox弹性布局学习指南】CSS热门布局方案一、弹性布局的诞生背景二、基础知识和术语三、弹性盒属性3.1 父级 (弹性容器)的属性3.1.1 展示3.2 弹性方向3.3 弹性包装3.4 弹性流动3.5 证明内容3.6 …

web前端期末大作业:旅游网页设计与实现——个人旅游博客(4页)HTML+CSS

👨‍🎓学生HTML静态网页基础水平制作👩‍🎓,页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码,这是一个不错的旅游网页制作,画面精明,排版整洁,内容…

【博学谷学习记录】超强总结,用心分享|架构师-设计模式 1

文章目录一、什么是设计模式?二、SOLID原则2.1 单一职责原则(SRP)2.2 开闭原则(OCP)一、什么是设计模式? 设计模式是一种思想,是一套被反复使用、多数人知晓的、经过分类编写、代码设计经验的总…

JAVA 基础网络编程(后一部分)

目录 一.基于TCP协议的Socket编程 一、Socket类和ServerSocket类 1. Socket类 2. ServerSocket类 二、 使用Socket编程实现登录功能 1. 实现单用户登录 2. 实现多客户端用户登录 3. InetAddress类 二.基于UDP协议的Socket编程 一、DatagramPacket类和DatagramSocket类…

android log

可以在android studio 终端 输出相应信息,比sys好用多了 增加了级别与标签,可以过滤出来 打开logcat界面 logcat过滤 过滤级别 过滤标签 logcat输出 Log.X(tag,msg) v- verbose(啰嗦) d-debug(调试输出) i-information(信息) w-warning&#xf…

ubuntu 18.04 安装jdk

ubuntu 安装 jdk 提示:注意版本为18.0.4,不同版本可能稍有不同 文章目录ubuntu 安装 jdk[TOC](文章目录)前言一、安装方式二、使用步骤1.openjdk2.oracle jdk总结前言 最近公司项目需要迁移服务器,正好借着这个机会将服务器的搭建做一个记录…

猿创征文| 六款我的开发者宝藏工具箱

目录 No.1 | 亿图图示 简介: 推荐之处: 下载途径: Show time: No.2 | 飞书 简介: 推荐之处: 下载途径: Show time: No.3 | 迅捷PDF转换器 简介: 推荐之处: …

校招失败后,在小公司熬了 2 年终于进了华为,竭尽全力....

其实两年前校招的时候就往华为投了一次简历,结果很明显凉了,随后这个理想就被暂时放下了,但是这个种子一直埋在心里这两年除了工作以外,也会坚持写博客,也因此结识了很多优秀的小伙伴,从他们身上学到了特别…

码住收藏 ▏软件测试报告应该包含哪些内容?

软件测试报告是指把软件产品测试的过程和结果写成文档,对发现的问题和缺陷进行分析,为纠正软件存在的质量问题提供依据,同时为软件验收和交付打下基础,是整个测试活动结束之后由测试人员编写的总结性文件。 一、软件测试报告应该包…

字符转字节数组与Base64

文章目录字符转字节数组与Base64字符转字节数需求原理解决过程单字符多字符转码Base64用处原理示例实现过程完整代码参考附字符转字节数组与Base64字符转字节数需求 与接口交互时需要转成字节数组,然后Java在根据字节数组转成对应字符。 public class Test {publi…

Redhat(8)-日志架构-systemd-journald-rsyslog-logrotate

1.syslog 日志文件 1.systemd-journald 服务 2.rsyslog 服务 4.logrotate 服务 操作系统的日志结构如下: 1.syslog 功能: 权限: 示例: .: 除了后面的3个外都显示出来。 mail这条是异步。 local7.*是自定义的。 vim .ssh/confi…

阿里云服务器安全组开放指定端口无法访问问题记录

前言 最近新上线项目,决定启用新的阿里云服务器,服务端项目打包之后部署到服务器,项目正常启动,在阿里云控制台开放指定端口之后接口访问不通,这里记录一下出现的问题的原因以及处理方案. 问题处理过程 首先说按照之前的新项目部署流程,服务端代码本地自测完成之后进行打包,部…

Android中使用枚举的来来去去

简单记录一下枚举的使用和替换(貌似没有任何关系哈......);文章的主要内容包括以下几个部分 学习和记录的原因静态常量标识的使用枚举替换静态常量以及扩展使用注解替换枚举好了,下面就来逐一讲述一下。 1, 学习和记录…

MaxENT生态位模型:建模、参数优化、个性化分析

MaxEnt模型基于最大熵原理,即在满足已知约束的条件下,选择熵最大的模型,它利用物种的存在分布点和环境变量,来推算物种的生态需求和模拟物种的潜在分布。MaxEnt由于其简单直接的操作、简洁清晰的图形界面及参数自动配置的功能&…

java经典面试题并发篇(持续更新)

文章目录一. 线程状态1.1 java的六种线程状态1.2 操作系统五种状态二.线程池核心参数三. 并发篇其他知识3.1 sleep 和wait3.2 lock和synchronized3.2 公平锁3.3 lock条件变量3.3 volatile3.3.1原子性3.3.2 可见性3.3.3有序性3.4 悲观锁和乐观锁3.4.1 乐观锁测试用例3.4.2 悲观锁…

AcWing 蓝桥杯AB组辅导课 06、双指针、BFS与图论

文章目录前言一、双指针知识点例题例题1:1238. 日志统计(中等,蓝桥杯)习题二、BFS知识点例题例题1:1101. 献给阿尔吉侬的花束【中等,信息学奥赛一本通】习题三、DFS例题1113. 红与黑【中等,信息…

等保测评FAQ

之前写过一篇关于等保测评的相关介绍《一起聊聊等保测评》,发现大家对于等保测评这个还是很关注的,有些人问等保测评这份工工作的,也有些人问关于等保测评一些指导意见的,这篇文章我想把大家的问题来总结一下,让大家对…

【SOLIDWORKS学习笔记】工程图基础操作

介绍:俗话说的好,电控决定机器人下限,机械决定机器人上限。作为一个在电控领域摸打滚爬了三年的选手,一直非常心动那些酷炫的机械模型,但是一直以来只能做甲方给别人提需求,做不到自己动手实现。所以我打算…
最新文章