rnvad把 VAD 压到 15KB 能用吗与 Silero、TEN VAD 的实测对比rnvad 是一个 12,897 参数的语音活动检测模型通过知识蒸馏从 Silero VAD v4 训练而来。核心数据体积是 Silero 的1/12TEN VAD 的1/6中文对话帧级 F10.892Silero 0.908TEN VAD 0.909——差距 2%噪声 -5dB 下准确率90.7%Silero 84.8%TEN VAD 83.2%——反超 6~7 个百分点纯 C99 实现零依赖INT8 量化后仅 15.3 KB它不是在所有场景下都更好。干净语音和低噪声下它不如大模型。但当你需要一个能塞进 MCU、不依赖 ONNX Runtime、在嘈杂环境下还能用的 VAD——这个体积精度比值得考虑。为什么做这个嵌入式 VAD 的需求很明确体积小、延迟低、不依赖 GPU。现有方案要么太大Silero 628KB ONNX要么需要复杂的前端TEN VAD 依赖 FBank LSTM。我想验证一个假设DSP 手工特征 极小 GRU 能否通过蒸馏达到接近大模型的判别能力16kHz 音频 → 34维 DSP 特征Bark 能量 F0 非平稳度→ 2层 GRU(h32) → sigmoid三方对比模型规格rnvadSilero VAD v4TEN VAD架构GRU (h32, l2)STFTConvLSTMSepConv2D2×LSTM参数量12,897155,908 (12×)75,516 (6×)文件体积52.8 KB628.8 KB308.1 KB帧移32 ms32 ms10 ms输入34维 DSP 特征512 raw PCM3×41 FBank依赖无纯 C99ONNX RuntimeONNX Runtime实时倍率323×586×254×三个模型都快到不是瓶颈RTF 4‰但 rnvad 的优势在于零依赖部署——不需要 ONNX Runtime交叉编译到 MCU 只需一个 C 编译器。英文测试集帧级精度vs 教师标签在 LibriSpeech test-clean 200 条音频上以 Silero 输出为参考标签帧级准确率MAErnvad97.6%0.033Silero VAD100%参考0.000TEN VAD94.3%0.150rnvad 作为学生在干净语音上与教师的一致性达到 97.6%。TEN VAD 因为架构和训练数据不同偏差更大。中文对话测试集帧级 F1在 MDT2021S003 双人对话数据集上20 clips × 5min人工标注测帧级 F1帧级 F1标准差rnvad0.892±0.017Silero VAD0.908±0.026TEN VAD0.909±0.016三者差距在 2% 以内。考虑到 rnvad 只用英文朗读数据训练从未见过中文这个结果说明 DSP 前端的语种无关性确实有效——Bark 频带能量和基频不依赖具体语种的频谱分布。噪声鲁棒性低 SNR 下的真正差距这是最有意思的结果。在 LibriSpeech MUSAN 噪声混合测试中SNRrnvadSilero VADTEN VADClean97.6%100.0%94.2%20 dB97.4%97.4%91.9%10 dB95.8%95.1%89.1%5 dB96.2%93.7%87.3%0 dB93.6%91.9%87.4%-5 dB90.7%84.8%83.2%在 5dB 及以下rnvad 全面超越两个更大的模型。-5dB 时领先 Silero 近 6 个百分点领先 TEN VAD 7.5 个百分点。为什么两个可能的原因DSP 特征的天然抗噪性Bark 频带能量本质上是一种平滑的频谱表示对窄带噪声不敏感。非平稳度特征spectral flux关注的是变化而非绝对能量稳态噪声对它影响很小。训练时的噪声增强蒸馏数据在 SNR [-5, 25] dB 范围内做了增强模型被迫在噪声中学会跟随教师的判断——相当于做了隐式的噪声归一化。TEN VAD 官方测试集PR 曲线在 TEN VAD 官方发布的 30 个带人工标注测试文件上三个模型的 Precision-Recall 曲线高度重叠。在 threshold0.5 时PrecisionRecallF1rnvad0.8940.9440.919Silero VAD0.9280.8560.890TEN VAD0.8860.9350.910rnvad 在高 recall 区间表现更好得益于 DSP 前端对弱语音的敏感性Silero 在高 precision 区间更优。训练细节项目内容教师Silero VAD v4~6000h 多语种训练语音LibriSpeech train-clean-100英文有声书~100h噪声MUSAN环境噪声、音乐~1600 文件增强SNR [-5, 25] dB增益 [-12, 12] dB损失BCE学生 vs 教师逐帧概率优化Adam, lr1e-3, batch32, ~50 epochs只用了 100 小时英文数据。没有中文、没有多说话人、没有对话场景。模型在这些场景上的表现完全来自蒸馏迁移和 DSP 前端的泛化能力。INT8 量化对称 per-channel 量化权重压缩至 int8bias 保持 float32F32INT8体积50.4 KB15.3 KBmax Δprob—0.00315KB 的模型概率偏差不超过 0.003。推理代码自动检测格式无需修改调用方式。段级评估与后处理在中文对话测试集上加入滞回后处理后的段级指标rnvad 滞回Silero VAD原始Seg Recall0.8160.684Seg Precision0.7440.572Seg F10.7570.571过分割pred/GT1.1×1.4×注意这里 Silero 用的是简单阈值threshold0.5没有加滞回。滞回参数onset0.4, offset0.3, hangover8帧256ms对对话场景的提升非常显著后处理方式Seg F1Offset 延迟简单阈值 0.50.591-1473 ms滞回后处理0.757-393 ms256ms 的 hangover 恰好覆盖了对话中常见的句间停顿呼吸、犹豫避免了过度切割。局限性Offset 精度滞回使 offset 延迟约 393ms教师只有 80ms。对实时转录场景偏高。极低 SNR虽然 -5dB 下仍有 90.7%但已经开始出现 false positive 上升。单帧分辨率32ms 帧移限制了对极短音节100ms的检测精度。TEN VAD 的 10ms 帧移在这方面有天然优势。训练数据单一只用了英文朗读对音乐人声、低语、远场拾音等场景未验证。结论这个实验回答了开头的问题15KB 的 VAD 能用吗要看场景。干净、安静的环境能用但不如 Silero/TEN VAD差 2-3 个百分点噪声环境SNR ≤ 5dB不仅能用而且比大模型更稳定嵌入式部署零依赖、15KB、纯 C99这是它真正的差异化优势模型本身并不比大模型聪明。噪声下的优势来自两个工程选择DSP 手工特征天然抗稳态噪声训练时的噪声增强让模型学会了在恶劣条件下跟随教师。这些选择在干净场景下没有回报在噪声场景下才显现价值。适合的场景嵌入式设备、边缘计算、嘈杂环境工厂、车载、户外的低功耗唤醒。不适合的场景对边界精度要求极高的语音转录前端。下一步换 Silero v6 做教师当前用的是 v4Silero 已经迭代到 v6边界精度和多语种表现都有提升。用更强的教师重新蒸馏上限也会涨。多语种训练数据目前只用了英文朗读跨语种靠 DSP 前端硬扛。加入中文、日语、西班牙语等语种的数据做蒸馏。更多场景覆盖远场拾音、耳语、带背景音乐的播客、电话信道。这些声学条件和朗读差别大目前没测试不确定表现如何。自适应 hangover固定 256ms 对快节奏对话偏长对演讲偏短。可以试根据模型输出的置信度动态调整。测试数据LibriSpeech test-clean (200 clips), MDT2021S003 中文对话 (20×5min), TEN VAD 官方测试集 (30 files), MUSAN 噪声库。所有评测脚本开源。