博客

新 PyTorch 库发布,包括 TorchVision Mobile、TorchAudio I/O 等

作者 2021年3月4日2024年11月16日暂无评论

今天,我们宣布了多个 PyTorch 库的更新,以及 PyTorch 1.8 的发布。此次更新包括领域库(如 TorchVision、TorchText 和 TorchAudio)的新版本,以及 TorchCSPRNG 的新版本。这些版本包含许多新功能和改进,并与 PyTorch 1.8 版本一起,为 PyTorch 社区提供了广泛的更新,供大家构建和利用。

一些亮点包括:

  • TorchVision – 增加了对 PyTorch Mobile 的支持,包括 Detectron2Go (D2Go)、训练期间的数据自动增强 (Auto-augmentation)、即时类型转换以及 AMP 自动转换 (autocasting)
  • TorchAudio – 对 I/O 进行了重大改进,包括默认使用 sox_io 后端以及支持类文件对象。增加了 Kaldi Pitch 特征,并支持基于 CMake 的构建,使 TorchAudio 能更好地支持非 Python 环境。
  • TorchText – 更新了数据集加载 API,使其与标准的 PyTorch 数据加载工具兼容。
  • TorchCSPRNG – 对 PyTorch 的加密安全伪随机数生成器的支持现已趋于稳定,新增了 AES128 ECB/CTR 的 API 以及对 Windows 上 CUDA 的支持。

请注意,从 PyTorch 1.6 开始,功能被分类为 Stable(稳定版)、Beta(测试版)和 Prototype(原型版)。Prototype 功能不包含在二进制分发版中,而是通过源码编译、使用夜间构建版 (nightlies) 或通过编译器标志 (compiler flag) 来使用。您可以在 此处查看详细公告。

TorchVision 0.9.0

[Stable] TorchVision Mobile:算子、Android 二进制文件和教程

我们很高兴地宣布为 PyTorch 领域库提供首个设备端支持和二进制文件。我们观察到研究界和工业界对设备端视觉支持有着巨大的需求,以实现低延迟、保护隐私且资源高效的移动端视觉体验。您可以按照这篇 新教程,使用 TorchVision 算子、D2Go 或您自己的自定义算子和模型,构建属于您的 Android 目标检测应用。

[Stable] 用于分类、目标检测和语义分割的新型移动端模型

我们增加了对 MobileNetV3 架构的支持,并提供了用于分类、目标检测和分割的预训练权重。使用这些模型非常简单,只需像加载任何 torchvision 模型一样导入并加载它们即可。

import torch
import torchvision

# Classification
x = torch.rand(1, 3, 224, 224)
m_classifier = torchvision.models.mobilenet_v3_large(pretrained=True)
m_classifier.eval()
predictions = m_classifier(x)

# Quantized Classification
x = torch.rand(1, 3, 224, 224)
m_classifier = torchvision.models.quantization.mobilenet_v3_large(pretrained=True)
m_classifier.eval()
predictions = m_classifier(x)

# Object Detection: Highly Accurate High Resolution Mobile Model
x = [torch.rand(3, 300, 400), torch.rand(3, 500, 400)]
m_detector = torchvision.models.detection.fasterrcnn_mobilenet_v3_large_fpn(pretrained=True)
m_detector.eval()
predictions = m_detector(x)

# Semantic Segmentation: Highly Accurate Mobile Model
x = torch.rand(1, 3, 520, 520)
m_segmenter = torchvision.models.segmentation.deeplabv3_mobilenet_v3_large(pretrained=True)
m_segmenter.eval()
predictions = m_segmenter(x)

这些模型在资源效率、速度和准确性方面与 TorchVision 现有的模型极具竞争力。详细性能指标请参阅我们的 发布说明

[Stable] AutoAugment

AutoAugment 是一种常见的数据增强技术,可以提高场景分类模型的准确性。尽管数据增强策略与其训练数据集直接相关,但实证研究表明,ImageNet 策略在应用于其他数据集时也能提供显著的改进。我们实现了 3 种在以下数据集上学习到的策略:ImageNet、CIFAR10 和 SVHN。这些策略可以独立使用,也可以与现有的变换 (transforms) 混合搭配。

from torchvision import transforms

t = transforms.AutoAugment()
transformed = t(image)


transform=transforms.Compose([
   transforms.Resize(256),
   transforms.AutoAugment(),
   transforms.ToTensor()])

TorchVision 的其他新功能

  • [Stable] io.image 包中的所有读取和解码方法现在支持:
    • PNG 解码期间的 Palette(调色板)、Grayscale Alpha(灰度透明)和 RGBA(红绿蓝透明)图像类型
    • 读取期间图像类型的即时转换
  • [Stable] WiderFace 数据集
  • [Stable] 通过在 RPN 上引入分数阈值,提高了 FasterRCNN 的速度和准确性
  • [Stable] DeformConv2D 的调制输入 (Modulation input)
  • [Stable] 将音频写入视频文件的选项
  • [Stable] 绘制边界框的实用程序
  • [Beta] 所有算子中的 Autocast 支持。请在 此处查找完整的 TorchVision 发布说明。

TorchAudio 0.8.0

I/O 改进

我们延续了 上一版本的工作,继续改进 TorchAudio 的 I/O 支持,包括:

  • [Stable] 将默认后端更改为“sox_io”(适用于 Linux/macOS),并更新了“soundfile”后端的接口,使其与“sox_io”保持一致。旧版后端和接口仍然可用,但不建议使用。
  • [Stable] “sox_io”后端、“soundfile”后端和 sox_effects 对类文件对象的支持。
  • [Stable] 保存时更改格式、编码和位深 (bits_per_sample) 的新选项。
  • [Stable] “sox_io”后端增加了对 GSM、HTK、AMB、AMR-NB 和 AMR-WB 格式的支持。
  • [Beta] 新增 functional.apply_codec 函数,该函数可以通过内存方式应用“sox_io”后端支持的音频编解码器来降低音频数据质量。以下是此版本中包含的一些功能示例:
# Load audio over HTTP
with requests.get(URL, stream=True) as response:
    waveform, sample_rate = torchaudio.load(response.raw)
 
# Saving to Bytes buffer as 32-bit floating-point PCM
buffer_ = io.BytesIO()
torchaudio.save(
    buffer_, waveform, sample_rate,
    format="wav", encoding="PCM_S", bits_per_sample=16)
 
# Apply effects while loading audio from S3
client = boto3.client('s3')
response = client.get_object(Bucket=S3_BUCKET, Key=S3_KEY)
waveform, sample_rate = torchaudio.sox_effects.apply_effect_file(
    response['Body'],
    [["lowpass", "-1", "300"], ["rate", "8000"]])
 
# Apply GSM codec to Tensor
encoded = torchaudio.functional.apply_codec(
    waveform, sample_rate, format="gsm")

请查看改进后的音频预处理教程:使用 TorchAudio 进行音频处理

[Stable] 切换到基于 CMake 的构建

在以前的 TorchAudio 版本中,它是利用 CMake 来构建第三方依赖项的。从 0.8.0 开始,TorchAudio 使用 CMake 来构建其 C++ 扩展。这将为 TorchAudio 集成到非 Python 环境(如 C++ 应用程序和移动端)打开大门。我们将继续致力于添加示例应用程序和移动端集成。

[Beta] 改进和新增音频变换 (Audio Transforms)

我们在本版本中增加了两个广受要求的功能:SpectralCentroid 变换和 Kaldi Pitch 特征提取(详细信息请参阅 “A pitch extraction algorithm tuned for automatic speech recognition”)。我们还为 Mel 变换公开了归一化方法,并为 Spectrogram 增加了额外的 STFT 参数。我们希望社区能继续为这些核心音频处理功能 提出功能请求

社区贡献

我们在本版本中获得了比以往任何时候都多的开源社区贡献,包括几个全新的功能。我们要向社区表达诚挚的谢意。请查看新添加的 CONTRIBUTING.md 以了解贡献代码的方式,并记住报告错误和请求功能也同样具有价值。我们将继续把目标明确的工作项标记为“help-wanted”和“contributions-welcome”,欢迎任何想要贡献代码的人参与,我们也非常乐意引导新贡献者完成贡献流程。

请在 此处查找完整的 TorchAudio 发布说明。

TorchText 0.9.0

[Beta] 数据集 API 更新

在本版本中,我们更新了 TorchText 的数据集 API,使其与 PyTorch 数据工具(如 DataLoader)兼容,并弃用了 TorchText 的自定义数据抽象(如 Field)。更新后的数据集是对数据的简单字符串到字符串的迭代器。有关从遗留抽象迁移到使用现代 PyTorch 数据工具的指南,请参阅我们的 迁移指南

下面列出的文本数据集已作为此工作的一部分进行了更新。有关如何使用这些数据集的示例,请参阅我们的 端到端文本分类教程

  • 语言建模: WikiText2, WikiText103, PennTreebank, EnWik9
  • 文本分类: AG_NEWS, SogouNews, DBpedia, YelpReviewPolarity, YelpReviewFull, YahooAnswers, AmazonReviewPolarity, AmazonReviewFull, IMDB
  • 序列标注: UDPOS, CoNLL2000Chunking
  • 翻译: IWSLT2016, IWSLT2017
  • 问答: SQuAD1, SQuAD2

请在 此处查找完整的 TorchText 发布说明。

[Stable] TorchCSPRNG 0.2.0

我们曾于 2020 年 8 月发布了 TorchCSPRNG,这是一个 PyTorch C++/CUDA 扩展,为 PyTorch 提供加密安全的伪随机数生成器。今天,我们发布了 0.2.0 版本,并将该库指定为稳定版。此版本包括用于 AES128 ECB/CTR 加密/解密的新 API,以及对 CUDA 11 和 Windows CUDA 的支持。

请在 此处查找完整的 TorchCSPRNG 发布说明。

感谢阅读,如果您对这些更新感到兴奋并希望参与 PyTorch 的未来,我们鼓励您加入 讨论论坛并参与 GitHub issue 的讨论

干杯!

PyTorch 团队