Project Icon

pesto

基于机器学习的高效音高估计开源工具

PESTO是一个开源的音高估计工具,基于机器学习技术开发。该项目获得ISMIR 2023最佳论文奖,具有出色的性能和快速的处理速度。PESTO支持多种音频格式,提供命令行和Python API接口,便于集成使用。与CREPE相比,PESTO的模型参数更少,但在主要数据集上表现相当。适用于需要高效音高估计的音频处理应用。

PESTO:基于自监督转调不变目标的音高估计

简述:基于机器学习的快速强大音高估计器

本代码是PESTO论文的实现,该论文荣获ISMIR 2023最佳论文奖。

**声明:**此仓库仅包含最少量代码,仅用于推理。如需完整实现细节或将PESTO用于研究目的,请查看这个仓库

安装

pip install pesto-pitch

就这么简单!

依赖

本仓库基于PyTorch实现,还需以下额外依赖:

  • numpy用于基本的I/O操作
  • torchaudio用于音频加载
  • matplotlib用于将音高预测导出为图像(可选)

**警告:**如在全新环境中安装,建议先按推荐方式安装PyTorch,再安装PESTO。

使用方法

命令行界面

本包含有命令行界面和预训练模型。使用时,在终端输入:

pesto my_file.wav

python -m pesto my_file.wav

输出格式

可用 -e/--export_format 选项指定输出格式。 默认情况下,预测的音高保存在一个如下所示的 .csv 文件中:

time,frequency,confidence
0.00,185.616,0.907112
0.01,186.764,0.844488
0.02,188.356,0.798015
0.03,190.610,0.746729
0.04,192.952,0.771268
0.05,195.191,0.859440
0.06,196.541,0.864447
0.07,197.809,0.827441
0.08,199.678,0.775208
...

此结构有意与CREPE仓库相同,以便于两种方法的比较。

另外,也可将时间步、音高、置信度和激活输出保存为 .npz 文件。

最后,还可将音高预测可视化为 png 文件(需安装 matplotlib 以导出PNG)。示例如下:

示例f0

可在 -e 选项后指定多种格式。

批处理

可传入任意数量的音频文件进行批处理。 例如,要估计整个文件夹中MP3文件的音高,只需输入:

pesto my_folder/*.mp3

音频格式

内部使用torchaudio加载音频文件。 应支持大多数音频格式;详情请参阅torchaudio文档。 此外,音频文件可以是任何采样率;无需重采样。

从输出概率分布预测音高

默认情况下,模型返回所有音高区间的概率分布。 为将其转换为实际音高,我们默认使用与CREPE相同的局部加权平均最大值法: 图片

也可用 -r/--reduction 选项使用基本的最大值或加权平均。

其他

  • 可用 -s 选项指定音高预测的步长(毫秒)。注意此数值会转换为CQT的整数跳跃长度,因此实际步长可能与指定值略有不同。
  • 可用 -F 选项直接返回半音音高预测而非频率。
  • 如可使用GPU,可用 --gpu <gpu_id> 选项进一步提高推理速度。 --gpu -1(默认值)对应CPU。

Python API

另外,可在其他Python代码中直接调用 pesto/predict.py 中定义的函数。 特别是,predict_from_files 函数是CLI直接调用的函数。

基本用法

import torchaudio
import pesto

# 在自己的Python代码中直接预测音频张量的音高
x, sr = torchaudio.load("my_file.wav")
x = x.mean(dim=0)  # PESTO接受单声道音频作为输入
timesteps, pitch, confidence, activations = pesto.predict(x, sr)

# 或使用自定义检查点进行预测
predictions = pesto.predict(x, sr, model_name="/path/to/checkpoint.ckpt")

# 也可以直接从音频文件预测音高
pesto.predict_from_files(["example1.wav", "example2.mp3", "example3.ogg"], export_format=["csv"])

pesto.predict 支持批处理输入,形状应为 (batch_size, num_samples)

**警告:**如果忘记将立体声音频转换为单声道,通道将被视为批次维度,您将得到每个通道的单独预测。

高级用法

pesto.predict 会先加载CQT核和模型,然后进行音高估计。如果要处理大量文件,多次调用 predict 将为每个张量重新初始化相同的模型。

为避免这一耗时步骤,可手动用 load_model 实例化模型,然后调用模型的forward方法:

import torch

from pesto import load_model

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
pesto_model = load_model("mir-1k", step_size=20.).to(device)

for x, sr in ...:
    x = x.to(device)
    predictions, confidence, activations = pesto_model(x, sr)
    ...

注意,load_model 返回的 PESTO 对象是 nn.Module 的子类,其 forward 方法也支持批处理输入。 因此,可以轻松将PESTO集成到自己的架构中:

import torch
import torch.nn as nn

from pesto import load_model


class MyGreatModel(nn.Module):
    def __init__(self, step_size, sr=44100, *args, **kwargs):
        super(MyGreatModel, self).__init__()
        self.f0_estimator = load_model("mir-1k", step_size, sampling_rate=sr)
        ...

    def forward(self, x):
        with torch.no_grad():
            f0, conf = self.f0_estimator(x, convert_to_freq=True, return_activations=False)
        ...

性能

MIR-1KMDB-stem-synth数据集上,PESTO优于其他自监督基准。 其性能接近CREPE,而CREPE有800倍的参数量,并在包含MIR-1K和MDB-stem-synth在内的大型数据集上进行了有监督训练。 image

速度基准测试

PESTO是一个非常轻量级的模型,因此在推理时速度非常快。 由于CQT帧是独立处理的,实际的音高估计过程的速度主要取决于预测的精细程度,可以通过--step_size参数(默认为10ms)来控制。

以下是CREPE和PESTO在同一台机器上平均10次运行的速度比较。

speed

  • 音频文件:wav格式,2分51秒
  • 硬件:第11代英特尔(R) 酷睿(TM) i7-1185G7 @ 3.00GHz,8核心

请注意,y轴使用对数刻度:以10ms的步长(默认值),PESTO可以在13秒内完成文件的音高估计(比实时快约12倍),而CREPE则需要12分钟! 因此,PESTO更适合需要非常快速音高估计且不依赖GPU资源的应用。

GPU上的推理

底层的PESTO音高估计器是一个标准的PyTorch模块,因此可以通过将选项--gpu设置为您想用于音高估计的设备ID来使用GPU(如果可用)。

在底层,输入作为单个CQT帧批次传递给模型,因此整个音轨的音高是并行估计的,使得推理极其快速。

然而,在处理非常大的音频文件时,一次性处理整个音轨可能会导致OOM错误。 为了避免这种情况,可以通过设置选项-c/--num_chunks将CQT帧批次分割成多个块。 这些块将被顺序处理,从而减少内存使用。

例如,一个48kHz的1小时音频文件,在单个GTX 1080 Ti上分成10个块处理时,只需20秒就能完成。

贡献

  • 目前,只提供了一个在MIR-1K上训练的单一模型。 欢迎您尝试改进架构、训练数据或超参数,如果获得比提供的预训练模型更好的性能,请通过PR提交您的检查点。
  • 尽管PESTO的速度明显快于实时,但目前它是作为标准PyTorch实现的,可能还有进一步加速的空间。 欢迎任何提高速度的建议!

更广泛地说,如果您有改进PESTO方法的想法,请不要犹豫与我联系!

引用

如果您想使用这项工作,请引用:

@inproceedings{PESTO,
    author = {Riou, Alain and Lattner, Stefan and Hadjeres, Gaëtan and Peeters, Geoffroy},
    booktitle = {Proceedings of the 24th International Society for Music Information Retrieval Conference, ISMIR 2023},
    publisher = {International Society for Music Information Retrieval},
    title = {PESTO: Pitch Estimation with Self-supervised Transposition-equivariant Objective},
    year = {2023}
}

致谢

@ARTICLE{9174990,
    author={K. W. {Cheuk} and H. {Anderson} and K. {Agres} and D. {Herremans}},
    journal={IEEE Access}, 
    title={nnAudio: An on-the-Fly GPU Audio to Spectrogram Conversion Toolbox Using 1D Convolutional Neural Networks}, 
    year={2020},
    volume={8},
    number={},
    pages={161981-162003},
    doi={10.1109/ACCESS.2020.3019084}}
@ARTICLE{9865174,
    author={Weiß, Christof and Peeters, Geoffroy},
    journal={IEEE/ACM Transactions on Audio, Speech, and Language Processing}, 
    title={Comparing Deep Models and Evaluation Strategies for Multi-Pitch Estimation in Music Recordings}, 
    year={2022},
    volume={30},
    number={},
    pages={2814-2827},
    doi={10.1109/TASLP.2022.3200547}}
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号