Chapter3-2_Speech Separation(TasNet)

本文为李弘毅老师【Speech Separation - TasNet】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。

下文中用到的图片均来自于李宏毅老师的PPT,若有侵权,必定删除。

文章索引:

上篇 - 3-1 Deep Clustering, PIT

下篇 - 4-1 Tacotron

总目录

1 TasNet总体架构

TasNet的全程是Time-domain Audio Separation Network,它是一个可以end-to-end去train的一个网络。整个网络可以认为由三个部分组成,分别是Encoder,Separator和Decoder。Encoder相当于是一个Fourier Transformer,可以吃未经处理过的mixed audio原始声音信号,然后吐出一个特征维度为512维的特征向量。Separator会吃这个特征向量,然后吐出两个mask,这两个mask再作用到encoder吐出的feature map上,得到两个separated feature map。最后还有一个decoder,decoder吃这两个feature map。吐出separated audio。
ch3-2-1

2 Encoder和Decoder

TasNet的Encoder和Decoder都是linear transformer,可以看成是两个矩阵。Encoder的输入是一个非常短的声音讯号,只有16个samples,可以看作16维的向量,吐出的是一个512维的向量,Decoder的输入是一个512维的向量,吐出的是一个16维的向量。我们可能会很直觉的认为Encoder里的线性变换和Decoder里的线性变换应该是inverse的,但实际情况是,做了这样的限制之后,模型的效果并不好。对于Encoder而言,如果这个Encoder就是Fourier Transformer的话,那它的输出应该都是正的。但是做了这样的限制,效果也不好。

所以,就是不用做这些限制,直接train就行。
ch3-2-2

3 Separator

这个Separator是很多层dilated convolution的堆叠。它吃的是Encoder的输出,会把这个输出经过多个dilation不断成倍增长的dilated convolution。最后对得到的结果做一个transform和sigmoid得到两个mask。这个sigmoid可以不加,mask 1和mask 2中对应位置的元素之和也不需要是1。
ch3-2-3

实际情况下,这个dilated convolution是有很多层的,最后一层的dilation=128,也就是说有8层( 2 7 = 128 2^7=128 27=128)。然后,这个过程一般会重复3次,这个repeat的次数是可以调整的超参数。这么做的目的就是,当Separator在输出某个mask值的时候,看过足够长的语音信号。比如下图的这种结构,模型单个mask值的输出会考虑1.53s长度的语音。由于用到的cnn太多了,其中还用到了Depthwise Separable Convolution的技术来轻量化模型。
ch3-2-4

在最初的时候,其实Separator用的是LSTM,但是为什么变成了CNN呢?原因就是训练的时候,我们都是从句子的开头开始放进LSTM去train的,这样一来LSTM就没法适应一句话从中间截断送进来的情况,也就是说LSTM很傲娇,刚开始看到的不是句子的开头,就坏掉了。而CNN是time invariant的,它无所谓句子的开头在哪里。从下图中不难看出,总体的表现也是CNN更好。
ch3-2-5

4 TasNet回顾

我们再来回顾一下TasNet的整个架构。如下图所示,图中用的是一个真实的例子画出来的图像,红色和蓝色分别代表不同的speaker,可见TasNet学到的mask可以很好地把两个speaker的声音给分开来。对了,TasNet在train的时候要用上篇中提到的PIT的技巧。
ch3-2-6

最后再来看一下TasNet的效果究竟如何。下图是Wavesplit这篇文章中对不同方法在WSJ0-2mix上结果的对比。不难看出TasNet比Deep Clustering要好很多。但是,在实际情况下,Deep Clustering的泛化能力会比TasNet要好。比如WSJ0-2mix是一个英文的数据集,TasNet在这个数据集上train了之后,给它说中文,它就搞不懂,但是Deep Clustering在这个数据集上train了之后可以把中文给Seperate了。这也是比较奇怪的地方。
ch3-2-7

5 More

上一篇,以及这篇讲的只是Speech Separation中的沧海一粟,还有很多的东西可以讲,这里再稍微拓展一下。

5.1 Unknown number of speakers

当我们不知道输入的信号中有多少speakers的时候,Deep Clustering也许还可以尝试一下调整一下cluster的个数,但TasNet就真的失效了。那当我们不知道speaker的个数的时候,该咋办?下图提供了一种思路,就是我们train一个network,这个network每次只分离出一个人的声音,然后不断循环下去,同时这个network还要神奇地知道我分到什么时候的时候,声音中就剩下2个speakers了,它就可以停了。
ch3-2-8

5.2 Multiple microphones

当我们有多个麦克风的时候该怎么办?其实我们现在使用的大部分设备都是多个麦克风的,用传统的做法的话,有一些处理的技巧,但是用deep learning的话,就直接多输入硬train一发就结束了。
ch3-2-9

5.3 Visual information

在视频当中,我们还可以用到图像的信息。Google有给出过这样面的一个Demo,可见 Looking to Listen: Audio-Visual Speech Separation。大致的思想是在训练的时候加入了人脸的信息,这样的做法,就可以用PIT的训练方式了。这里不做太多的介绍。
ch3-2-10

<think>好的,用户想了解TasNet的相关信息和使用方法。首先,我需要回忆一下TasNet的基本概念。TasNet全称是Time-domain Audio Separation Network,是一种用于语音分离的深度学习模型。与传统的时频域方法不同,TasNet直接在时域处理音频信号,这样可以避免相位重建的问题,提高分离效果。 接下来,用户可能想知道TasNet的核心结构。我记得TasNet主要包含三个部分:编码器、分离模块和解码器。编码器将混合的音频信号转换为高维表示,分离模块通过多层神经网络估计每个说话人的掩码,解码器再将分离后的信号转换回时域。具体来说,编码器可能使用一维卷积,分离模块可能采用类似TCN(时域卷积网络)的结构,而解码器则使用转置卷积。 然后需要解释TasNet的优势。比如,时域处理避免了STFT的缺点,参数较少,计算效率高,适合实时应用。这些优势在论文中应该有提到,比如SDR(信号失真比)指标上的提升,以及更低的延迟。 关于使用方法,用户可能需要知道如何实现或应用TasNet。可能需要使用深度学习框架如PyTorch或TensorFlow,并参考开源项目。比如,GitHub上可能有相关的代码库,用户可以根据示例进行训练和推理。同时,数据准备也是关键,需要单通道混合语音和对应的干净语音作为训练数据。 此外,用户可能关心相关的论文和资源。比如引用中的论文《TasNet: Time-Domain Audio Separation Network for Real-Time, Single-Channel Speech Separation》是基础,还有开源实现如Asteroid框架中的TasNet模块。 可能还需要提到应用场景,比如语音增强、助听器、语音识别预处理等,这些在引用[2]和[4]中提到的SAR和语音任务相关,可以联系起来。 最后,生成相关问题时要覆盖原理、结构、优势、实现、应用和挑战,这样用户能全面了解TasNet。</think>### TasNet语音分离深度学习架构详解 TasNet(Time-domain Audio Separation Network)是一种基于深度学习的端到端时域语音分离架构,相较于传统的时频域方法具有显著优势。其核心创新在于直接在时域处理音频信号,避免了传统方法中短时傅里叶变换(STFT)带来的相位重建问题[^2]。 #### 一、核心结构 $$ \text{输入} \rightarrow \text{编码器} \rightarrow \text{分离模块} \rightarrow \text{解码器} \rightarrow \text{输出} $$ 1. **编码器**:将混合语音转换为高维特征表示 - 使用一维卷积层:$W \in \mathbb{R}^{N \times L}$,其中$N$为基函数数量,$L$为卷积核长度 - 输出特征维度:$T \times N$($T$为时间步长) 2. **分离模块**(核心创新): - 采用堆叠的时域卷积网络(TCN) - 使用空洞卷积扩大感受野 - 门控机制控制信息流:$Output = \text{Conv1D}(x) \odot \sigma(\text{Conv1D}(x))$ 3. **解码器**: - 转置一维卷积重建语音信号 - 输出各说话人分离后的波形 #### 二、技术优势 1. 时域处理避免相位问题(传统方法需单独处理幅度谱和相位谱) 2. 参数效率高(较LSTM减少90%参数) 3. 实时处理能力(延迟<20ms) 4. SI-SDR指标提升8-10dB[^2] #### 三、使用方法示例(PyTorch实现框架) ```python import torch from asteroid.models import TasNet # 初始化模型 model = TasNet( n_src=2, # 分离目标说话人数 n_blocks=4, # 分离模块堆叠次数 n_repeats=2, # 每个TCN块的重复次数 bn_chan=128, # 瓶颈层通道数 hid_chan=512, # 隐藏层通道数 kernel_size=16, # 卷积核尺寸 ) # 处理混合语音 mix = torch.rand(1, 16000) # 输入波形(1秒,16kHz) est_sources = model(mix) # 分离后的语音 [batch, n_src, time] ``` #### 四、关键参数配置建议 | 参数 | 推荐值 | 作用 | |------|--------|------| | 采样率 | 16kHz | 平衡质量与计算量 | | 卷积核长度(L) | 40 | 时域特征提取 | | 基函数数量(N) | 512 | 表征能力控制 | | 块堆叠次数 | 6-8 | 上下文建模深度 | | 批大小 | 8-16 | GPU显存优化 | #### 五、典型应用场景 1. 多人会话分离(会议记录) 2. 语音增强(噪声环境通信) 3. 助听器设备(目标语音增强)[^4] 4. 语音识别预处理(提升识别准确率)
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七元权

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值