torch-audiomentations

GitHub
1.1k 100 非常简单 1 次阅读 今天MIT音频开发框架数据工具
AI 解读 由 AI 自动生成,仅供参考

torch-audiomentations 是一款专为 PyTorch 打造的高效音频数据增强工具,旨在加速深度学习模型的训练过程。它深受 audiomentations 项目启发,但针对性能进行了深度优化,核心解决了传统音频增强在大规模训练中速度慢、难以融入神经网络流水线的问题。

这款工具特别适合从事语音识别、音频分类或音乐信息检索的 AI 研究人员与开发者使用。其最大的技术亮点在于将音频变换操作封装为 PyTorch 的原生 nn.Module,这意味着增强逻辑可以直接嵌入模型架构中,并支持在 GPU 上并行运行,从而大幅提升数据处理吞吐量。此外,它原生支持多通道音频批次处理,提供“按批次”、“按样本”和“按通道”三种灵活的增强模式,且大多数变换操作是可微分的,便于更复杂的模型优化。

无论是需要在本地 CPU 快速验证想法,还是在云端 GPU 集群上进行大规模训练,torch-audiomentations 都能提供跨平台的稳定支持。通过简单的几行代码,用户即可构建包含增益调整、极性反转等多种效果的增强流水线,让音频数据的预处理变得更加流畅高效。

使用场景

某语音识别初创团队正在训练一个鲁棒的噪声环境语音命令识别模型,需要处理海量立体声音频数据。

没有 torch-audiomentations 时

  • 训练速度受限:传统增强库仅在 CPU 运行,数据预处理成为 GPU 训练的瓶颈,导致显卡经常空闲等待数据。
  • 集成流程繁琐:增强逻辑独立于模型之外,需要在 DataLoader 中额外编写复杂的管道代码,难以实现端到端优化。
  • 多通道支持薄弱:处理立体声或麦克风阵列数据时,往往需要手动循环处理每个声道,代码冗余且易出错。
  • 无法联合优化:由于增强操作不可微,无法将数据增强策略作为模型的一部分进行梯度反向传播或联合调优。

使用 torch-audiomentations 后

  • GPU 加速显著提升:直接利用 CUDA 在显卡上并行执行增益调整、极性反转等增强操作,消除了数据加载瓶颈,训练吞吐量翻倍。
  • 原生无缝集成:增强变换继承自 nn.Module,可直接嵌入神经网络结构中,像普通网络层一样被调用和管理。
  • 高效批量处理:原生支持多通道音频的批量(Batch)处理,一行代码即可同时对整个批次的立体声数据进行差异化增强。
  • 支持可微训练:大多数变换具备可微性,为未来探索基于梯度的自适应数据增强策略奠定了技术基础。

torch-audiomentations 通过将音频增强深度融入 PyTorch 计算图并启用 GPU 加速,彻底解决了深度学习语音任务中的数据供给效率难题。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU
  • 非必需
  • 支持 CPU 和 GPU (CUDA)
  • 多 GPU/DDP 官方不支持,建议在单 GPU 或 CPU 上运行以避免已知问题
  • 未指定具体显存大小和 CUDA 版本要求
内存

未说明

依赖
notes1. 该工具旨在加速音频数据增强,优先支持 GPU 但并非所有变换在 GPU 上都比 CPU 快。2. 已知在 multiprocessing(多进程)环境下使用可能导致内存泄漏,建议此时在 CPU 上运行变换。3. 官方不支持多 GPU (DDP) 设置。4. PitchShift 变换在低采样率下不支持微小的音高偏移。5. 目标数据处理功能仍处于实验阶段。6. v0.12.0 已移除 librosa 依赖,改用 torchaudio。
python3.7+
torch
torchaudio>=0.9.0
torch-pitch-shift
torch-audiomentations hero image

快速开始

torch-audiomentations

构建状态 代码覆盖率 代码风格:Black DOI

PyTorch 中的音频数据增强。灵感来源于 audiomentations

  • 支持 CPU 和 GPU (CUDA) - 速度优先
  • 支持多通道(或单声道)音频批次
  • 变换扩展了 nn.Module,因此可以作为 PyTorch 神经网络模型的一部分进行集成
  • 大多数变换是可微的
  • 三种模式:per_batchper_exampleper_channel
  • 跨平台兼容性
  • 宽松的 MIT 许可证
  • 目标是高测试覆盖率

安装

Python 版本支持 PyPI 版本 每月 PyPI 下载量

pip install torch-audiomentations

使用示例

import torch
from torch_audiomentations import Compose, Gain, PolarityInversion


# 初始化增强可调用对象
apply_augmentation = Compose(
    transforms=[
        Gain(
            min_gain_in_db=-15.0,
            max_gain_in_db=5.0,
            p=0.5,
        ),
        PolarityInversion(p=0.5)
    ]
)

torch_device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# 创建一个包含白噪声的示例张量。
# 该张量表示 8 个音频片段,每个片段有 2 个通道(立体声),时长 2 秒,采样率为 16 kHz。
audio_samples = torch.rand(size=(8, 2, 32000), dtype=torch.float32, device=torch_device) - 0.5

# 应用增强。这会独立地改变批次中(部分)音频片段的增益和极性。
perturbed_audio_samples = apply_augmentation(audio_samples, sample_rate=16000)

已知问题

  • 目标数据处理仍处于实验阶段 (#3)。解决方法:如果目标数据与输入具有相同形状,目前可以使用 freeze_parametersunfreeze_parameters
  • 在多进程环境中使用 torch-audiomentations 可能会导致内存泄漏 (#132)。解决方法:如果在多进程环境中使用 torch-audiomentations,最好在 CPU 上运行变换。
  • 不正式支持多 GPU / DDP (#136)。作者没有多 GPU 配置来测试和修复此问题。如果您愿意为此捐赠硬件,请联系我们。解决方法:改用单 GPU 运行变换。
  • PitchShift 不支持小幅度音高变换,尤其是在低采样率下 (#151)。解决方法:如果需要对低采样率音频应用小幅度音高变换,可以直接使用 audiomentations 中的 PitchShifttorch-pitch-shift,而无需使用计算高效音高变换目标的函数。

贡献

欢迎贡献者! 加入 Asteroid 的 Slack 与我们一起讨论 torch-audiomentations

动机:速度

我们不希望数据增强成为模型训练速度的瓶颈。以下是运行 1D 卷积所需时间的比较:

卷积执行时间

注意:并非所有变换与 CPU 相比都有如此显著的速度提升。一般来说,在 GPU 上运行音频数据增强并不总是最佳选择。更多信息请参阅这篇文章:https://iver56.github.io/audiomentations/guides/cpu_vs_gpu/

当前状态

torch-audiomentations 处于早期开发阶段,因此 API 可能会发生变化。

波形变换

每个变换都具有 modepp_mode——这些参数决定了增强如何执行。

  • mode 决定增强的随机化如何分组和应用。
  • p 决定应用增强的概率。
  • p_mode 决定增强的开启或关闭方式。

此可视化展示了不同 modep_mode 组合如何执行增强。

mode、p 和 p_mode 解释

AddBackgroundNoise

新增于 v0.5.0

向输入音频添加背景噪声。

AddColoredNoise

新增于 v0.7.0

向输入音频添加彩色噪声。

ApplyImpulseResponse

新增于 v0.5.0

将给定音频与冲激响应进行卷积。

BandPassFilter

新增于 v0.9.0

对输入音频应用带通滤波。

BandStopFilter

新增于 v0.10.0

对输入音频应用带阻滤波,也称为陷波滤波器。

Gain

新增于 v0.1.0

通过随机振幅因子乘以音频,以降低或增加音量。此技术可以帮助模型对输入音频的整体增益具有一定不变性。

警告:此变换可能会返回超出 [-1, 1] 范围的样本,这可能导致削波或环绕失真,具体取决于后续对音频的处理方式。另请参阅 https://en.wikipedia.org/wiki/Clipping_(audio)#Digital_clipping

HighPassFilter

新增于 v0.8.0

对输入音频应用高通滤波。

Identity

新增于 v0.11.0

此变换返回未更改的输入。在需要禁用数据增强的情况下,可用于简化代码。

LowPassFilter

新增于 v0.8.0

对输入音频应用低通滤波。

PeakNormalization

新增于 v0.2.0

应用恒定增益,使批次中每个音频片段中的最高信号电平达到 0 dBFS,即当所有样本必须介于 -1 和 1 之间时允许的最响度级别。

此变换有一个替代模式(apply_to="only_too_loud_sounds"),仅对那些信号值严重超出 [-1, 1] 范围的音频片段应用增益。这有助于避免过响音频出现数字削波,同时保持其他音频不变。

PitchShift

新增于 v0.9.0

在不改变节奏的情况下升高或降低音高。

极性反转

在 v0.1.0 中添加

将音频样本上下翻转,从而反转其极性。换句话说,就是将波形乘以 -1,使负值变为正值,反之亦然。单独播放时,结果听起来与原始音频相同。然而,当与其他音频源混合时,结果可能会有所不同。这种波形反转技术有时用于音频抵消或获取两个波形之间的差异。不过,在音频数据增强的背景下,这种变换在训练对相位敏感的机器学习模型时可能很有用。

时移

在 v0.5.0 中添加

将音频向前或向后移动,可以选择是否循环。

通道混洗

在 v0.6.0 中添加

对于多声道音频输入(例如立体声),可以随机混洗声道顺序,比如将左声道变为右声道,反之亦然。这种变换有助于缓解输入多声道波形的机器学习模型中的位置偏差问题。

如果输入音频是单声道,则此变换不会产生任何效果,只会发出警告。

时间反转

在 v0.10.0 中添加

类似于视觉领域中对图像进行随机翻转一样,沿着时间轴反转(倒置)音频。这在音频分类任务中可能具有一定的意义。该方法已在论文《AudioCLIP:将 CLIP 扩展至图像、文本和音频》中成功应用,详见 arXiv:2106.13043

更改记录

尚未发布

新增

  • 添加新变换:MixPaddingRandomCropSpliceOut

[v0.12.0] - 2025-01-15

移除

  • 移除对 librosa 的依赖,改为使用 torchaudio

[v0.11.2] - 2025-01-09

修复

  • 修复在多 GPU 训练时 transform_parameters 中与设备相关的错误
  • 修复 AddColoredNoise 中与形状相关的边缘情况错误
  • 修复将不兼容的 Path 数据类型传递给 torchaudio.info 的问题

[v0.11.1] - 2024-02-07

变更

  • LowPassFilterHighPassFilter 中增加对固定截止频率的支持
  • AddColoredNoise 中增加对 min_f_decay == max_f_decay 的支持
  • torchaudio 的最低版本要求从 >=0.7.0 提升至 >=0.9.0

修复

  • 修复 Shift 中不准确的类型提示
  • 移除 set_backend,以避免 torchaudio 产生的 UserWarning

[v0.11.0] - 2022-06-29

新增

  • 添加新变换:Identity
  • 增加处理目标与输入同时进行的 API。部分变换已经实验性地支持此功能。

变更

  • 增加 ObjectDict 输出类型,作为 torch.Tensor 的替代选项。目前该替代选项为可选(出于向后兼容性考虑),但请注意,旧的输出类型(torch.Tensor)已被弃用,并将在未来的版本中完全移除。
  • 允许为 AddBackgroundNoiseApplyImpulseResponse 指定文件路径、文件夹路径、文件列表或文件夹列表。
  • 要求使用更新版本的 torch-pitch-shift,以确保 PitchShift 能够兼容 torchaudio 0.11

修复

  • 修复 BandPassFilter 在 GPU 上无法正常工作的问题。

[v0.10.1] - 2022-03-24

新增

  • AddBackgroundNoise 中增加对最小信噪比等于最大信噪比的支持
  • 增加对 librosa 0.9.0 的支持。

修复

  • 修复 AddBackgroundNoise 中加载的音频片段有时会被重新采样为不兼容长度的问题。

[v0.10.0] - 2022-02-11

新增

  • 实现 OneOfSomeOf,用于从一组变换中随机选择一个或多个应用
  • 实现新变换:BandStopFilterTimeInversion

变更

  • ir_paths 放入 ApplyImpulseResponsetransform_parameters 中,以便检查所使用的脉冲响应。这也使 freeze_parameters() 表现出预期的行为。

修复

  • 修复 BandPassFilter 中实际带宽是预期值两倍的问题。默认值已相应更新。如果您之前指定了 min_bandwidth_fraction 和/或 max_bandwidth_fraction,现在需要将这些数值加倍才能获得与以前相同的效果。

[v0.9.1] - 2021-12-20

新增

  • 正式声明支持 Python >=3.9。

[v0.9.0] - 2021-10-11

新增

  • ApplyImpulseResponse 中添加参数 compensate_for_propagation_delay
  • 实现 BandPassFilter
  • 实现 PitchShift

移除

  • 已移除对 torchaudio <=0.6 的支持。

[v0.8.0] - 2021-06-15

新增

  • 实现 HighPassFilterLowPassFilter

弃用

  • torchaudio <=0.6 的支持已被弃用,未来将被移除。

移除

  • 已移除对 PyTorch <=1.6 的支持。

[v0.7.0] - 2021-04-16

新增

  • 实现 AddColoredNoise

弃用

  • 对 PyTorch <=1.6 的支持已被弃用,未来将被移除。

[v0.6.0] - 2021-02-22

新增

  • 实现 ShuffleChannels

[v0.5.1] - 2020-12-18

修复

  • 修复 AddBackgroundNoise 在 CUDA 上无法正常工作的问题
  • 修复查找音频文件时无法找到符号链接的音频文件或文件夹的问题
  • 尽可能使用 torch.fft.rfft 替代 torch.rfft(已在 PyTorch 1.7 中弃用)。此外,这一改动还提升了 ApplyImpulseResponse 的性能。

[v0.5.0] - 2020-12-08

新增

  • 发布 AddBackgroundNoiseApplyImpulseResponse
  • 实现 Shift

变更

  • sample_rate 设置为可选。允许在 __init__ 中指定 sample_rate,而不是在 forward 中指定。这意味着现在可以在 Compose 中使用 torchaudio 的变换。

移除

  • 移除对 1 维和 2 维音频张量的支持。目前仅支持 3 维音频张量。

修复

  • 修复无法使用 nn.Module 子类的 parameters 方法的问题
  • 修复无法找到文件扩展名为大写的文件的问题。

[v0.4.0] - 2020-11-10

新增

  • 实现 Compose 以应用多个变换
  • 实现实用函数 from_dictfrom_yaml,用于从字典、JSON 或 YAML 中加载数据增强配置
  • 正式支持大多数变换的可微性。

[v0.3.0] - 2020-10-27

新增

  • 增加对 per_batchper_channel 等替代模式的支持。

变更

  • 变换在评估模式下会返回未经修改的输入。

[v0.2.0] - 2020-10-19

新增

  • 实现 PeakNormalization
  • 在 API 中公开 convolve

变更

  • 简化了使用 CUDA 张量的 API。设备现在会根据输入张量自动推断。

[v0.1.0] - 2020-10-12

新增

  • 初始发布,包含 GainPolarityInversion

开发

设置

可以通过 conda 创建一个支持 GPU 的 torch-audiomentations 开发环境:

  • conda env create

运行测试

pytest

规范

致谢

torch-audiomentations 的开发得到了 Nomono 的大力支持。

感谢所有为改进 torch-audiomentations 做出贡献的 贡献者

版本历史

v0.12.02025/01/15
v0.11.22025/01/09
v0.11.12024/02/07
v0.11.02022/06/29
v0.10.12022/03/24
v0.10.02022/02/11
v0.9.12022/02/11
v0.9.02022/02/11
v0.8.02022/02/11
v0.7.02022/02/11
v0.6.02022/02/11
v0.5.12022/02/11
v0.5.02022/02/11
v0.4.02022/02/11
v0.3.02022/02/11
v0.2.02022/02/11
v0.1.02022/02/11

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|3天前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|4天前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

147.9k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.1k|★★☆☆☆|昨天
开发框架图像Agent

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|3天前
插件开发框架

LLMs-from-scratch

LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备

90.1k|★★★☆☆|3天前
语言模型图像Agent