引用说明:FSMN-VAD引用魔塔社区项目:https://modelscope.cn/models/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch/summary
感谢阿里大佬的开源与介绍。
这篇文章主要介绍两种的ASR中的VAD开源模型,第一种就是FSMN-VAD,这个是达摩院语音团队提出的高效语音端点检测模型,用于检测输入音频中有效语音的起止时间点信息。它使用了一种称为Finite State Machine Networks(FSMN)的神经网络结构,该结构能够有效地建模长期依赖关系。FSMN-VAD将输入的音频信号转换为时频表示,并通过FSMN网络对时频特征进行建模和分类,以决定每一帧是否包含有声音。该算法还利用了前后文语境信息,以提高语音活动检测的准确性。
Silero-VAD是另一种用于语音活动检测的算法,它是由Silero AI团队开发的。该算法是基于深度学习的,使用了一种称为VGGish的卷积神经网络结构。Silero-VAD首先将输入的音频信号转换为时频表示,并将其作为输入提供给VGGish网络,以进行特征提取和分类。通过训练大量的语音数据,Silero-VAD能够准确地识别出声音活动的存在与否。
FSMN-VAD和Silero-VAD都是用于语音活动检测的先进算法,它们在准确性和效率方面都取得了很好的表现。这些算法在语音识别、音频分类和语音分割等领域都有广泛的应用潜力。这篇文章主要简单介绍FSMN-VAD和Silero-VAD与这两个算法使用。因为这是我的学习记录,所以欢迎各位大佬指正,出现错误可以评论或者私信。
FSMN-VAD的地址:https://github.com/modelscope/FunASR
Silero-VAD的地址:https://github.com/snakers4/silero-vad
FSMN-Monophone VAD是达摩院语音团队提出的高效语音端点检测模型,用于检测输入音频中有效语音的起止时间点信息,并将检测出来的有效音频片段输入识别引擎进行识别,减少无效语音带来的识别错误。
模型结构层面,FSMN模型结构建模时可考虑上下文信息,训练和推理速度快,且时延可控;同时根据VAD模型size以及低时延的要求,对FSMN的网络结构、右看帧数进行了适配。在建模单元层面,speech信息比较丰富,仅用单类来表征学习能力有限,将单一speech类升级为Monophone。建模单元细分,可以避免参数平均,抽象学习能力增强,区分性更好。FSMN-Monophone VAD模型结构如下图所示。
其中带跳跃连接的深度FSMN (DFSMN)示意图:
参考自:https://arxiv.org/abs/1803.05030
DFSMN在标准cFSMN的内存块之间增加了一些跳跃连接,使底层内存块的输出可以定向流到更高层的内存块。在反向传播过程中,高层的梯度也可以直接分配给低层,这有助于克服梯度消失问题。DFSMN中内存块的表述形式如下:
采用跳跃连接主要是因为对于一个语音信号,由于重叠,相邻帧的信息具有很强的冗余性。与波网中的扩展卷积层类似,在内存块中加入跨步因子,以消除这种冗余。
用Python使用FSMN-VAD进行推理,使用阿里的提供的unasr模块进行推理:
from funasr import AutoModel
model = AutoModel(model="fsmn-vad", model_revision="v2.0.4")
wav_file = f"/user/your_wav_path/example.wav"
res = model.generate(input=wav_file)
print(res)
没有安装funasr模块的小伙伴可以去https://github.com/modelscope/FunASR这里进行安装。
也可以用modelscope进行推理:
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
inference_pipeline = pipeline(
task=Tasks.voice_activity_detection,
model='iic/speech_fsmn_vad_zh-cn-16k-common-pytorch',
model_revision="v2.0.4",
)
segments_result = inference_pipeline(input='/user/your_wav_path/example.wav')
print(segments_result)
输出结果单位为ms。
Silero VAD 是预训练的企业级语音端点检测模型,一个音频块 (30+ 毫秒) 在单个 CPU 线程上处理的时间不到 1 毫秒。使用批处理或 GPU 也可以显著提高性能。在某些情况下,ONNX 的运行速度甚至可以提高 4-5 倍。Silero VAD 在包含 6000 多种语言的庞大语料库上进行了训练,它在具有不同背景噪音和质量水平的不同领域的音频上表现良好,且Silero VAD 支持 8000 Hz 和 16000 Hz采样率。
import torch
torch.set_num_threads(1)
model, utils = torch.hub.load(repo_or_dir='snakers4/silero-vad', model='silero_vad')
(get_speech_timestamps, _, read_audio, _, _) = utils
wav = read_audio('/user/your_wav_path/example.wav')
speech_timestamps = get_speech_timestamps(wav, model)
fs = 16000
#转换单位为ms
for segment in speech_timestamps:
segment['start_ms'] = int((segment['start'] / fs) * 1000)
segment['end_ms'] = int((segment['end'] / fs) * 1000)
for segment in speech_timestamps:
print(f" [{segment['start_ms']} ,{segment['end_ms']}],")
感兴趣的小伙伴可以尝试一下这两个在ASR中的VAD模型,个人觉得最终的效果还是FSMN-VAD的效果更好。FSMN-VAD和Silero-VAD都是用于语音活动检测的方法,它们能够自动检测语音和非语音部分,并在不同的环境和场景中都表现出良好的性能。这些技术的发展使得我们能够更好地处理语音信号,为语音识别、语音合成等应用提供了更准确和鲁棒的输入。
引文:
@inproceedings{gao2023funasr,
author={Zhifu Gao and Zerui Li and Jiaming Wang and Haoneng Luo and Xian Shi and Mengzhe Chen and Yabin Li and Lingyun Zuo and Zhihao Du and Zhangyu Xiao and Shiliang Zhang},
title={FunASR: A Fundamental End-to-End Speech Recognition Toolkit},
year={2023},
booktitle={INTERSPEECH},
}
@inproceedings{An2023bat,
author={Keyu An and Xian Shi and Shiliang Zhang},
title={BAT: Boundary aware transducer for memory-efficient and low-latency ASR},
year={2023},
booktitle={INTERSPEECH},
}
@inproceedings{gao22b_interspeech,
author={Zhifu Gao and ShiLiang Zhang and Ian McLoughlin and Zhijie Yan},
title={Paraformer: Fast and Accurate Parallel Transformer for Non-autoregressive End-to-End Speech Recognition},
year=2022,
booktitle={Proc. Interspeech 2022},
pages={2063--2067},
doi={10.21437/Interspeech.2022-9996}
}
@inproceedings{shi2023seaco,
author={Xian Shi and Yexin Yang and Zerui Li and Yanni Chen and Zhifu Gao and Shiliang Zhang},
title={SeACo-Paraformer: A Non-Autoregressive ASR System with Flexible and Effective Hotword Customization Ability},
year={2023},
booktitle={ICASSP2024}
}
@misc{Silero VAD,
author = {Silero Team},
title = {Silero VAD: pre-trained enterprise-grade Voice Activity Detector (VAD), Number Detector and Language Classifier},
year = {2021},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/snakers4/silero-vad}},
commit = {insert_some_commit_here},
email = {hello@silero.ai}
}