尧图精选

AudioCraft 客观评估指标完全指南:从 SI-SNR 到 FAD/KLD/CLAP/Chroma 的配置、原理与实战

🕒 发布时间:2026/9/20 12:46:44 📁 来源:尧图网络
人工智能深度学习音频媒体生成音乐生成【免费下载链接】audiocraftAudiocraft is a library for audio processing and generation with deep learning. It features the state-of-the-art EnCodec audio compressor / tokenizer, along with MusicGen, a simple and controllable music generation LM with textual and melodic conditioning.项目地址https://gitcode.com/gh_mirrors/au/audiocraft点击查看免费下载AudioCraft 在训练损失之外还提供了一套用于音频合成compression与音频生成generation质量评估的客观指标涵盖 SI-SNR、ViSQOL、Frechet Audio DistanceFAD、KL 散度KLD、文本一致性CLAP与 Chroma 余弦相似度等。由于这些指标往往需要额外依赖、且计算代价较高默认在训练管线中处于关闭状态。本文以 docs/METRICS.md 为主线结合仓库中指标实现源码与真实配置文件系统讲解每个指标的启用方式、参数含义、底层原理与可复用的实战配置帮助你在 AudioCraft 训练与评估管线中落地一套可量化、可复现的音频质量评估方案。一、指标总览两类场景一套开关AudioCraft 的客观指标分为两大阵营见 audiocraft/metrics/init.py 的模块划分音频合成质量指标Audio synthesis metrics用于衡量重建/压缩质量典型场景是 EnCodec 压缩模型训练后的重建评估包括SI-SNR与ViSQOL。音频生成质量指标Audio generation metrics用于衡量生成模型如 MusicGen、AudioGen输出与参考音频/文本条件的对齐程度包括FAD、KLD、文本一致性CLAP与Chroma 余弦相似度。这些指标默认关闭原因有二一是部分指标依赖外部库甚至外部二进制ViSQOL、FAD 需要 Google 的开源实现二是推理代价高会拖慢训练节奏。因此AudioCraft 采用「配置开关 按需注入」的设计指标的开关统一挂在evaluate.metrics.*下而指标本身的参数路径、模型、采样率等统一挂在metrics.*下。你通过dora run的命令行参数即可在不修改任何文件的前提下临时开启指标。二、音频合成质量指标SI-SNR 与 ViSQOL2.1 SI-SNR零依赖的尺度不变信噪比SI-SNRScale-Invariant Signal-to-Noise Ratio在 AudioCraft 中以纯 PyTorch 实现不需要任何额外依赖。启用方式是在评估阶段打开开关dora run ... evaluate.metrics.sisnrtrue重要警告AudioCraft 报告的是 SI-SNR 的相反数乘以 -1。这是因为该指标同时被复用为训练损失函数——作为损失时越低越好因此内部实现返回-1 * regular_SI_SNR。这意味着评估中出现的负值是正常且良好的信号值越负代表重建质量越好在对外发布结果前需要再次乘以-1还原为常规 SI-SNR 值。从源码看实现位于 audiocraft/losses/sisnr.py注意SI-SNR 指标与 SI-SNR 损失共用同一个SISNR模块class SISNR(nn.Module): def __init__( self, sample_rate: int 16000, segment: tp.Optional[float] 20, overlap: float 0.5, epsilon: float torch.finfo(torch.float32).eps, ): ... def forward(self, out_sig: torch.Tensor, ref_sig: torch.Tensor) - torch.Tensor: ... sisnr 10 * ( torch.log10(epsilon _norm2(proj)) - torch.log10(epsilon _norm2(noise)) ) return -1 * sisnr[..., 0].mean()关键实现细节输入形状为[B, C, T]输出为标量支持分段评估segment控制每段时长秒overlap控制段间重叠比例默认 0.5 即 50% 重叠默认在 20 秒的段上计算计算过程为对参考与估计信号做中心化减去均值→ 将估计信号投影到参考信号方向得到proj残差为noise→ 计算10 * log10(proj功率 / noise功率)→ 取平均并取负添加了与帧大小成比例的 epsilon 以保证数值稳定性。在压缩求解器中SI-SNR 的实际调用发生在 audiocraft/solvers/compression.py 的evaluate_audio_reconstruction函数中与 ViSQOL 一同作为重建质量指标输出。2.2 ViSQOL语音/音频感知质量MOS-LQO 分数ViSQOL 是 Google 开源的感知音频质量评估工具AudioCraft 提供了一层 Python 包装器audiocraft/metrics/visqol.py方便在训练管线中直接调用其二进制。启用 ViSQOL 需要同时指定两个参数一个开关一个指向 ViSQOL 安装目录的路径# 第一个参数用于激活 visqol 计算第二个参数指定 viSQOL 库路径供 Python 包装器使用 dora run ... evaluate.metrics.visqoltrue metrics.visqol.binpath_to_visqol从 audiocraft/metrics/visqol.py 的类文档可以看到 ViSQOL 的两种运行模式Audio 模式输入信号必须重采样到48kHz支持多声道但会下混为单声道比较使用支持向量回归分数最大值约4.75Speech 模式使用宽带模型期望16kHz输入处理时会先对参考信号做基于 RMS 的语音活动检测VAD只比较有语音活动的部分并对信号做归一化分数上限为5.0 MOS以兼容历史版本行为。构造函数签名audiocraft/metrics/visqol.py暴露出可配置项binViSQOL 二进制安装路径必须存在modeaudio或speech默认audiomodel相似度转质量模型文件名默认libsvm_nu_svr_model.txtv3 模型中实际配置常用tcdaudio14_aacvopus_coresv_svrnsim_n.68_g.01_c1.modeldebug是否额外导出 debug 指标。包装器的工作流程__call__audiocraft/metrics/visqol.py为将参考/退化信号重采样到目标采样率 → clamp 到[-0.99, 0.99]后写入临时目录的 16-bit PCM WAV → 生成input.csvreference,degraded两列→ 调用{bin}/bazel-bin/visqol --batch_input_csv ... --results_csv ...speech 模式追加--use_speech_mode→ 解析moslqo列并返回批内均值。最终返回的即为 ViSQOL 的 MOS-LQO 分数。在 config/solver/compression/default.yaml 中ViSQOL 的默认配置如下可作为metrics.visqol.*覆盖的参考# metrics metrics: visqol: mode: audio bin: null # path to visqol install model: tcdaudio14_aacvopus_coresv_svrnsim_n.68_g.01_c1.model # visqol v3关于如何用 bazel 构建 ViSQOL 二进制请参考 Google 官方开源仓库的说明AudioCraft 只提供调用包装不负责二进制本身的构建。三、音频生成质量指标FAD / KLD / 文本一致性 / Chroma3.1 Frechet Audio DistanceFAD分布级生成质量FAD 衡量生成音频集合与参考音频集合在 VGGish 嵌入空间中的 Fréchet 距离数值越低代表两个集合分布越接近。AudioCraft 使用 Python 包装器调用 Google Research 的 TensorFlow 实现audiocraft/metrics/fad.py。启用命令同样是一个开关 一个路径# 第一个参数激活 FAD 计算第二个参数指向 google-research 仓库路径 dora run ... evaluate.metrics.fadtrue metrics.fad.binpath_to_google_research_repositoryFAD 是依赖最重、配置最繁琐的指标。仓库源码audiocraft/metrics/fad.py记录了完整的踩坑过程与安装要点需要从 google-research 与 tensorflow/models 克隆代码并将models/research/audioset拷贝为google-research/tensorflow_models/audioset包需要对原代码做若干 Python 3 / TensorFlow 2.x 适配修改如xrange→range、tf_record_iterator(...).next()→.__next__()、import vggish_params→from . import vggish_params并为create_embeddings_main增加--batch_sizeflag官方文档明确指出AudioCraft 不承诺为 FAD 的可运行环境搭建提供进一步支持请自行在专用环境如 conda中完成安装推荐安装组合python 3.10 cuda 11.8 tensorflow 2.12.0配套pip install apache-beam numpy scipy tf_slim需要设置两个环境变量指向 TensorFlow 环境的解释器与 cuDNN 库export TF_PYTHON_EXEPATH_TO_THE_ENV_PYTHON_BINARY export TF_LIBRARY_PATHPATH_TO_THE_ENV_CUDNN_LIBRARY # 可选限制 GPU 显存增长 export TF_FORCE_GPU_ALLOW_GROWTHtrue源码实现细节audiocraft/metrics/fad.pyVGGish 模型工作于16kHz 单声道常量VGGISH_SAMPLE_RATE 16_000、VGGISH_CHANNELS 1因此update()会把每对 pred/target 音频重采样到 16kHz 并写入tests/与background/两个临时目录ground truth 写盘时强制使用peak策略避免改变原始音频计算时通过子进程运行frechet_audio_distance.create_embeddings_main分别生成 test 与 background 的嵌入统计再运行frechet_audio_distance.compute_fad输出最终分数多 GPU 环境下会在 0/1 号 GPU 上并行创建两组嵌入束_parallel_create_embedding_beams单 GPU 则顺序执行模型 checkpoint 默认放在 AudioCraft 参考目录//reference/fad/vggish_model.ckpt见 config/solver/musicgen/default.yaml。3.2 Kullback-Leibler DivergenceKLD基于 PaSST 分类器分布AudioCraft 提供基于 SOTA 音频分类器标签概率的 KL 散度 PyTorch 实现默认分类器为PaSSTAudioSet 上预训练的音频 Transformer。KLD 越低说明生成音频与参考音频在分类器看来具有越相似的声学特征。使用前需先安装 PaSST 库作为额外依赖pip install githttps://github.com/kkoutini/passt_hear210.0.19#egghear21passt随后启用指标# kld 指标可以扩展更多音频分类器模型并通过配置选择 dora run ... evaluate.metrics.kldtrue metrics.kld.modelpasst从源码audiocraft/metrics/kld.py可以拆解出完整的实现逻辑基础类KLDivergenceMetricaudiocraft/metrics/kld.py在update()中同时累计kld_pq预测→目标与kld_qp目标→预测两个方向compute()返回四个键kld即kld_pq、kld_pq、kld_qp与kld_both两者之和核心计算公式为F.kl_div((pred eps).log(), target, reductionnone)后沿类别维求和audiocraft/metrics/kld.pyPasstKLDivergenceMetricaudiocraft/metrics/kld.py支持通过pretrained_length选择 10s / 20s / 30s 的预训练变体默认配置使用 20见 config/solver/musicgen/default.yaml内部将音频重采样到 32kHz按最大输入帧切段、丢弃过短的段小于 0.15s并在推理时对torch.stft打补丁以兼容新版 PyTorch 的return_complex参数audiocraft/metrics/kld.py。3.3 文本一致性Text Consistency基于 CLAP 的联合嵌入余弦相似度文本一致性指标衡量「文本描述」与「生成的音频」之间的语义对齐程度思路与 MusicLM 的 MuLan Cycle Consistency、Make-An-Audio 的 CLAP score 一脉相承。AudioCraft 提供基于预训练CLAPContrastive Language-Audio Pretraining的 PyTorch 实现。先安装 CLAP 库pip install laion_clap然后启用指标# 文本一致性指标同样可以扩展其他模型通过配置选择 dora run ... evaluate.metrics.text_consistencytrue metrics.text_consistency.modelclap注意基于 CLAP 的文本一致性指标要求配置中提供 CLAP checkpoint 路径。在默认配置config/solver/musicgen/default.yaml中为text_consistency: use_gt: false model: clap clap: model_path: //reference/clap/music_audioset_epoch_15_esc_90.14.pt model_arch: HTSAT-base enable_fusion: false源码实现audiocraft/metrics/clap_consistency.py要点若未安装laion_clap会抛出ImportError并提示安装命令文本 tokenizer 使用RobertaTokenizermax_length77与 CLAP 默认一致音频统一重采样到48kHz 单声道后提取音频嵌入文本经 tokenizer 后提取文本嵌入最终指标为批内所有音频-文本嵌入对的平均余弦相似度torch.nn.functional.cosine_similarityeps1e-8model_path会经过AudioCraftEnvironment.resolve_reference_path解析支持//reference/...这类占位路径。3.4 Chroma 余弦相似度旋律一致性MusicGen 引入Chroma 余弦相似度是 MusicGen 引入的旋律保持指标分别提取参考波形与生成波形的 chromagram逐帧计算余弦相似度输出全部帧的平均值。该指标零额外依赖直接启用即可dora run ... evaluate.metrics.chroma_cosinetrue源码audiocraft/metrics/chroma_cosinesim.py实现要点底层复用 audiocraft/modules/chroma.py 中的ChromaExtractor构造参数包括sample_rate、n_chroma、radix2_expSTFT 指数、argmax默认配置config/solver/musicgen/default.yaml为sample_rate: ${sample_rate}跟随求解器采样率、n_chroma: 12、radix2_exp: 14、argmax: true音频重采样到 chroma 提取器采样率并转单声道后分别提取 chromagram按实际音频长度sizes / winhop向上取整截取有效帧逐帧计算余弦相似度后累计求和最终返回平均值。需要说明的是由于该指标依赖旋律条件它通常只在具备self_wav旋律条件器的求解器如 musicgen_melody评估中使用。在 audiocraft/solvers/musicgen.py 的评估逻辑中如果配置了预定义的评估 chroma 波形会先重置eval_wavs再计算余弦指标以避免评估被预设波形干扰。四、对比重建音频metric.use_gttrue对于上述所有音频生成指标AudioCraft 额外提供一个统一的开关用「经过 EnCodec 重建的参考音频」替代「生成样本」参与指标计算。这可以量化压缩/分词器环节单独带来的质量损失。dora run ... evaluate.metrics.fadtrue metrics.fad.use_gttrue配置项位于每个指标的配置节中metrics.fad.use_gt、metrics.kld.use_gt、metrics.text_consistency.use_gt、metrics.chroma_cosine.use_gt默认均为false见 config/solver/musicgen/default.yaml。从调用链看audiocraft/solvers/musicgen.pyuse_gttrue时求解器会先把目标音频送入compression_model.encode/decode得到重建音频get_compressed_audio(y)再将其作为y_pred喂给指标文本一致性指标比较特殊use_gttrue时直接以原始音频y作为预测audiocraft/solvers/musicgen.py用于验证 CLAP 本身对同一音频-文本对的打分上限。五、配置文件与求解器调用链指标是如何被装配的5.1 音频生成指标MusicGen 求解器config/solver/musicgen/default.yaml 中集中定义了四类生成指标的完整默认参数metrics: fad: use_gt: false model: tf tf: bin: null # path to local frechet_audio_distance code model_path: //reference/fad/vggish_model.ckpt kld: use_gt: false model: passt passt: pretrained_length: 20 text_consistency: use_gt: false model: clap clap: model_path: //reference/clap/music_audioset_epoch_15_esc_90.14.pt model_arch: HTSAT-base enable_fusion: false chroma_cosine: use_gt: false model: chroma_base chroma_base: sample_rate: ${sample_rate} n_chroma: 12 radix2_exp: 14 argmax: true evaluate: every: 25 num_workers: 5 metrics: base: false fad: false kld: false text_consistency: false chroma_cosine: false注意evaluate.metrics.*全部默认为false这是默认关闭策略的具体体现。装配逻辑在 audiocraft/solvers/builders.py四个get_*工厂函数把配置字典直接映射到对应的torchmetrics.Metric类get_fad还会把 dora 实验目录作为log_folder传入。实际评估发生在 audiocraft/solvers/musicgen.py 的evaluate_audio_generation()按evaluate.metrics.*开关实例化指标遍历评估集对每个 batch 执行生成步骤得到y_pred与参考音频y、实际长度sizes、采样率sample_rates一起喂给各指标的update()最后汇总compute()结果。5.2 音频合成指标Compression 求解器config/solver/compression/default.yaml 中 ViSQOL 与 SI-SNR 的开关配置evaluate: every: 25 num_workers: 5 metrics: visqol: false sisnr: true注意这里 SI-SNR 默认即为true它零依赖、代价低而 ViSQOL 默认关闭。评估函数evaluate_audio_reconstructionaudiocraft/solvers/compression.py按开关分别调用builders.get_visqol与builders.get_loss(sisnr, cfg)。5.3 一键评估配置objective_eval仓库还提供了开箱即用的评估配置 config/solver/musicgen/evaluation/objective_eval.yaml适用于对 pretrained 模型做仅评估execute_onlyevaluatedataset: max_audio_duration: null evaluate: min_audio_duration: 1. # some metrics requires a minimum audio length max_audio_duration: null # all samples from musiccaps should be 20s num_samples: null segment_duration: null generate: min_audio_duration: 1. max_audio_duration: null num_samples: 500 evaluate: metrics: fad: true kld: true text_consistency: true它说明了一个关键约束部分指标要求音频不低于 1 秒min_audio_duration: 1.这是配置评估集时容易踩的坑。六、官方网格示例两段可直接改写的评估脚本6.1 用 ViSQOL 评估 EnCodec 压缩质量audiocraft/grids/compression/encodec_musicgen_32khz.py 展示了如何把 ViSQOL 挂进压缩模型训练网格launcher.bind_(solvercompression/encodec_musicgen_32khz) launcher.bind_(dsetinternal/music_400k_32khz) launcher() launcher({ metrics.visqol.bin: /data/home/jadecopet/local/usr/opt/visqol, label: visqol, evaluate.metrics.visqol: True })模式非常清晰基础实验照常启动再额外提交一个仅打开 ViSQOL 的变体label: visqol用于区分实验。实际使用时把metrics.visqol.bin替换为你自己的 ViSQOL 安装路径。6.2 对预训练 MusicGen 做全指标评估audiocraft/grids/musicgen/musicgen_pretrained_32khz_eval.py 是针对预训练 MusicGensmall/medium/large/melody的评估网格要点包括首次运行需REGEN1 dora grid musicgen.musicgen_pretrained_32khz_eval重新生成网格之后网格变更同样需要REGEN1基础评估使用dset: audio/musiccaps_32khz、solver/musicgen/evaluation: objective_eval、execute_only: evaluate并设置metrics.fad.tf.batch_size: 16旋律相关chroma评估单独使用dset: internal/music_400k_32khz、30 秒片段、1000 样本并显式关闭其他生成指标evaluate.metrics.chroma_cosine: True其余fad/kld/text_consistency均FalseFAD 二进制路径写死在metrics_opts中使用前必须替换为自己的路径生成侧配置了采样参数top_k: 250与transformer_lm.two_step_cfg: True两阶段无分类器引导。类似地AudioGen 与 Audio-Magnet 的预训练评估网格audiocraft/grids/audiogen/audiogen_pretrained_16khz_eval.py、audiocraft/grids/magnet/audio_magnet_pretrained_16khz_eval.py也复用了同一套 FAD 配置模式。七、仓库中的其他评估指标补充除了 docs/METRICS.md 重点介绍的两类指标仓库的 audiocraft/metrics/init.py 还导出两个文档未展开的指标可作延伸了解RelativeVolumeMelRVMaudiocraft/metrics/rvm.py以分贝dB为单位衡量两段波形 mel 频谱的相对音量差异。数值为负且越小代表失真越低取-rvm即为类似 MBD 论文中报告的 SNR。该模块实现了按频段聚合默认num_aggregated_bands: 4输出rvm与rvm_{k}系列分数官方注释明确不保证其梯度数值稳定性不建议用作训练损失。PESQaudiocraft/metrics/pesq.py感知语音质量评估Perceptual Evaluation of Speech Quality内部将输入重采样到 16kHz 后调用pesq库并捕获NoUtterancesError无语音样本时跳过主要适用于语音场景。八、启用与排查速查按依赖从轻到重各指标的启用清单如下指标开关参数额外依赖关键参数备注SI-SNRevaluate.metrics.sisnrtrue无段长/重叠默认 20s/0.5输出为相反数负值代表质量好Chroma 余弦evaluate.metrics.chroma_cosinetrue无n_chroma12、radix2_exp14需旋律条件器30s 片段为宜ViSQOLevaluate.metrics.visqoltrueViSQOL 二进制metrics.visqol.bin、modeaudio 模式 48kHzspeech 模式 16kHzKLDevaluate.metrics.kldtruehear21passtmetrics.kld.modelpasst、pretrained_length输出 kld/pq/qp/both 四个值文本一致性evaluate.metrics.text_consistencytruelaion_clap checkpointmetrics.text_consistency.modelclap、model_path平均余弦相似度FADevaluate.metrics.fadtrueTensorFlow frechet_audio_distancemetrics.fad.tf.bin、TF_PYTHON_EXE、TF_LIBRARY_PATH环境搭建最繁琐见类文档常见排查要点所有开关默认关闭先确认evaluate.metrics.*是否真的打开ViSQOL / FAD 的bin路径必须真实存在否则构造函数直接断言失败见 audiocraft/metrics/visqol.py、audiocraft/metrics/fad.pyFAD 依赖TF_PYTHON_EXE/TF_LIBRARY_PATH环境变量且 checkpoint//reference/fad/vggish_model.ckpt需放置在 AudioCraft 参考目录CLAP 指标缺少 checkpoint 或未装laion_clap时会分别抛出路径断言或ImportError评估集音频时长建议不低于 1 秒参考 config/solver/musicgen/evaluation/objective_eval.yaml否则部分指标如 KLD 的 PaSST 分段逻辑会因片段过短而被丢弃对比重建音频质量时使用metric.use_gttrue它与生成评估可自由组合。以上配置与源码均来自当前仓库指标实现集中在 audiocraft/metrics求解器装配逻辑见 audiocraft/solvers/builders.py 与 audiocraft/solvers/musicgen.py可直接作为深入阅读与二次开发的入口。赞分享人工智能深度学习音频媒体生成音乐生成【免费下载链接】audiocraftAudiocraft is a library for audio processing and generation with deep learning. It features the state-of-the-art EnCodec audio compressor / tokenizer, along with MusicGen, a simple and controllable music generation LM with textual and melodic conditioning.项目地址https://gitcode.com/gh_mirrors/au/audiocraft点击查看免费下载相关推荐SpeechBrain 盲 SI-SNR 估计Blind SI-SNR Estimation实战指南基于 REAL-M 与 LibriMix/WHAMR! 的无参考语音分离质量评估SpeechBrain 盲 SI SNR 估计Blind SI SNR Estimation实战指南基于 REAL M 与 LibriMix/WHAMR!人工智能深度学习语音音频NLP预训练从客观指标到主观体验SadTalker模型评估全指南从客观指标到主观体验SadTalker模型评估全指南 SadTalker是一款基于CVPR 2023技术的AI驱动单图像说话人脸动画工具能够将静态图像与音频人工智能媒体生成计算机视觉深度学习数字人WuWa-Mod终极指南3步解锁鸣潮游戏无限潜能WuWa Mod终极指南3步解锁鸣潮游戏无限潜能 还在为鸣潮游戏中的种种限制而烦恼吗WuWa Mod为你提供了一套完整的游戏增强解决方案。这个开源模组集合通游戏开发上一篇探索高效WebSockets服务1M Go WebSockets下一篇推荐优秀开源项目HP-Socket - 实时通信框架创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →