音频质量评估全解析:从MOS到深度学习的客观指标与主观听感
干了这么多年音频处理和音质评测被问得最多的问题就是这段音频到底好不好好不好听有没有失真压缩完还能用吗这三个问题看着简单真落地起来极其折腾因为好这个词本身就是个综合体牵扯到人的主观感受也牵扯到一堆可以量化的客观参数。音频质量评估Audio Quality Assessment从来不是拿一个仪器测一下就能拍板的事而是要在主观评价和客观评价之间反复横跳找到一套自己信得过、团队用得来、业务抗得住的评估方案。这篇文章我打算把整个音频质量评估的框架摊开讲。从最经典的MOS主观评分到PESQ、POLQA这些感知客观指标再到最近两年深度学习模型直接预测主观分的玩法每个环节我都会结合自己跑过的测试和踩过的坑来说。适合刚入门音频算法、做音视频通信优化、或者在搞语音合成/增强的同学参考。不管你是要验证一个降噪算法的效果还是想评估自己转码后的音质损失这篇都能给你一条可以照抄的路线。1. 先搞清楚主观评价和客观评价到底在评什么1.1 为什么好不好听很难直接变成一个公式人耳对声音的感知是一个高度非线性的系统。响度不是线性的频率解析能力不是均匀的对失真的容忍程度在不同频段也完全不一样。一个很常见的例子把一个音频的-60dB以下噪声全部去掉用仪器测SNR能提升一大截但人耳基本听不出区别反过来如果在3kHz附近加一个非常小的谐波失真SNR几乎不变人耳却会觉得声音刺耳。这就是为什么音频质量评估不能只靠单一仪表读数必须先理解人耳听觉系统的生理和心理机制。我一直觉得把音频质量评估拆成两个维度来看会更清楚。一个是绝对质量就是这段音频本身听起来怎么样有没有失真、噪声、频响不平坦等等另一个是相对质量就是经过某个系统处理之后和原始参考相比损失了多少。不同的业务场景侧重点完全不同。比如做音乐流媒体重点是相对质量要保证编码后和原始母带的差异尽可能小做语音通信重点是绝对质量因为接收端根本没有原始参考只能判断这声音听着费不费力。1.2 主观评价是标尺客观评价是刻度如果拿尺子来类比主观评价就是这把尺子的定义标准客观评价就是尺子上的刻度。理论上只有人耳说了算因为最终听音频的是人。但人的状态不稳定今天心情好给高分明天累了给低分同一个人隔三天听同一个样本都可能打出不一样的分数。所以业界才花了几十年时间设计出了一套复杂的主观测试方法论让人的评价尽可能稳定、可复现、可统计。客观评价则是在努力逼近人耳判断的结果。早期的客观指标比如SNR、THD更像是用简单物理测量代替人耳精度有限。后来的PESQ、POLQA这类感知模型开始模拟人耳的听觉机制比如频率分组、掩蔽效应、响度感知输出的分数已经能较好地匹配主观MOS。再到今天的深度学习方案干脆直接拿大量主观标注数据训练神经网络让模型自动学会什么样的声音人类会觉得好。这三代方法各有优劣没有谁能完全替代谁。理解这层关系后再看哪些指标适用于什么场景就会清晰很多。下面的几个大章节我分别展开讲主观评价体系、传统客观指标、感知客观指标和深度学习方法最后给出一套我实际在用的评估落地流程。2. 主观评价体系人耳是最终的裁判2.1 MOS评分和ITU-T P.800语音通信领域的黄金标准主观评价里最广为人知的就是MOSMean Opinion Score平均意见分。它的操作方式很粗暴直接找一批试听者让他们在受控环境下给音频打分分数通常是1到5分5分是优4分是良3分是中2分是差1分是极差。最后把所有试听者的分数取平均就是这段音频的MOS值。ITU-T P.800就是规定这套测试方法的标准包括试听人数建议、听音环境要求、评分尺度说明、测试素材组织方式等。但MOS不是随便拉几个人听完打个分就完事的。标准测试对场地和环境噪声有明确要求需要达到近似静音室的条件回放设备要经过校准试听者本身要通过听力筛选确保没有明显听觉损伤。正式测试会用一批已知质量的锚点样本穿插在测试序列中用来校验试听者是否在认真打分。如果某个试听者对锚点样本打出的分数偏离正常范围太多他的数据会被当作无效数据剔除。这套流程的代价是高昂的。一个完整的MOS测试至少要二三十个试听者每个人要听几十上百个样本再加上培训、筛选、环境校准一个测试周期动辄一两周费用也相当可观。所以业界的普遍做法是重大版本决策或者对外验收的时候才做一次正规的主观测试平时快速迭代依赖客观指标做粗略判断。2.2 其他主观评价方法MUSHRA、ACR、DCR与成对比较MOS解决的是绝对打分问题但测试里还有别的玩法。如果是评估音频编解码器的质量业界特别喜欢用MUSHRAMUlti Stimulus test with Hidden Reference and Anchor带隐藏参考和锚点的多刺激测试。这种方法会同时给试听者展示多个版本的音频包括一个隐藏的原始参考其实是原始版本本身、几个候选处理版本、以及一些故意弱化的锚点版本。试听者在0到100的尺度上给每个版本打分因为能平行对比分辨力比绝对MOS高很多。实验结束后还会检查试听者能否正确识别出隐藏参考如果识别不出来说明试听环境或听音能力有问题数据同样作废。对于语音增强和通信质量的场景ACRAbsolute Category Rating绝对类别评级和DCRDegradation Category Rating退化类别评级也用得很多。ACR就是听单个样本然后给绝对评分简单高效DCR则是把原始参考和处理后的版本成对播放让试听者判断处理版本相对于参考的退化程度。DCR对细微失真的敏感度更高更适合评估降噪、回声消除这类处理算法。还有一种很实用的成对比较法就是不做打分只让试听者判断两个版本里哪个更好然后用统计方法算出偏好比例。这个方法特别适合做A/B选型比如同一个降噪算法参数A和参数B哪个更受欢迎用成对比较往往比打分更直观。2.3 主观测试落地时最容易翻车的几个细节我参与过几次正式的主观测试也自己组织过小规模的快速听测有几个细节是特别容易踩坑的。第一是试听者的耳机或音箱校准很多人拿自带的消费级耳机来听低频响应五花八门最后得分方差极大。靠谱的做法是统一使用同一型号经过频响校准的监听耳机并标定好回放声压级。第二是试听片段的长度控制单个样本最好不要超过8到10秒太长的片段会让试听者疲劳注意力下降后评分就开始漂了。第三是样本顺序要随机化不同试听者拿到不同顺序的播放列表避免顺序效应和疲劳效应污染数据。还有一个很重要但经常被忽略的问题试听者到底听懂了测试说明没有。MOS的1到5分听起来很简单但质量的含义很抽象有的人会把音量大小当成质量好坏有的人会对某种特定噪声格外敏感。正式的测试需要先做几轮培训试听让试听者明白评分标准的具体含义。我们自己组织快速听测时也至少会先放两个典型样本给试听者找找感觉再进入正式评分。3. 客观评价指标用数字逼近耳朵3.1 基础电声指标SNR、THD、频率响应和动态范围客观评价的起点是电声指标。信噪比SNR是信号功率与噪声功率的比值单位是dB反映背景噪声的底噪水平。测量方法很简单分别测量信号存在时的功率和静音段的功率做差。但SNR有个明显的缺陷它假设所有噪声在感知上是一样的实际上同样的SNR下白噪声和窄带干扰的听感差别巨大这也是SNR越来越不够用的原因。总谐波失真THD衡量的是系统在输出信号中引入的谐波成分占比测试时通常输入一个纯正弦波分析输出中比基频高整数倍的频率分量能量。THD越低说明系统线性度越好。它的扩展指标THDN还会把噪声功率也算进去更贴近实际使用体验。频率响应则反映系统在不同频率上的增益一致性通常用扫频信号测得理想情况是一条平直的线。动态范围指系统能同时处理最大不失真信号和最小可感知信号的能力反映了系统的容忍度。这一组指标的好处是测量简单、标准化程度高坏处是它们衡量的都是电信号层面的保真度和人耳的真实感知存在偏差。一套频响平直、THD很低的设备听起来未必讨喜反过来很多被发烧友追捧的胆机THD并不低但听感甜润。从这里也能看出客观指标是必要但不充分的。3.2 感知客观指标PESQ、POLQA、PEAQ是怎么模拟人耳的感知客观指标的出现就是为了解决基础电声指标与人耳感知不匹配的问题。这类模型的基本思路是把参考信号和待测信号都转换到与人耳听觉机制对应的感知域在这个域里做差异分析最后映射成一个预测的主观分。语音领域最常用的两次代际演进是PESQ和POLQA。PESQPerceptual Evaluation of Speech Quality是ITU-T P.862标准发布于2001年它模拟了人耳的听觉滤波、响度感知和掩蔽效应输出分数范围是-0.5到4.5通常会被线性映射到1到5的MOS-like范围。我在实际测试里发现PESQ对时间对齐非常敏感如果待测信号和参考信号之间有几十毫秒的延迟差异得分就会大幅下跌所以测试前一般要做延迟对齐预处理。POLQAPerceptual Objective Listening Quality Assessment是ITU-T P.863是PESQ的接替者对宽带和超宽带语音的支持更好对时变失真和重采样场景的鲁棒性更强3G和4G VoLTE时代的语音质量评测基本都转向了它。音频领域对应的是PEAQPerceptual Evaluation of Audio Quality即ITU-R BS.1387。它针对的是宽带音频比如编解码器对音乐音质的损伤评估。PEAQ分基础版和高级版高级版包含更多听觉模型参数准确性更高但计算量也更大。不过说实话PEAQ对现代低码率音频编码器的评估能力有限很多超低码率下出现的梳状滤波感空洞感它不一定能准确反映。所以在音乐音频领域现在反而越来越多地使用MUSHRA这类主观测试来兜底。3.3 面向特定需求的指标STOI、ViSQOL、NISQA和DNSMOS除了国际标准里的指标学术界和工业界还发展出了一批面向特定任务的评估模型。STOIShort-Time Objective Intelligibility短时客观可懂度是评估语音可懂度的经典指标核心思想是比较参考语音和退化语音在短时谱上的相关度输出0到1之间的值越接近1说明越容易听懂。它特别适合评估语音增强算法对听清内容的影响但STOI对音质本身的评价能力很弱一个可懂度很高的信号可能听起来还是又沙又破。ViSQOLVirtual Speech Quality Objective Listener是Google提出的模型同样面向语音质量预测特点是稳定性好、对语料类型不敏感在我实际的跨数据集测试中它的泛化能力确实比PESQ要好一些。NISQA和DNSMOS则是深度学习方法进入音质评估领域的代表。DNSMOS是微软在DNS Challenge中训练的模型它的最大优点是不需要参考信号直接对带噪或增强后的语音给出MOS预测这在真实场景里极其宝贵因为很多实际采集的语音根本没有干净参考可用。NISQA则提供了多种任务支持包括语音质量、自然度、响度等等灵活度很高。深度学习模型对传统模型的碾压之处在于它能够学习到人类主观评分的复杂模式而不是必须依赖简化的听觉模型。但它们的问题也很明显训练数据高度依赖于主观测试的语种、场景和噪声类型换一个完全不同的语料分布分数往往会有偏差。我用DNSMOS测过英文和中文语音样本英文场景下分数分布比较合理中文上偶尔会出现给高分但实际听着一般的情况所以跨语言使用时一定要做本地化验证。3.4 客观指标的计算成本与实时性考量选客观指标不能只看准确性还得看计算成本。PESQ处理一段10秒的音频在普通CPU上可能需要数秒POLQA更重深度学习模型的推理时间取决于模型大小和是否用GPU。如果是离线批量评测比如训练完一个模型后在测试集上跑分这些成本都能忍。但如果你想在实时音频流上做质量监控那就必须选择轻量方案比如简化版的STOI计算、或者用DNSMOS的INT8量化版跑推理还得在延迟和精度之间做取舍。另外所有感知指标都需要参考信号和待测信号在时间上对齐。实际测评中编解码器或者网络传输会引入延迟不做对齐直接计算会导致分数失真。我在批处理流程里一般会用互相关或动态时间规划先做一次对齐再交给指标计算模块这个步骤虽然不起眼却能避免大量误判。4. 主观与客观的桥梁为什么数字会骗人以及怎么防骗4.1 客观指标完全一致的两段音频听感可能完全不同这是我一直在强调的一件事客观指标说一样的时候往往只是它衡量维度上的一样。比如两个降噪算法一个把噪声压得很平但留下了明显的音乐噪声另一个噪声压得没那么狠但残留的噪声很自然它们的SNR和PESQ得分可能非常接近但听感天差地别。人耳对音乐噪声这种非平稳、有节奏感的失真极其敏感而这些细微信号层面的差异并不总能被传统感知模型捕捉到。还有更极端的例子频率响应完全一致的两个音箱因为相位响应和群延迟特性的差异听起来声场和定位感完全不同。所以在对音质有较高要求的场景我从来不止看单一指标而是要求同时看频域、时域、感知域的多组指标再结合主观听感做交叉验证。用医生的诊断来类比听诊器听出来的问题和心电图、CT照出来的问题是从不同维度获取的证据只有结合起来才能下结论。4.2 训练一个调音映射模型让客观分和主观分对齐如果团队里有持续的音频质量评估需求我强烈建议你建立自己的主观-客观映射模型。做法是先对一批有代表性的样本同时做主观MOS测试和客观指标计算拿到一组主观MOS 客观指标的配对数据然后用线性回归、随机森林或者简单神经网络训练一个从客观指标映射到主观MOS的模型。之后再做快速评测时只需要计算客观指标就能用这个模型得到一个接近主观分的预测值。这个思路听起来简单但对数据的要求很高。主观MOS的标注要做到可靠每个样本至少要有20到30个有效评分客观指标要覆盖足够多的维度不能只用一两个指标。我自己做过一个语音增强项目的映射模型效果最好的输入特征组合是PESQ、STOI、DNSMOS和几个基本的噪声估计特征四维特征拟合出来的模型在测试集上的预测MOS与实际MOS的误差控制在了0.3以内直接用它替代短周期的快速主观测试节省了大量人力。4.3 关键指标与适用场景速查结合实战我整理了一张常用的指标速查表方便大家在实际项目里快速选型。这张表我在团队内部贴了很多年基本每次新项目选型都会翻出来看一遍。指标类型是否有参考适用场景输出范围主要局限MOS / ACR主观无需参考整体质量验收、跨系统对比1-5成本高、周期长MUSHRA主观有参考隐藏编解码器听感对比0-100试听者培训要求高SNR客观基础有参考底噪水平评估dB与人耳感知相关性弱THD / THDN客观基础有参考系统线性度评估百分比或dB对某些非线性失真不敏感PESQ (P.862)感知客观有参考窄带/宽带语音质量-0.5-4.5对时间对齐敏感POLQA (P.863)感知客观有参考宽带/超宽带语音1-5计算开销大PEAQ (BS.1387)感知客观有参考音频编码器质量-1-5对低码率损伤反映有限STOI感知客观有参考语音可懂度0-1不反映音质ViSQOL感知客观有参考语音质量1-5对语料类型敏感DNSMOS深度学习客观无需参考增强语音MOS预测1-5跨语言/场景可能偏移NISQA深度学习客观无需参考多维度语音质量1-5需注意训练集语种覆盖5. 一套可落地的音频质量评估流程5.1 测试素材准备好数据是评估的基石正式评估前最重要的事是准备一份有代表性的测试集。我一直坚持一个原则测试集的构成要贴近真实应用场景。做语音通信算法就必须包含不同性别的说话人、不同情绪状态的语音、不同信噪比和噪声类型的环境声、不同采样率格式的文件做音乐编解码评估就要覆盖古典、流行、电子、摇滚等多种曲风因为不同频段能量分布对编码器压力的差异极大。推荐的做法是建立一个黄金测试集固定下来反复使用。每次算法迭代都用同一份测试集跑结果才能横向对比。黄金测试集的规模不用太大语音场景20到30条样本音乐场景15到20条样本通常就够用。关键是样本要标注清楚来源、场景、采样率、预期难度方便后续复盘时定位问题。我自己还会在黄金测试集中埋两条难度极高的样本比如人名不容易听清但语义场噪严重的语音、或者高频信息超丰富的打击乐片段用来快速暴露新算法的短板。5.2 工具链搭建从开源工具到自研评分脚本评估工具链我强烈建议自动化否则每次人工跑指标会崩溃的。基础工具方面FFmpeg用于格式转换、重采样和裁剪SoX可以做简单的信号生成和波形分析Python生态里librosa用于特征提取soundfile用于音频读写。指标计算方面PESQ有官方二进制版本POLQA需要商业授权ViSQOL和DNSMOS都有开源实现STOI可以直接pip安装。这里给一个我常用的命令行组合用于批量计算PESQ前的预处理和评分。假设参考文件是ref.wav待测文件是test.wav需要先将两个文件统一格式# 统一为16kHz、16bit、单声道避免格式差异影响评分 ffmpeg -i ref.wav -ar 16000 -ac 1 -sample_fmt s16 ref_16k.wav ffmpeg -i test.wav -ar 16000 -ac 1 -sample_fmt s16 test_16k.wav # 执行PESQ评分PESQ命令行用法视具体版本而定 pesq 16000 ref_16k.wav test_16k.wav自动化之后建议把每个样本的指标结果输出成CSV并用脚本生成可视化的散点图或箱线图对比不同算法版本在各指标上的分布。有时候看分布比看均值更有价值比如某个算法在大多数样本上表现优秀但偶尔在个别样本上极差这说明算法存在短板分布图一眼就能看出来。5.3 主观与客观结合的实操流程以语音增强算法评估为例我通常的流程分成五步。第一步是准备测试集包含干净语音、添加噪声的混合语音以及经过待测算法增强后的语音。第二步是跑客观指标计算每一段测试语音的PESQ、STOI、DNSMOS同时记录算法处理前后的SNR变化。第三步是快速主观听测我不一定每次都做正式MOS而是自己加上一两位同事用盲听的方式把样本分成明显更好基本持平明显更差三档重点听客观指标之间的矛盾点。第四步是分析差异如果某个样本的DNSMOS很高但手动听着有金属感就把这个样本单独拎出来看频谱图通常能找到问题所在。第五步是回归映射配合上一节提到的映射模型把客观指标折算成预测MOS以便长期跟踪。这套流程看起来不复杂但每一步都有讲究。比如第二步计算指标之前一定要做响度归一化处理因为很多感知指标对响度差异很敏感。通常会用ITU-R BS.1770标准的响度归一化把参考和待测信号的响度统一到同一个目标值这尤其重要。我见过太多团队因为忘了这步最后评估结果被音量差这一因素污染完全失去参考价值。5.4 结果判读要均值更要看极端值和分布拿到评估结果之后不要急着看平均分。平均值会掩盖很多问题比如刚才提到的个别样本极差问题。我会先看每个样本上的分数分布标出所有低于某个阈值的离群点逐个听一遍搞清楚为什么这个样本没做好。很多时候离群点代表的正是算法在特定场景上的真实失败比平均值更能驱动后续优化方向。另一个经验是不要盲目相信任何一个指标的一致性。不同指标在不同算法上的排名可能完全不同遇到这种情况我会回到主观听感去打底以人耳听感优先。如果主观听感无法做出清晰判断我才会引入更多指标比如频谱图、语谱图、基频轨迹等从信号层面找到差异来源。最终我会在评估报告里同时给出客观指标数值、主观听测结论、以及两者不一致的样本分析这份报告对研发决策的帮助远比一个孤零零的MOS值大得多。6. 常见问题与排查技巧实录6.1 高频问题速查表这些年做音频评估遇到过太多奇奇怪怪的问题我把高频问题整理成速查表团队新同学入职我都是直接甩这张表让他先记住。现象可能原因排查思路客观MOS很高但人耳明显觉得闷指标对高频损耗不敏感看语谱图检查高频能量是否衰减PESQ得分极低但听感没有明显问题参考与待测信号时间未对齐先做延迟对齐再重新评分不同指标给出矛盾排名指标适用场景不匹配以主观听测兜底找到矛盾样本分析STOI高但MOS低可懂度好但音质差检查噪声是否被调制成音乐噪声DNSMOS分数漂移很大语料分布与训练集不符用少量主观标注验证调整本地映射同一文件多次测量结果不一致回放链路或监听设备未校准统一设备校准声压级和频响测试结果无法复现环境噪声或试听者状态波动增加试听者数量剔除无效评分6.2 三个值得反复强调的避坑心得第一个心得是绝对不要为了省事用单一指标代表整体音质。我在很多项目里看到过本轮优化目标PESQ提升0.2这种目标本身没有错但如果团队把它当成唯一KPI很容易发生过拟合指标的情况算法专门去迎合PESQ的计算逻辑听感反而变差。更好的做法是三到四个指标组合成评估矩阵外加每轮迭代固定做一轮盲听抽查。第二个心得是样本对齐和响度归一化这两步预处理一定要做扎实。我的习惯是把预处理模块独立出来输入是任意格式、任意响度的文件输出是统一格式、统一响度、时间对齐的文件后续所有指标计算都读取预处理后的文件。这样既保证不同指标之间输入一致也让测评结果能跨时间、跨版本对比。第三个心得是要敢于维护自己的测试集定期更新。黄金测试集绝不是一成不变的当产品形态变化、场景扩展、或者发现某些真实场景样本无法用当前测试集覆盖时就要往集里补充新样本。有一次我们把通话场景从近讲扩展到远场原有的黄金测试集完全不适用只能重新搜集远场语音并标注这个过程听上去繁琐但如果不做评估结果的代表性只会越来越差。回到开头那个问题怎么判断一段音频好不好我的答案始终是别信任何一个单一的分数要建立主观与客观互相验证的评估体系。客观指标告诉你哪里可能有问题主观听感告诉你实际上哪里有问题两者结合起来才能做出靠谱的判断。音频质量评估没有捷径但一条扎实的流程、一组经过验证的指标、一套能落地的工具链会帮你把大量的人力从反复听测里解放出来把精力真正投入到提升音质本身。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →