- 音频
- 语音
- 媒体生成
- 深度学习
【免费下载链接】Amphion
Amphion (/æmˈfaɪən/) is a toolkit for Audio, Music, and Speech Generation. Its purpose is to support reproducible research and help junior researchers and engineers get started in the field of audio, music, and speech generation research and development.
本指南围绕 Amphion 的 RawNet3 预训练模型说明 展开,系统讲解如何在 Amphion 中获取基于 VoxCeleb1/VoxCeleb2 训练的 RawNet3 官方权重、将其放置到正确目录,并借助 Amphion 的评估流水线以rawnet作为说话人嵌入提取器,完成生成语音与参考语音的说话人相似度(Speaker Similarity)客观评测。读完本文,你将掌握 RawNet3 权重在仓库中的完整落地路径,以及从命令行一键运行相似度指标的全部参数细节。
一、RawNet3 在 Amphion 中的定位
RawNet3 是一个基于原始波形(raw waveform)输入的说话人识别/验证模型,属于 "Raw" 系列网络——它不依赖手工设计的声学特征(如 MFCC、Fbank),而是直接以 16kHz 单声道波形作为输入,通过可学习的前端滤波器与残差网络提取说话人嵌入(speaker embedding)。
在 Amphion 中,RawNet3 并不是训练管线的一部分,而是作为评估(Evaluation)环节的预训练依赖模型存在。仓库根目录 README.md 在介绍客观评估指标时明确指出,说话人相似度(Cosine similarity)可以基于 RawNet3、Resemblyzer、WeSpeaker、WavLM 等模型计算;同时 pretrained/README.md 将 RawNet3 列为 Amphion 的预训练模型依赖之一。
因此,RawNet3 权重文件属于"按需下载、随评估脚本加载"的第三方资源,本文档所在目录即其约定存放位置。
二、下载 RawNet3 预训练权重
根据 rawnet3 目录说明,RawNet3 的官方预训练检查点托管在 Hugging Face 上的jungjee/RawNet3仓库(即 RawNet 原作者 Jungjee 发布的官方权重),其预训练数据集为:
VoxCeleb1VoxCeleb2
这两个数据集是说话人识别领域的常用大规模语音数据集,包含大量不同说话人的自然语音片段。基于它们训练得到的 RawNet3 权重具有较强的说话人判别能力,因此被 Amphion 选用为说话人相似度评估的嵌入模型之一。
下载时只需获取其中的model.pt文件,无需下载整套推理代码或额外配置——Amphion 已在评估模块中内置了与官方权重配套的网络结构定义。
三、文件放置与目录结构
拿到model.pt后,必须将其放入 Amphion 仓库的pretrained/rawnet3目录,最终目录结构应为:
Amphion ┣ pretrained ┃ ┣ rawnet3 ┃ ┃ ┣ model.pt该约定在 pretrained/README.md 中有明确说明,且被源码硬编码引用:评估模块 speaker_similarity.py 中加载权重的路径为"pretrained/rawnet3/model.pt",并取其中的"model"键作为state_dict:
model.load_state_dict( torch.load( "pretrained/rawnet3/model.pt", map_location=lambda storage, loc: storage, )["model"] )需要特别指出的是:权重文件必须命名为model.pt且放置在仓库根目录相对路径pretrained/rawnet3/下,否则评估脚本将因找不到文件而报错。如果你的工程实际运行时是从其他工作目录启动,请确保该相对路径在当前工作目录下仍然成立(Amphion 的 egs/metrics/run.sh 会把PYTHONPATH设置为仓库根目录)。
四、源码级确认:RawNet3 如何被加载与使用
RawNet3 的嵌入提取与相似度计算实现在 evaluation/metrics/similarity/speaker_similarity.py 中。当--similarity_model rawnet被指定时,脚本会以如下超参构建模型:
| 参数 | 取值 | 说明 |
|---|---|---|
model_scale | 8 | Bottle2neck 残差块的缩放系数 |
context | True | 是否拼接全局统计(均值/方差)作为上下文 |
summed | True | 是否使用求和形式的跨层残差连接 |
encoder_type | "ECA" | 注意力类型(ECA/ASP) |
nOut | 256 | 输出说话人嵌入维度 |
out_bn | False | 输出前是否经过 BatchNorm |
sinc_stride | 10 | Sinc 前端滤波器的步长 |
log_sinc | True | 是否对滤波输出取对数 |
norm_sinc | "mean" | Sinc 输出的归一化方式 |
上述参数与 RawNetModel.py 中MainModel(**kwargs)的默认结构(Bottle2neck, model_scale=8, context=True, summed=True)一致,保证了与官方权重完全匹配的模型结构。
在嵌入提取函数extract_rawnet_speaker_embd(speaker_similarity.py)中,有以下关键处理流程:
- 单声道校验:只接受单声道音频,多声道输入会直接抛出
ValueError; - 重采样:非 16kHz 的音频会通过
librosa.resample统一重采样到 16kHz(RawNet3 的固定输入采样率); - 长度处理:若音频短于指定窗口长度(
n_samples=48000,即 3 秒 @16kHz),则用 wrap 方式循环补齐; - 分帧取段:在整段音频上均匀取
n_segments=10个长度为 3 秒的片段,逐一过模型; - 嵌入输出:取 10 个片段嵌入向量的均值作为该音频的说话人嵌入。
最后,通过余弦相似度(F.cosine_similarity)计算参考音频与生成音频的嵌入相似度,得到最终评分(speaker_similarity.py)。
五、实战:用 RawNet3 跑说话人相似度评估
Amphion 提供了一键评估脚本 egs/metrics/run.sh。在运行前需按 egs/metrics/README.md 的要求准备两组音频:
┣ {ref_dir} # 参考音频(真实语音) ┃ ┣ sample1.wav ┃ ┣ sample2.wav ┣ {gen_dir} # 生成音频(待评测语音) ┃ ┣ sample1.wav ┃ ┣ sample2.wav关键约束:成对评估时,参考音频与生成音频必须同名(sample1 对 sample1、sample2 对 sample2)。
随后在 Amphion 仓库根目录执行:
sh egs/metrics/run.sh \ --reference_folder [你的参考音频目录] \ --generated_folder [你的生成音频目录] \ --dump_folder [结果输出目录] \ --metrics "similarity" \ --similarity_model "rawnet" \ --similarity_mode "pairwith"其中各参数的含义如下:
| 参数 | 取值 | 说明 |
|---|---|---|
--reference_folder | 必填 | 参考音频目录 |
--generated_folder | 必填 | 生成音频目录 |
--dump_folder | 必填 | 客观评估结果输出目录 |
--metrics | 必填,如"similarity" | 要计算的指标,可空格分隔多个(如"mcd pesq fad similarity") |
--similarity_model | "rawnet"/"wavlm"/"resemblyzer" | 相似度嵌入模型,默认"wavlm",选 RawNet3 必须显式传rawnet |
--similarity_mode | "pairwith"/"overall" | pairwith计算同名参考/预测音频对逐对相似度;overall计算两个目录间所有可能组合的平均相似度(内容无关),默认"pairwith" |
注意:由于默认模型是wavlm(见 run.sh),要使用 RawNet3 必须显式指定--similarity_model "rawnet"。若手头没有同内容的参考音频对,可用--similarity_mode "overall"计算内容无关的整体相似度:
sh egs/metrics/run.sh \ --reference_folder [你的参考音频目录] \ --generated_folder [你的生成音频目录] \ --dump_folder [结果输出目录] \ --metrics "similarity" \ --similarity_model "rawnet" \ --similarity_mode "overall"底层执行时,run.sh 会调用bins/calc_metrics.py,其中"similarity"指标被注册并路由到extract_similarity函数(calc_metrics.py),再依据similarity_model参数分派到 RawNet3 分支。
六、附录:RawNet3 结构速览(供调试参考)
若你希望验证权重加载或自行扩展,可从以下源码文件入手:
- RawNetModel.py:定义
RawNet3主干——依次为PreEmphasis+InstanceNorm1d预处理、ParamSincFB(可学习 Sinc 滤波器,C//4=256个滤波器、核长 251)作为前端、三层 Bottle2neck 残差模块、Conv1d聚合、统计池化(加权均值mu与加权标准差sg)以及全连接层fc6; - RawNetBasicBlock.py:实现
PreEmphasis(预加重系数 0.97)、AFMS(Alpha-Feature map Scaling 模块)与Bottle2neck(多分支 1D 空洞卷积残差块)。
一个值得留意的实现细节是 RawNetModel.py 中forward将预处理阶段放在torch.cuda.amp.autocast(enabled=False)下执行,即 Sinc 前端部分始终以 FP32 精度计算,以避免 AMP 混合精度对前端滤波数值稳定性的影响——这对复现评估结果的一致性有实际意义。
七、注意事项小结
- 文件命名与位置:必须为
pretrained/rawnet3/model.pt,权重键为"model",与 speaker_similarity.py 的加载逻辑严格对应; - 输入约束:RawNet3 只接受单声道、16kHz 波形,评估脚本会自动重采样与长度补齐,但多声道文件会直接报错;
- 显式指定模型:相似度默认模型是
wavlm,使用 RawNet3 需加--similarity_model "rawnet"; - 离线环境:RawNet3 权重下载自 Hugging Face 外部托管仓库,若网络受限需提前下载放入指定目录;其余评估依赖模型的离线处理方式可参考 egs/metrics/README.md 与 pretrained/README.md。
综上,RawNet3 在 Amphion 中的完整用法可概括为一条链路:下载model.pt→ 放入pretrained/rawnet3/→ 在run.sh中指定--similarity_model rawnet→ 获得说话人余弦相似度评分。这条链路既可直接用于论文中的客观指标复现,也可作为你构建自定义说话人相似度评测的参考范本。
- 音频
- 语音
- 媒体生成
- 深度学习
【免费下载链接】Amphion
Amphion (/æmˈfaɪən/) is a toolkit for Audio, Music, and Speech Generation. Its purpose is to support reproducible research and help junior researchers and engineers get started in the field of audio, music, and speech generation research and development.
相关推荐
ESPnet 说话人识别实战:基于 VoxBlink 数据集的 RawNet3 声纹模型训练与复现指南
ESPnet 说话人识别实战:基于 VoxBlink 数据集的 RawNet3 声纹模型训练与复现指南 本文是基于 ESPnet 开源语音处理工具包中 egs2
人工智能语音音频深度学习NLP使用 Gensim Downloader API 下载预训练模型与语料库:从 text8 到 Word2Vec 相似度实战
使用 Gensim Downloader API 下载预训练模型与语料库:从 text8 到 Word2Vec 相似度实战 本篇技术指南完整讲解 Gensim
人工智能NLP机器学习深度学习ESPnet2 说话人验证实战:RATS 数据集上的 SKA-TDNN 模型训练与 EER/minDCF 评估
ESPnet2 说话人验证实战:RATS 数据集上的 SKA TDNN 模型训练与 EER/minDCF 评估 本文以 ESPnet( egs2/rats/sp
人工智能语音音频深度学习NLP
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考