Make-An-Audio: 基于提示增强扩散模型的文本到音频生成
Rongjie Huang, Jiawei Huang, Dongchao Yang, Yi Ren, Luping Liu, Mingze Li, Zhenhui Ye, Jinglin Liu, Xiang Yin, Zhou Zhao
Make-An-Audio (ICML'23)的PyTorch实现:一个能够从X模态高效生成高保真音频的条件扩散概率模型。
我们在这个仓库中提供了我们的实现和预训练模型作为开源。
访问我们的演示页面获取音频样本。
文本到音频 HuggingFace 空间 | 音频修复 HuggingFace 空间
新闻
- 2023年1月:Make-An-Audio 提交到arxiv。
- 2023年8月:Make-An-Audio (ICML 2022) 在Github上发布。
快速开始
我们提供了一个示例,展示如何使用Make-An-Audio生成高保真样本。
要在您自己的数据集上尝试,只需在配有NVIDIA GPU + CUDA cuDNN的本地机器上克隆此仓库,并按照以下说明操作。
支持的数据集和预训练模型
只需运行以下命令从Google drive下载权重。 从Hugging Face下载CLAP权重。
下载:
maa1_full.ckpt 并将其放入 ./useful_ckpts
BigVGAN 声码器并将其放入 ./useful_ckpts
CLAP_weights_2022.pth 并将其放入 ./useful_ckpts/CLAP
目录结构应为:
useful_ckpts/
├── bigvgan
│ ├── args.yml
│ └── best_netG.pt
├── CLAP
│ ├── config.yml
│ └── CLAP_weights_2022.pth
└── maa1_full.ckpt
依赖
请参阅requirement.txt
中的要求:
使用预训练模型进行推理
python gen_wav.py --prompt "鸟儿啾啾叫" --ddim_steps 100 --duration 10 --scale 3 --n_samples 1 --save_name "results"
训练
数据集准备
由于版权问题,我们无法提供数据集下载链接。我们提供了生成梅尔频谱图的处理代码。 在训练之前,我们需要将数据集信息构建成一个tsv文件,其中包括name(每个音频的id)、dataset(音频所属的数据集)、audio_path(.wav文件的路径)、caption(音频的描述)、mel_path(每个音频处理后的梅尔频谱图文件路径)。我们提供了一个audiocaps测试集的tsv文件作为示例:./data/audiocaps_test.tsv。
生成音频的梅尔频谱图文件
假设你已经有了一个tsv文件,将每个描述与其音频路径链接起来,这意味着tsv文件中有"name"、"audio_path"、"dataset"和"caption"列。 要获取音频的梅尔频谱图,运行以下命令,它会将梅尔频谱图保存在./processed目录中
python preprocess/mel_spec.py --tsv_path tmp.tsv --num_gpus 1 --max_duration 10
训练变分自编码器
假设我们已经处理了几个数据集,并将.tsv文件保存在data/*.tsv中。在配置文件中将data.params.spec_dir_path替换为data(包含tsv文件的目录)。然后我们可以使用以下命令训练VAE。如果你的机器没有8个GPU,你可以替换--gpus 0,1,...,gpu_nums
python main.py --base configs/train/vae.yaml -t --gpus 0,1,2,3,4,5,6,7
训练结果将保存在./logs/目录中
训练潜在扩散模型
在训练VAE之后,在配置文件中将model.params.first_stage_config.params.ckpt_path替换为你训练好的VAE检查点路径。 运行以下命令来训练扩散模型
python main.py --base configs/train/diffusion.yaml -t --gpus 0,1,2,3,4,5,6,7
训练结果将保存在./logs/目录中
评估
生成audiocaps样本
python gen_wavs_by_tsv.py --tsv_path data/audiocaps_test.tsv --save_dir audiocaps_gen
计算FD、FAD、IS、KL
通过以下方式安装audioldm_eval:
git clone git@github.com:haoheliu/audioldm_eval.git
然后进行测试:
python scripts/test.py --pred_wavsdir {你生成的音频保存目录} --gt_wavsdir {audiocaps测试集音频保存目录}
计算Clap分数
python wav_evaluation/cal_clap_score.py --tsv_path {你生成的音频保存目录}/result.tsv
X-To-Audio
音频到音频
python scripts/audio2audio.py --prompt "鸟儿啾啾叫" --strength 0.3 --init-audio sample.wav --ckpt useful_ckpts/maa1_full.ckpt --vocoder_ckpt useful_ckpts/bigvgan --config configs/text_to_audio/txt2audio_args.yaml --outdir audio2audio_samples
致谢
本实现使用了以下Github仓库的部分代码: CLAP, Stable Diffusion, 具体描述见我们的代码。
引用
如果您在研究中发现这些代码有用,请考虑引用:
@article{huang2023make,
title={Make-an-audio: Text-to-audio generation with prompt-enhanced diffusion models},
author={Huang, Rongjie and Huang, Jiawei and Yang, Dongchao and Ren, Yi and Liu, Luping and Li, Mingze and Ye, Zhenhui and Liu, Jinglin and Yin, Xiang and Zhao, Zhou},
journal={arXiv preprint arXiv:2301.12661},
year={2023}
}
免责声明
严禁任何组织或个人在未经本人同意的情况下,利用本文提及的任何技术生成他人的语音,包括但不限于政府领导人、政治人物和名人。如果您不遵守此项规定,可能会违反版权法。