尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

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

深入 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-TCNDepthwise Separable TCN骨干网络在 Hey Snips 数据集上把唤醒词模型参数压缩到了仅 21K同时将误报率FAR 固定为每小时一次时的漏报率 FRR 压到 0.0197 左右。这篇文章带你拆解 DS-TCN 的压缩魔法并给出实际训练配置。为什么唤醒词模型必须小而快唤醒词模型常被部署在电池供电的嵌入式设备上和语音助手主模型不同它需要7×24 小时持续监听麦克风。这就对模型提出三个硬性要求参数少几十 KB 以内才能塞进单片机或低端 DSP⚡算力低每次推理的 MACs 要尽量小省电可流式推理只依赖历史帧不允许 lookahead延迟低传统的卷积神经网络CNN虽然结构简单但普通卷积的参数量和计算量随通道数平方增长很难满足上述要求。DS-TCN 正是为了解决这个问题而设计的。DS-TCN 的核心深度可分离卷积Depthwise Separable ConvolutionDS-TCN 的关键一招是把普通卷积替换成深度可分离卷积把一次标准卷积拆成两步Depthwise 卷积每个输入通道单独用一个卷积核做空间卷积互不相通参数仅channel × kernel_sizePointwise 卷积用1×1卷积把通道信息融合起来参数为channel × channel对比一下参数量设通道数 C、卷积核大小 K普通 Conv1dC × C × K深度可分离C × K C × C当 K8、C64 时普通卷积需要 32768 个参数而深度可分离只需 512 4096 4608 个参数压缩约 7 倍而表达能力几乎不变。这就是21K 参数奇迹的数学基础。在 WeKws 中这个结构实现在wekws/model/tcn.py的DsCnnBlock里第一段Conv1d(channel, channel, kernel_size, groupschannel)即 depthwise 卷积第二段Conv1d(channel, channel, kernel_size1)即 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.1ds: true就是打开深度可分离开关切换为DsCnnBlock4 层膨胀卷积 64 维隐藏层就是 21K 参数的全部秘密输入是 40 维 fbank 特征经线性投影后进入 TCN 骨干配上21K 参数我们来验证一下账目fbank 40 维输入模块参数量约线性预处理 40→642.6K4 层 DsCnnBlock64 通道K819.5K分类层0.1K合计≈ 21K可以看到绝大部分参数都集中在骨干网络而骨干又通过深度可分离卷积把体积压到了极限。三种骨干如何切换tcn / mdtc / fsmnWeKws 的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.0087fsmn适合需要更大上下文建模的场景对于语音指令分类任务如 Speech Command还可以在配置里加classifier: global做全局平均池化后再分类。一键训练到部署的完整流程有了配置训练到部署只需跑examples/hey_snips/s0/run.sh的 5 个阶段Stage 0用local/prepare_data.py处理 Hey Snips 原始音频生成data.listStage 1tools/compute_cmvn_stats.py计算全局 CMVN 统计量Stage 2torchrun启动多卡训练--min_duration 50控制负样本切分Stage 3average_model.py平均最近 30 个 checkpoint再用score.pycompute_det.py计算 FRR/FAR 指标Stage 4export_jit.py和export_onnx.py导出推理模型可直接交给 runtime 端部署训练完成后模型可以导出为 ONNX 或 TorchScript 格式配合runtime/目录下的 Android / 树莓派 / ONNX Runtime 前端实现真正的端到端落地。tcn.py中的 Block 还内置了QuantStub/DeQuantStub和fuse_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),仅供参考
返回列表