news 2026/8/19 20:30:06

深入 WeKws 的 DS-TCN:深度可分离卷积如何把唤醒词模型压缩到 21K 参数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深入 WeKws 的 DS-TCN:深度可分离卷积如何把唤醒词模型压缩到 21K 参数

深入 WeKws 的 DS-TCN:深度可分离卷积如何把唤醒词模型压缩到 21K 参数

【免费下载链接】wekwsProduction First and Production Ready End-to-End Keyword Spotting Toolkit项目地址: https://gitcode.com/gh_mirrors/we/wekws

在智能音箱、耳机和 IoT 设备上,唤醒词检测(Wake-up Word Detection)通常需要常年驻留运行的极轻量模型:参数要少、算力要低、还得支持流式低延迟推理。WeKws 是一个 Production First 的端到端关键词唤醒工具包,其中的DS-TCN(Depthwise Separable TCN)骨干网络在 Hey Snips 数据集上把唤醒词模型参数压缩到了仅 21K,同时将误报率(FAR 固定为每小时一次时)的漏报率 FRR 压到 0.0197 左右。这篇文章带你拆解 DS-TCN 的压缩魔法,并给出实际训练配置。

为什么唤醒词模型必须"小而快"?

唤醒词模型常被部署在电池供电的嵌入式设备上,和语音助手主模型不同,它需要7×24 小时持续监听麦克风。这就对模型提出三个硬性要求:

  • 📉参数少:几十 KB 以内,才能塞进单片机或低端 DSP
  • 算力低:每次推理的 MACs 要尽量小,省电
  • 🔁可流式推理:只依赖历史帧,不允许 lookahead,延迟低

传统的卷积神经网络(CNN)虽然结构简单,但普通卷积的参数量和计算量随通道数平方增长,很难满足上述要求。DS-TCN 正是为了解决这个问题而设计的。

DS-TCN 的核心:深度可分离卷积(Depthwise Separable Convolution)

DS-TCN 的关键一招,是把普通卷积替换成深度可分离卷积,把一次标准卷积拆成两步:

  1. Depthwise 卷积:每个输入通道单独用一个卷积核做空间卷积,互不相通,参数仅channel × kernel_size
  2. Pointwise 卷积:用1×1卷积把通道信息融合起来,参数为channel × channel

对比一下参数量(设通道数 C、卷积核大小 K):

  • 普通 Conv1d:C × C × K
  • 深度可分离:C × K + C × C

当 K=8、C=64 时,普通卷积需要 32768 个参数,而深度可分离只需 512 + 4096 = 4608 个参数,压缩约 7 倍,而表达能力几乎不变。这就是"21K 参数"奇迹的数学基础。

在 WeKws 中,这个结构实现在wekws/model/tcn.pyDsCnnBlock里:

  • 第一段:Conv1d(channel, channel, kernel_size, groups=channel),即 depthwise 卷积
  • 第二段:Conv1d(channel, channel, kernel_size=1),即 pointwise 卷积
  • 每段后面都跟BatchNorm + ReLU,并加上 dropout 防止过拟合

每个 Block 还带残差连接y = y + x),让 4 层堆叠的网络也能稳定收敛。tcn.py中的TCN类则负责按dilation = 2**i逐层递增膨胀率,用 4 层就获得指数级增长的感受野,既能覆盖整句唤醒词,又不会引入过多参数。

20 行 YAML 搭出 21K 参数的唤醒词模型

WeKws 的配置极其简洁,全部模型结构由一份 YAML 描述,训练脚本直接读取。以examples/hey_snips/s0/conf/ds_tcn.yaml为例,核心只有几行:

model: hidden_dim: 64 preprocessing: type: linear backbone: type: tcn ds: true num_layers: 4 kernel_size: 8 dropout: 0.1
  • ds: true就是打开深度可分离开关,切换为DsCnnBlock
  • 4 层膨胀卷积 + 64 维隐藏层,就是 21K 参数的全部秘密
  • 输入是 40 维 fbank 特征,经线性投影后进入 TCN 骨干

配上21K 参数,我们来验证一下账目(fbank 40 维输入):

模块参数量(约)
线性预处理 40→642.6K
4 层 DsCnnBlock(64 通道,K=8)19.5K
分类层0.1K
合计≈ 21K

可以看到,绝大部分参数都集中在骨干网络,而骨干又通过深度可分离卷积把体积压到了极限。

三种骨干如何切换:tcn / mdtc / fsmn

WeKws 的wekws/model/kws_model.py中的init_model函数负责根据配置构建完整模型:GlobalCMVN 归一化 → 预处理投影 → 骨干网络 → 分类器。骨干支持多种选择:

  • tcn:标准 TCN,配合ds: true即 DS-TCN,最省参数
  • mdtc:多尺度深度可分离时序卷积(wekws/model/mdtc.py),在examples/hey_snips/s0/conf/mdtc_small.yaml中约 31K 参数,FRR 可进一步降到 0.0087
  • fsmn:适合需要更大上下文建模的场景

对于语音指令分类任务(如 Speech Command),还可以在配置里加classifier: global做全局平均池化后再分类。

一键训练到部署的完整流程

有了配置,训练到部署只需跑examples/hey_snips/s0/run.sh的 5 个阶段:

  1. Stage 0:用local/prepare_data.py处理 Hey Snips 原始音频,生成data.list
  2. Stage 1tools/compute_cmvn_stats.py计算全局 CMVN 统计量
  3. Stage 2torchrun启动多卡训练,--min_duration 50控制负样本切分
  4. Stage 3average_model.py平均最近 30 个 checkpoint,再用score.py+compute_det.py计算 FRR/FAR 指标
  5. Stage 4export_jit.pyexport_onnx.py导出推理模型,可直接交给 runtime 端部署

训练完成后,模型可以导出为 ONNX 或 TorchScript 格式,配合runtime/目录下的 Android / 树莓派 / ONNX Runtime 前端,实现真正的端到端落地。tcn.py中的 Block 还内置了QuantStub/DeQuantStubfuse_modules(),为后续 INT8 量化推理预留了通道——量化后模型还能再小 4 倍,真正为嵌入式场景而生。

小结

DS-TCN 用深度可分离卷积 + 膨胀因果卷积的组合,在参数规模和建模能力之间找到了绝佳平衡:21K 参数、流式推理、毫秒级延迟,让唤醒词检测可以毫无压力地跑在微控制器上。如果你正在做端到端关键词唤醒,不妨从 WeKws 的ds_tcn.yaml配置起步,几行 YAML 就能复现这个"21K 参数"的小模型。

【免费下载链接】wekwsProduction First and Production Ready End-to-End Keyword Spotting Toolkit项目地址: https://gitcode.com/gh_mirrors/we/wekws

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/19 20:27:16

解不开网易游戏的 NPK 包?这份 unnpk 上手路线图请收好

解不开网易游戏的 NPK 包?这份 unnpk 上手路线图请收好 【免费下载链接】unnpk 解包网易游戏NeoX引擎NPK文件,如阴阳师、魔法禁书目录。 项目地址: https://gitcode.com/gh_mirrors/un/unnpk 你可能在某个资源站下载过《阴阳师》的补丁&#xff0…

作者头像 李华
网站建设 2026/8/19 20:26:07

多核对齐切分:让矩阵乘法在多核上“各干各的“

多核对齐切分:让矩阵乘法在多核上"各干各的" 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多…

作者头像 李华
网站建设 2026/8/19 20:23:35

Linux资源合集精选:从装系统到玩转命令行的完整进阶指南

Linux资源合集精选:从装系统到玩转命令行的完整进阶指南 【免费下载链接】awesome-linux :penguin: A list of awesome projects and resources that make Linux even more awesome. :penguin: 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-linux L…

作者头像 李华
网站建设 2026/8/19 20:23:29

lidR 树冠度量计算:从点云分割到每木属性的完整指南

lidR 树冠度量计算:从点云分割到每木属性的完整指南 【免费下载链接】lidR Airborne LiDAR data manipulation and visualisation for forestry application 项目地址: https://gitcode.com/gh_mirrors/li/lidR lidR 是 R 语言中面向林业应用的机载 LiDAR 点…

作者头像 李华