★★★ 本文源自AI Studio社区精品项目,【点击此处】查看更多精品内容 >>>
1. 引入
-
近来 Diffusion 模型在图像生成领域大放异彩,将图像生成的质量提升了一大个台阶,其中比较知名的就是 Stable Diffusion 系列模型
-
既然 Diffusion 模型在生成方向上的表现如此优秀,那么除了图像,其他例如音频、视频等领域是否也能应用 Diffusion 实现一个比较好的生成效果呢
-
本次就来介绍一个基于 Stable Diffusion 微调的效果表现还可以的音频片段生成模型
2. 效果展示
-
funk bassline with a jazzy saxophone solo
Your browser does not support audio.
3. 参考资料
-
官方介绍:Riffusion.com/About
-
官方实现:riffusion/riffusion
4. 算法简介
4.1 频谱图
-
介绍 Riffusion 之前需要先引入一个音频处理领域非常常用的一个工具——频谱图
-
音频频谱图是一种表示声音片段频率内容的视觉方式。x 轴表示时间,y 轴表示频率。每个像素的颜色给出了音频在其行和列给出的频率和时间下的振幅。
-
可以使用短时傅里叶变换 (STFT) 从音频计算频谱图,该变换将音频近似为不同振幅和相位的正弦波的组合。
4.2 算法流程
-
STFT 是可逆的,因此可以从频谱图重建原始音频。
-
Riffusion 巧妙的将文本生成音频的任务转换为一个文本生成频谱图像任务,从而可以使用 Stable Diffusion 的预训练模型进行微调
-
具体来讲,使用微调完成的 Stable Diffusion 模型将输入的文本提示转换为频谱图像,然后基于生成的频谱图重建音频就可以实现文本提示生成音频的功能了
-
输入提示词:funk bassline with a jazzy saxophone solo
-
输入 Stable Diffusion 模型,迭代生成频谱图:
-
基于生成的频谱图重建音频:
Your browser does not support audio.
-
5. 快速体验
5.1 解压预训练模型
!unzip -q data/data184657/riffusion-model-v1.zip
5.2 安装依赖
!pip install ppdiffusers==0.9.0 paddlenlp==2.4.9
5.3 加载模型
from ppdiffusers import StableDiffusionPipeline
from audio import wav_bytes_from_spectrogram_image
from IPython.display import Audio
pipe = StableDiffusionPipeline.from_pretrained("riffusion-model-v1")
5.4 生成音频
prompt = 'funk bassline with a jazzy saxophone solo'
wav_path = 'output.wav'
images = pipe(prompt=prompt).images
with open(wav_path, 'wb') as f:
f.write(wav_bytes_from_spectrogram_image(images[0])[0].getbuffer())
Audio(wav_path, rate=44100)
6. 小结
-
简单介绍一个根据文本提示生成音频的 Diffusion 模型——Riffusion
-
并使用官方提供的预训练模型完成音频生成