从前史到 Conv-TasNet Conv-TasNet 不用频谱图 STFT直接在波形时域里做语音分离的端到端网络。它的核心结构是混合语音 x(t) ↓ Encoder把短波形片段变成可分离的高维表示 ↓ Separator估计每个说话人的 mask ↓ mask × encoder 表示 ↓ Decoder把每个说话人的表示还原成波形也就是图 A 里的Mixture waveform → Encoder → Separation → Mask 相乘 → Decoder → Separated waveforms1. 先说问题语音分离到底在做什么假设一个麦克风录到两个人同时说话x(t) s1(t) s2(t)x(t)是混合波形s1(t)、s2(t)是两个干净说话人的真实波形。语音分离的目标就是只给网络x(t)让它输出s1_hat(t), s2_hat(t)难点在于一个单通道波形里两个声音已经加在一起了。模型必须学会“哪些成分属于说话人 1哪些成分属于说话人 2”。2. Conv-TasNet 之前传统路线是 STFT mask在 TasNet 之前主流方法通常先做 STFT把波形变成时频图waveform → STFT → spectrogram频谱图可以理解成一张图横轴时间 纵轴频率 每个格子这个时刻、这个频率上有多强的声音然后网络估计 maskspeaker 1 mask × mixture spectrogram → speaker 1 spectrogram speaker 2 mask × mixture spectrogram → speaker 2 spectrogram最后再用 iSTFT 变回波形。这类方法的直觉很好如果某个时频格主要是男声就给男声 mask 大一点如果主要是女声就给女声 mask 大一点。但它有几个核心问题STFT 是人工固定变换它不是专门为语音分离学出来的只是通用频谱分析工具。幅度和相位被拆开了很多方法只估计 magnitude spectrogram重建时还要借用混合语音的 phase。相位错了声音质量就会受限。延迟较大要有足够频率分辨率STFT 窗口不能太短。窗口越长实时系统延迟越高。输出顺序问题网络输出两个通道但谁是 speaker 1、谁是 speaker 2本身没有天然顺序。这个问题后来由 PIT、uPIT 等训练方法缓解。这些背景是理解 TasNet 的关键TasNet 不是单纯换了一个网络而是试图把 STFT 这一步也学掉。3. TasNet用“可学习的编码器”替代 STFTTasNet 的全名是 Time-domain Audio Separation Network。它的想法是不要先把波形变成固定频谱图而是让网络自己学习一种适合分离的表示。原来 STFT 路线是waveform → STFT → T-F representation → mask → iSTFT → separated waveformTasNet 改成waveform → learnable encoder → learned representation → mask → learnable decoder → separated waveform可以把 TasNet 的 encoder 理解成一个“可学习的滤波器组”。它会把一小段波形比如长度为L的片段投影到N个特征通道上短波形片段 x_k → N 维特征 w_k论文里常写成类似w H(xU)其中x一小段混合波形Uencoder 的可学习基函数H非线性函数原 TasNet 常用 ReLU使表示非负w编码后的表示然后 separator 估计每个说话人的 maskd_i w ⊙ m_i意思是w是混合语音的编码表示m_i是第i个说话人的 maskd_i是第i个说话人的编码表示⊙是逐元素相乘最后 decoder 把d_i变回波形s_i_hat Decoder(d_i)所以 TasNet 的本质是在一个网络自己学出来的“隐空间”里做 mask 分离而不是在 STFT 频谱图里做 mask 分离。4. 原始 TasNet 的问题原始 TasNet 的大方向是对的但 separator 通常依赖 LSTM/RNN。LSTM 的问题是顺序处理不够并行当前帧依赖前面的状态训练和推理速度受限。参数和计算量较大对低功耗设备不友好。短 encoder 窗口会让序列很长如果 encoder 每 2ms 产生一帧那么几秒语音会产生很多帧LSTM 处理压力大。长程依赖不稳定RNN 的状态传递有时会导致对起始位置敏感。于是 Conv-TasNet 出现了。5. Conv-TasNet把 TasNet 的 LSTM separator 换成 TCNConv-TasNet 保留 TasNet 的三段式Encoder → Separator → Decoder但核心改进是separator 不再用 LSTM而是用 Temporal Convolutional Network也就是 TCN。所以 Conv-TasNet 的 “Conv” 主要指 separation 模块变成了全卷积结构。图 B 里可以这样读Input mixture ↓ 1-D Conv encoder ↓ LayerNorm ↓ 1×1 Conv ↓ 一堆 dilation 逐渐增大的 1-D Conv blocks ↓ 1×1 Conv Sigmoid ↓ Masks ↓ Masks × Mixture representation ↓ 1-D Conv decoder ↓ Separated sources6. Encoder 在 Conv-TasNet 里做什么图 B 左边的1-D Conv就是 encoder。输入是原始混合波形x(t)encoder 用很多个一维卷积核扫描波形得到一个高维表示W Encoder(x)形状大致是W: [N, T]其中Nencoder 通道数也就是学出来多少个 basis/filterT编码后的时间帧数直觉上它有点像 STFT 的频谱图但不是固定正弦余弦基而是网络学出来的“适合分离的声学基”。7. Separator 做什么估计 maskseparator 的输入是W输出是每个说话人的 maskM1, M2, ..., MC如果有两个说话人M1: speaker 1 的 mask M2: speaker 2 的 mask然后D1 W ⊙ M1 D2 W ⊙ M2你可以把 mask 想象成“分配权重”这个编码通道、这个时间点更像 speaker 1 → M1 大 这个编码通道、这个时间点更像 speaker 2 → M2 大图 A 中 encoder 输出分两路一条直接去相乘另一条进 separation 模块估计 mask。最后那个⊗就是 mask 和 encoder 表示逐元素相乘。8. Decoder 做什么decoder 是一个 1-D transposed convolution也可以理解成“可学习的逆变换”。它接收每个说话人的编码表示D_i然后还原成波形s_i_hat(t) Decoder(D_i)所以完整公式可以压缩成W Encoder(x) M_i Separator(W) D_i W ⊙ M_i s_i_hat Decoder(D_i)这就是 Conv-TasNet 最核心的计算链条。9. 图 C1-D Conv block 到底在干什么图 C 是 Conv-TasNet separator 里的基本模块。它看起来复杂但可以分成几步Input ↓ 1×1 Conv ↓ PReLU ↓ Normalization ↓ Depthwise Dilated Conv ↓ PReLU ↓ Normalization ↓ 1×1 Conv → residual output ↓ 1×1 Conv → skip connection解释几个关键词1×1 Conv它不看邻近时间只在同一个时间帧上混合通道。作用类似“通道变换”或“升维/降维”。PReLU激活函数类似 ReLU但负半轴斜率可学习。Normalization稳定训练。非因果模型常用 global LayerNorm因果模型常用 cumulative LayerNorm。Depthwise Dilated Conv这是重点。普通 1-D 卷积看局部时间邻域dilated convolution 会隔着采样点看从而扩大感受野。例如 kernel size 3dilation 1看 t-1, t, t1 dilation 2看 t-2, t, t2 dilation 4看 t-4, t, t4图 B 里颜色标了d 1, 2, ..., 2^(X-1)这样堆起来之后模型可以用很少层数看到很长的上下文。语音分离需要长上下文因为一句话里的音素、说话人特征、韵律都不是单帧能决定的。Depthwise separable convolution它把普通卷积分解成每个通道单独做时间卷积 再用 1×1 Conv 混合通道好处是参数少、计算快。Residual connection让当前 block 的输出继续送到下一个 block方便深层训练。Skip connection每个 block 都贡献一部分信息最后把所有 skip 加起来用于 mask 估计。10. 为什么 Conv-TasNet 效果好核心原因有四个端到端时域建模不需要固定 STFT也不需要显式处理 magnitude/phase 分离。encoder/decoder 是为分离任务学出来的它学到的表示比固定频谱更适合区分说话人。TCN 能高效建模长上下文dilated conv 让模型看到较长时间范围同时保持并行计算。mask 结构保留了分离问题的先验它不是直接凭空生成两个波形而是在混合语音的编码表示上分配成分更稳定。11. 训练时怎么解决“谁是 speaker 1”的问题语音分离有一个很烦的问题输出顺序没有意义。假设真实目标是target 1 张三 target 2 李四模型输出可能是output 1 李四 output 2 张三这其实是分对了但顺序反了。如果硬性要求 output 1 对 target 1就会误罚模型。解决方法是 PITPermutation Invariant Training。训练时枚举所有匹配方式方案 Aoutput1 对 target1output2 对 target2 方案 Boutput1 对 target2output2 对 target1哪个损失更小就用哪个反传。Conv-TasNet 常用 SI-SNR 或 SI-SDR 作为目标。它不是简单比较每个采样点的 MSE而是比较语音信号整体方向更符合分离质量。12. Conv-TasNet 和前面方法的关系可以这样理解它的历史位置阶段代表思路主要做法问题传统方法CASA、ICA、NMF利用独立性、稀疏性、听觉规则泛化和复杂场景有限深度 STFT maskDeep clustering、PIT、DANet、uPIT在频谱图上估计 mask固定 STFT、相位问题、延迟TasNet时域 encoder-decoder学习替代 STFT 的表示再做 maskLSTM separator 计算重Conv-TasNet全卷积 TasNetlearned encoder/decoder TCN separator成为经典强基线一句话总结Conv-TasNet 不是抛弃 mask而是把 mask 从 STFT 频谱空间搬到了一个网络学出来的时域隐空间里并用 TCN 高效估计 mask。13. 看这张图时的阅读顺序你图里的三个部分可以这样对应A. TasNet block diagram讲总思想编码 → 分离 mask → 解码这是 TasNet 和 Conv-TasNet 共用的整体框架。B. System flowchart讲 Conv-TasNet 的完整系统1-D Conv encoder → TCN separator → mask → decoder中间那些d 1, 2, ..., 2^(X-1)就是逐渐扩大的 dilation。C. 1-D Conv block design讲 TCN 里每一个小模块怎么构成1×1 conv → PReLU → Norm → depthwise dilated conv → PReLU → Norm → residual skip14. 最短记忆版如果你之后想快速回忆 Conv-TasNet就记这四句传统方法waveform → STFT → mask → iSTFT。TasNetwaveform → learned encoder → mask → learned decoder。Conv-TasNetTasNet 框架不变但 separator 从 LSTM 换成 TCN。TCN 用 dilated 1-D convolution 看长上下文用 depthwise separable convolution 降低计算量。参考原始论文Conv-TasNet 论文明确把它定义为 encoder、separation、decoder 三阶段并说明其用 TCN 的 dilated 1-D convolution blocks 来估计 masksTasNet 论文则提出了直接在时域用 encoder-decoder 和 source masks 分离语音的思路。来源Conv-TasNet arXiv、TasNet arXiv、PIT arXiv、Deep Clustering arXiv。