语音模型流式结构修改要点

对于端侧语音信号处理模型来说,核心结构都是基于CNN+RNN(LSTM/GRU),训练时一般基于非流式模型,效率高易于收敛。训练完成后在移动端部署,受实时率和延迟的要求,一般需要修改流式结构。下面主要阐述,Conv和LSTM/GRU算子修改的原理。

流式推理的核心是把"一次性处理整个序列"改成"逐帧处理 + 缓存历史状态",数学上完全等价,但支持实时推理。

一、Conv

需要缓存历史的input。假设一下场景进行解释:

cpp 复制代码
### 假设场景
1D 卷积,kernel_size=3,输入序列 `[a, b, c, d, e]`

### 非流式卷积:一次处理整个序列


输入:     [a, b, c, d, e]
左侧pad:  [0, 0, a, b, c, d, e]   # 因果 padding,只 pad 左边

卷积计算 (kernel 滑动):
  输出[0] = kernel * [0, 0, a]
  输出[1] = kernel * [0, a, b]
  输出[2] = kernel * [a, b, c]
  输出[3] = kernel * [b, c, d]
  输出[4] = kernel * [c, d, e]

输出:     [y0, y1, y2, y3, y4]   # 一次得到全部


### 流式卷积:逐帧处理,用 cache 存历史


初始 cache = [0, 0]   # 存最近 kernel_size-1 = 2 帧

--- 第 1 帧: 输入 [a] ---
拼接: cache + 输入 = [0, 0, a]
卷积: kernel * [0, 0, a] = y0
更新 cache = [0, a]

--- 第 2 帧: 输入 [b] ---
拼接: cache + 输入 = [0, a, b]
卷积: kernel * [0, a, b] = y1
更新 cache = [a, b]

--- 第 3 帧: 输入 [c] ---
拼接: cache + 输入 = [a, b, c]
卷积: kernel * [a, b, c] = y2
更新 cache = [b, c]

--- 第 4 帧: 输入 [d] ---
拼接: cache + 输入 = [b, c, d]
卷积: kernel * [b, c, d] = y3
更新 cache = [c, d]

--- 第 5 帧: 输入 [e] ---
拼接: cache + 输入 = [c, d, e]
卷积: kernel * [c, d, e] = y4
更新 cache = [d, e]



## 
非流式
   def forward(self, x):
        ...



流式: (cache的是历史帧输入)
   def forward(self, x, cache):
        torch.cat([cache, x], dim=..)
        ...

带卷积的模型转为流式时,非流式模型的卷积设计必须是因果卷积,换而言之就是在左侧做padding,而不能在右侧padding。

至于,什么样的卷积需要改,什么不需要改,大概提一下,也就是kernel_size与时间维度无关,纯在频域维度做的卷积就不需要改,其他的...自己领悟咯。。。

二、LSTM/GRU

这类算子没什么好说的,RNN 的递归特性,当前输出依赖上一时刻的隐藏状态,天生具备流式结构,只需要缓存rnn的status就行了...

cpp 复制代码
非流式:
    def forward(self, x):
        ...
        at = self.att_gru(zt.transpose(1,2))[0]
        ...

流式:
    def forward(self, x, h_cache):
         ...
         at, h_cache = self.att_gru(zt.transpose(1,2), h_cache)
         ... 
相关推荐
m沐沐10 小时前
【深度学习】dlib 人脸关键点检测
人工智能·深度学习·opencv·计算机视觉·pycharm·人脸识别·关键点检测
逻辑君11 小时前
认知神经科学研究报告【20260112】
人工智能·深度学习·数学建模·量子计算
Lambert-Wu11 小时前
常用激活函数总结
人工智能·深度学习·机器学习
卡梅德生物科技小能手15 小时前
卡梅德生物:一文读懂核心炎症靶点TNF(肿瘤坏死因子)
经验分享·深度学习·生活
依然范特东15 小时前
动手学深度学习笔记--数据操作、线性代数
人工智能·笔记·深度学习
万亿少女的梦16816 小时前
基于STM32F103C8T6与ASR Pro的语音控制四足机器人设计
stm32·语音识别·嵌入式系统·四足机器人·舵机控制
感性的随18 小时前
【机器人 / 强化学习】LWD(Learning while Deploying)机器人持续进化的强化学习框架
人工智能·深度学习·机器人
依然范特东18 小时前
深度学习入门学习笔记--感知机、神经网络
笔记·深度学习·学习
2601_9583529019 小时前
研发成本骤降95%:AP-0316 语音模组如何重塑硬件产品的商业逻辑
人工智能·语音识别·降噪处理·音频处理模块·硬件开发模块
卡梅德生物科技小能手19 小时前
卡梅德生物:一文读懂免疫调控核心靶点IL-2(白细胞介素-2)
经验分享·深度学习·生活