关键词检测任务调研(Keyword Spotting)(4)

2023-10-28 20:50

本文主要是介绍关键词检测任务调研(Keyword Spotting)(4),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

说明

Small-Footprint Keyword Spotting with Multi-Scale Temporal Convolution 

Abstract 

Introduction

Method 

Experiment

Conclusion

笔者发言 


说明

本文是一些论文的简要,想了解具体内容可以下载原文进行阅读,若是读者对下面文章进行参考,请进行规范引用。

Small-Footprint Keyword Spotting with Multi-Scale Temporal Convolution 

Li, Ximin et al. “Small-Footprint Keyword Spotting with Multi-Scale Temporal Convolution.” ArXiv abs/2010.09960 (2020): n. pag. 

Abstract 

(1) the trade-off between small footprint and high accuracy for KWS(关键词定位) task.

(2) 我们提出了一个多分支时间卷积模块(MTConv),训练阶段替换标准的时间卷积层,性能更好。有多个size不同的时间卷积滤波器,丰富了时间特征空间

(3) 模型在时间和深度上的利用,可以在KWS系统成为一个时间高效的神将网络(TENet)。

(4) MTConv在inference阶段,可以等价地转换为基本卷积结构,这样比起base model,我们不会增加额外的参数和训练成本。

(5) 性能在谷歌语音命令数据集上准确率96.8%,且参数只有100K.

Introduction

 (1) 关键字定位(KWS)是一项旨在检测音频流中预先训练好的单词的任务。其中一个应用就是唤醒词检测

(2) 唤醒词检测:用来启动与移动设备的语音助手的交互,设备资源有限,但是要实现持续监听特征词,所有高精度、低延迟以及低占用空间仍然具有挑战性。

(3) DNNs已经被证明能够为KWS提供有效的small-footprint solutions。尤其一些先进的架构,如CNNs,准确性不错under limited memory footprint as well as computational resource scenarios(有限内存占用和有限的计算资源)。

(4) 第一个问题:基于2D-CNN的方法,网络浅时很难捕获低高频之间的依赖性。为解决该问题,在一些工作中,[8,9]利用一维时间卷积来提取高级频率特征。尽管它们取得了成功,但由于固定的核大小(即二维卷积为3×3,9×1为1维卷积),因此没有考虑到聚合短期和长期时间信息特征的能力。事实上,捕获不同尺度的时间信息是很重要的,因为关键字的特征在时间尺度上通常是不同的。

(5) 本文方法

  • 时间特真丰富,
  • MTConv可以等价地转换为具有增强核的原始时间卷积层,使得输出与标准时间卷积的输出一样。
  • 占用内存与准确度之间有个比较好的平衡,我们提出的TENet,由1×1 convolution, 9×1 depthwise convolution and 1 × 1 convolution构成的倒置瓶颈块。

(6) 贡献

  • 我们提出了一种基于深度时间卷积的时间高效神经网络
  • 进一步提出多分支的时间卷积模块MTConv,以获得多尺度时间特征,它在inference阶段可以转化成标准的时间卷积。(训练阶段是MTConv,推理阶段转化为标准时间卷积STConv
  • 我们的base TENet inference获得96.6%的准确性,
  • 换成MTConv训练,inference时的kernel fusion mechanism,使得性能提高到96.8%。

Method 

(1)数据处理:

  •  先带通滤波器去噪,然后40维的MFCC(30ms的window size and 10ms frame shift),最后将MFCC作为输入数据送入神经网络。维度:(T,F)帧数*40

(2) TENet【8】:

   1) 首先将输入的MFCC特征视为时间序列,维度[T,1,F],因此模型中的所有卷积都沿时间维度。

   2) 模型结构受[11]启发,TENet的主要模块IBB(倒置瓶颈块),带残差的瓶颈时间去分离卷积。(顶和底瓶颈,中间膨胀层,两者之间的channel size比值为1:3)

  • Conv1x1:通过扩大信道数,将输入嵌入高维子空间,
  • 深度Conv9x1:将tensor重新转化为低位紧的子空间,用于信道间的信息传输。它是时间卷积的重要模块,每个信道一个卷积滤波器来执行实现轻量级滤波,伴随着非线性变换。
  • Conv1x1:当输入和输出的大小不匹配时,利用1×1卷积来匹配维度。

   3) 通过叠加IBB层,可以很容易地构建时间高效的神经网络。

(3) Multi-Scale Temporal Convolution:

    1) 在训练阶段,将深度卷积替换为MTConvs进行训练,在推理阶段,MTConv训练的TENet可以等价地转换为基础TENet,这节省了模型参数和计算成本。

   2) MTConvs是具有不同的核大小和批归一化

   3) 具体地说,MTConv中每个分支的内核大小彼此不同,从而帮助该分支从自己的时间粒度中学习独特的模式。膨胀区新增两个分支,增强了捕获短期时间特征的能力。

 

   4) Relu的输入并不是concat每个分支的输出,而是以元素的方式将每个分支的输出相加。  (多尺度核    融合   一个增强核)

   5) 标准卷积训练的核  VS.  增强核:后者包含更丰富的时间信息,从而产生更好的性能。

 (4)  Kernel Fusion of MTConv(核融合)

   1) 输入M:[T,1,C],  C个滤波器的concatenation  F:[D,1,C],(kernel size of D × 1 and C filters)

       输出O:[T,1,C]

                    M                                       F

       所以第j个滤波器输出的第t个元素,再通过batch normalization后为:  

       

       K = (D-1)/2,且D为基数,如9,5,3,则对应k=4,2,1

   2) 再变成多分支,为了方便融合,所以三个F按照最大的k(即4)来补零。

       根据方程(2),我们对小内核做零填充,这样所有的内核都具有相同的大小,

    

         成为多尺度增强核。

      

        这也应证了上文说的MTConv等价于是带有ˆF核βˆ偏差的,且去掉标准化的卷积。 

Experiment

 (1) 谷歌的数据是:上千人关于30中不同的关键词的一秒长的发音文件,总共有65k个文件。80%训练。验证集测试集各10%。

(2) 训练数据中随机80%增加了一些服从非均匀分布(0,0.1)的噪声,作为背景噪声,还增加了随机时移:(-100,100)ms之间的值

(3) 初始30K学习率为0.01,每10k衰减0.1.,batchsize=100,标准权重衰减设置为0.00004.

(4) 我们分别用MTConv和标准卷积来训练TENet的所有四个实现,每个实现都经过20次的平均性能训练。  TENet6,TENet12,TENet6-narrow,TENet12-narrow,四种

(5) 默认的MTConv由四个分支组成,分别包含3×1、5×1、7×1和9×1卷积核。

(6) 性能指标:accuracy模型的参数数量以及multiply操作

(7) 结果:

  • 不加MTConv时的TENet,比起别人的方法[7]、[8],我们的性能不错,且模型参数少,multiply数也少。
  • 加入MTConv:四种配置的TENet都有性能提升了0.15% ~0.32%。
  • 分支越多,性能越好。

Conclusion

(1) 轻量级、高效的、占用内存小的KWS,

(2) 为了同时聚合短期和长期的时间信息特征,我们引入了一个具有不同核大小的多分支时间卷积模块,丰富了时间特征空间,以获得更好的性能。

(3) 我们的基本模型(TENet)性能接近目前最先进的模型,且我们只用了他们1/3的参数量,乘法操作也少。

(4) 引入了MTConv, 但由于核融合机制,没有增加额外的参数或计算成本。

笔者发言 

  • 关于关键词检测任务,读者想了解更多文章可以去 关键词检测任务调研(Keyword Spotting)(1)https://blog.csdn.net/LJJ_12/article/details/120079279  中一览,
  • 然后可以去 https://www.semanticscholar.org/ 根据关键词进行文章搜索,完成自己的探索
  • 我只是分享自己的一点学习成果,这只是KWS任务的冰山一角,还有很多有效的方法等待你去挖掘
  • 相关代码(谷歌的):https://github.com/hyperconnect/TC-ResNet 

这篇关于关键词检测任务调研(Keyword Spotting)(4)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/295868

相关文章

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

如何使用Python实现一个简单的window任务管理器

《如何使用Python实现一个简单的window任务管理器》这篇文章主要为大家详细介绍了如何使用Python实现一个简单的window任务管理器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 任务管理器效果图完整代码import tkinter as tkfrom tkinter i

Spring Boot 集成 Quartz 使用Cron 表达式实现定时任务

《SpringBoot集成Quartz使用Cron表达式实现定时任务》本文介绍了如何在SpringBoot项目中集成Quartz并使用Cron表达式进行任务调度,通过添加Quartz依赖、创... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

Spring Boot中定时任务Cron表达式的终极指南最佳实践记录

《SpringBoot中定时任务Cron表达式的终极指南最佳实践记录》本文详细介绍了SpringBoot中定时任务的实现方法,特别是Cron表达式的使用技巧和高级用法,从基础语法到复杂场景,从快速启... 目录一、Cron表达式基础1.1 Cron表达式结构1.2 核心语法规则二、Spring Boot中定