主流语音端点检测(VAD)模型对比:FSMN-Monophone、Silero 与 pyannote 性能测试与分析
本文对比测试了三种主流语音端点检测(VAD)模型:FSMN-Monophone VAD、Silero VAD和pyannote/segmentation-3.0。MAGICDATA-RAMC和WenetSpeech数据集上的测试结果显示:FSMN在召回率和处理速度上表现最优(F1达0.9584,平均耗时3.1565秒),适合高实时性ASR场景;Silero精确率最高(0.9890),但召回率较低,
主流语音端点检测(VAD)模型对比:FSMN-Monophone、Silero 与 pyannote 性能测试与分析
语音端点检测(Voice Activity Detection,简称 VAD)是音频信号处理领域的核心技术之一,其核心功能在于精准判断音频流中是否包含人声信号,并能进一步划分出人声与非人声(如背景噪音、静默段)的时间边界,在语音识别(Automatic Speech Recognition,简称 ASR)等关键任务中承担着 “信号筛选” 的基础作用,直接影响下游任务的处理效率与精度。
1. VAD模型
通过调研,选择了三个主流模型进行测试分别是FSMN-Monophone VAD、Silero VAD和pyannote/segmentation-3.0
1.1 FSMN-Monophone VAD
FSMN-Monophone VAD是达摩院语音团队提出的高效语音端点检测模型,用于检测输入音频中有效语音的起止时间点信息,并将检测出来的有效音频片段输入识别引擎进行识别,减少无效语音带来的识别错误。
使用示例:
from funasr import AutoModel
model = AutoModel(model="iic/speech_fsmn_vad_zh-cn-16k-common-pytorch", model_revision="v2.0.4", device="cpu")
res = model.generate(input='path_to_audio_file', disable_pbar=True)
print(res)
输出样例:
[{'key': 'TEST_MEETING_T0000000001_S00000', 'value': [[0, 5450], [5980, 9810], [10090, 12350]]}]
1.2 Silero VAD
【github】
使用示例:
from silero_vad import load_silero_vad, read_audio, get_speech_timestamps
model = load_silero_vad()
wav = read_audio('path_to_audio_file')
speech_timestamps = get_speech_timestamps(
wav,
model,
return_seconds=True, # Return speech timestamps in seconds (default is samples)
)
print(speech_timestamps)
输出样例:
[{'start': 0.5, 'end': 5.5}, {'start': 6.3, 'end': 9.6}, {'start': 10.1, 'end': 12.2}]
1.3 pyannote/segmentation-3.0
【Hugging Face】
使用示例:
# instantiate the model
from pyannote.audio import Model
model = Model.from_pretrained(
"pyannote/segmentation-3.0",
use_auth_token="HUGGINGFACE_ACCESS_TOKEN_GOES_HERE"
)
from pyannote.audio.pipelines import VoiceActivityDetection
pipeline = VoiceActivityDetection(segmentation=model)
HYPER_PARAMETERS = {
# remove speech regions shorter than that many seconds.
"min_duration_on": 0.0,
# fill non-speech regions shorter than that many seconds.
"min_duration_off": 0.0
}
pipeline.instantiate(HYPER_PARAMETERS)
vad = pipeline("audio.wav")
# `vad` is a pyannote.core.Annotation instance containing speech regions
print("result:", vad)
for segment in vad.itertracks(yield_label=True):
print(segment)
if segment[2] == "SPEECH":
print("segment:", segment[0])
print(f"start: {segment[0].start}, end: {segment[0].end}")
【注意】: use_auth_token需要再huggingface上申请
输出样例:
result: [ 00:00:00.030 --> 00:00:05.717] 0 SPEECH
[ 00:00:05.987 --> 00:00:12.383] 0 SPEECH
(<Segment(0.0309687, 5.71784)>, 0, 'SPEECH')
segment: [ 00:00:00.030 --> 00:00:05.717]
start: 0.03096875, end: 5.71784375
(<Segment(5.98784, 12.3835)>, 0, 'SPEECH')
segment: [ 00:00:05.987 --> 00:00:12.383]
2. VAD测试
2.1 测试指标
真实的总语音时长 T_true:所有标注答案判定语音段的时长之和
预测的总语音时长 VAD_total:所有VAD模型判定语音段的时长之和
正确检测的语音时长 Hit:VAD模型判定的语音段与真实语音段的重叠部分之和
召回率 Recall = Hit / T_true
精确率 Precision = Hit / VAD_total
F1分数 F1 = 2×(Precision×Recall)/(Precision+Recall)
2.2 测试数据集
选择MAGICDATA-RAMC和WenetSpeech Internet domain,这两个数据集的原始音频都是长音频,切标注结果带有分割,贴合语音识别场景的实际应用。数据集的具体情况,可参考我的另一篇博客【ASR数据集】中文语音ASR测试集。
2.3 测试结果
2.3.1 MagicData-RAMC测试结果
| 模型 | F1 | Precision | Recall | 平均耗时(秒) |
|---|---|---|---|---|
| FSMN | 0.9584 | 0.9254 | 0.9939 | 3.1565 |
| Silero | 0.9269 | 0.9890 | 0.8722 | 12.0579 |
| segmentation-3.0 | 0.9513 | 0.9677 | 0.9354 | 9.3808 |
2.3.2 WenetSpeech Internet domain测试结果
| 模型 | F1 | Precision | Recall | 平均耗时(秒) |
|---|---|---|---|---|
| FSMN | 0.7574 | 0.6194 | 0.9744 | 2.4715 |
| Silero | 0.7364 | 0.6570 | 0.8376 | 9.7773 |
| segmentation-3.0 | 0.7476 | 0.6366 | 0.9055 | 9.2559 |
2.4 测试结论
FSMN-Monophone VAD 高召回、高速度,适配高效 ASR 场景
该模型在两项测试中均展现出最优召回率与最快平均耗时,且 F1 分数在 MAGICDATA-RAMC 中以 0.9584 位列第一,在 WenetSpeech 中也以 0.7574 领先。其优势在于能最大程度捕捉音频中的有效语音,减少漏检导致的 ASR 信息丢失,同时极快的处理速度可适配长音频实时处理场景,适合对语音覆盖完整性与处理效率要求较高的 ASR 任务。唯一不足是精确率相对偏低,可能会将少量非语音信号误判为语音。
Silero VAD 高精确、低漏判,适配低噪音敏感场景
Silero VAD 的核心优势是精确率突出,在三款模型中均排名第一,意味着其误检率极低,能有效过滤背景噪音、静默等非语音信号,减少无效信号对 ASR 模型的干扰。但该模型召回率表现较弱,存在一定漏检风险,且平均耗时远高于FSMN,处理效率较低。因此更适合对误检敏感、对处理速度要求不高且背景噪音复杂的场景。
pyannote/segmentation-3.0:性能均衡,适配通用语音处理场景
该模型在各项指标上均处于中等偏上水平:F1 分数在 MAGICDATA-RAMC 中达 0.9513、WenetSpeech 中达 0.7476,精确率与召回率表现均衡,无明显短板,平均耗时虽高于FSMN,但低于Silero。其特点是无明显优劣,适合对召回率、精确率无极端要求,追求整体稳定性的通用语音处理场景,可作为 “通用型备选方案”。
总体而言,若需优先保障语音捕捉完整性与处理效率,FSMN-Monophone VAD 是最优选择;若需严格控制非语音信号干扰,Silero VAD 更具优势;若追求性能均衡性与场景适配灵活性,pyannote/segmentation-3.0 可作为可靠选项。
更多推荐
所有评论(0)