深入理解TDNN(Time Delay Neural Network)——兼谈x-vector网络结构

这篇具有很好参考价值的文章主要介绍了深入理解TDNN(Time Delay Neural Network)——兼谈x-vector网络结构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

  • TDNN(Time Delay Neural Network,时延神经网络)是用于处理序列数据的,比如:一段语音、一段文本
  • 将TDNN和统计池化(Statistics Pooling)结合起来,正如x-vector的网络结构,可以处理任意长度的序列
  • TDNN出自Phoneme recognition using time-delay neural networks
  • x-vector出自X-Vectors: Robust DNN Embeddings for Speaker Recognition
  • 此外,TDNN还演化成了ECAPA-TDNN,而ECAPA-TDNN则是当前说话人识别领域,在VoxCeleb1数据集的三个测试集VoxCeleb1 (cleaned)、VoxCeleb1-H (cleaned)、VoxCeleb1-E (cleaned)上的最强模型,因此学习TDNN还是很有必要的

x-vector的网络结构

  • x-vector是用于文本无关的说话人识别的,因此需要处理任意长度的序列,其网络结构如下图所示:
    深入理解TDNN(Time Delay Neural Network)——兼谈x-vector网络结构
  • 上图的迷惑性其实非常大,有必要好好讲解一下,现在我给出从frame1到frame4层(frame5与frame4本质上是一样的,只不过卷积核数量不同)的可视化结果
    深入理解TDNN(Time Delay Neural Network)——兼谈x-vector网络结构
  • 输入:每个特征图表示一帧,特征图的通道数为24,表示一帧的特征数(原文是24维fbank特征),特征图的分辨率是1,在这里需要明确:语音是1维数据,因此特征图并不是二维图,而是一个值,24个特征图堆叠起来构成24维fbank特征
  • frame1
    • frame1的特征图经过1维卷积得到,卷积核大小 i n c h a n n e l s × k e r n e l s i z e × o u t c h a n n e l s = 24 × 5 × 512 inchannels \times kernelsize \times outchannels=24\times5\times512 inchannels×kernelsize×outchannels=24×5×512
    • frame1的每个特征图下面连接的5条线,表示卷积核。这5条线不是5根细线,而是5根麻花线,每根麻花线由 i n c h a n n e l s = 24 inchannels=24 inchannels=24根细线组成,每根细线连接一个特征。每根细线的权重都是一样的,每根麻花线的权重不一样
      深入理解TDNN(Time Delay Neural Network)——兼谈x-vector网络结构
    • k e r n e l s i z e = 5 kernelsize=5 kernelsize=5,对应闭区间 [ t − 2 , t + 2 ] [t-2,t+2] [t2,t+2]一共5帧的上下文,也可以表示为 { t − 2 , t − 1 , t , t + 1 , t + 2 } \left \{ t-2,t-1,t,t+1,t+2 \right \} {t2,t1,t,t+1,t+2},之所以表格说frame1的输入是120,是因为将5帧上下文的特征都计算进去了 5 × 24 = 120 5\times24=120 5×24=120
    • o u t c h a n n e l s = 512 outchannels=512 outchannels=512,表示卷积核的厚度是512,可以理解为5根麻花线堆叠了512次,每次堆叠都得到新的5根麻花线,都符合“每根细线的权重都是一样的,每根麻花线的权重不一样”。5根麻花线同时运算,得到一个值,从而frame1的每个特征图其实也是一个值,且通道数为512,对应表格中的frame1的输出是512
  • frame2
    • frame2的特征图经过1维膨胀卷积得到,卷积核大小 i n c h a n n e l s × k e r n e l s i z e × o u t c h a n n e l s = 512 × 3 × 512 inchannels \times kernelsize \times outchannels=512\times3\times512 inchannels×kernelsize×outchannels=512×3×512
    • 不要被膨胀卷积吓到了,膨胀卷积的 k e r n e l s i z e = 3 kernelsize=3 kernelsize=3,表示3根麻花线中,第2根麻花线连接第t帧,第1根麻花线连接第t-2帧,第3根麻花线连接第t+2帧,对应表格中的 { t − 2 , t , t + 2 } \left \{ t-2,t,t+2 \right \} {t2,t,t+2}共3帧的上下文,这就是膨胀卷积和标准卷积的不同之处,隔帧连接
    • 在PyTorch中,1维卷积的api为
      t o r c h . n n . C o n v 1 d ( i n c h a n n e l s , o u t c h a n n e l s , k e r n e l s i z e , s t r i d e = 1 , p a d d i n g = 0 , d i l a t i o n = 1 , g r o u p s = 1 , b i a s = T r u e , p a d d i n g m o d e = ′ z e r o s ′ , d e v i c e = N o n e , d t y p e = N o n e ) torch.nn.Conv1d(inchannels, outchannels, kernelsize, stride=1, padding=0, dilation=1, groups=1, bias=True, paddingmode='zeros', device=None, dtype=None) torch.nn.Conv1d(inchannels,outchannels,kernelsize,stride=1,padding=0,dilation=1,groups=1,bias=True,paddingmode=zeros,device=None,dtype=None)
      其中, d i l a t i o n = 1 dilation=1 dilation=1表示标准卷积,frame2的膨胀卷积需要设置 d i l a t i o n = 2 dilation=2 dilation=2
    • 在这里我们也发现一点:TDNN其实是卷积的前身,后世提出的膨胀卷积,在TDNN里已经有了雏形,只不过TDNN是用于1维数据的
  • frame3、frame4没有引进新的运算。frame3需要设置 d i l a t i o n = 3 dilation=3 dilation=3,而frame4的卷积核大小 i n c h a n n e l s × k e r n e l s i z e × o u t c h a n n e l s = 512 × 1 × 512 inchannels \times kernelsize \times outchannels=512\times1\times512 inchannels×kernelsize×outchannels=512×1×512,因为 k e r n e l s i z e = 1 kernelsize=1 kernelsize=1,所以与MLP(dense layer)没有本质区别,卷积核通过在每一帧上移动,实现全连接,因此可以看到有些代码实现用 k e r n e l s i z e = 1 kernelsize=1 kernelsize=1的卷积替代全连接
  • 从frame1到frame5,每次卷积的步长 s t r i d e stride stride都等于1,从而对每一帧都有对应的输出,也就是说,对于任意长度的帧序列,frame5的输出也是一个同等长度的序列,长度记为 T T T,而由于frame5的 o u t c h a n n e l s = 1500 outchannels=1500 outchannels=1500,所以表格中统计池化的输入是 1500 × T 1500 \times T 1500×T
  • 统计池化的原理颇为简单,本质是在序列长度 T T T这一维度求均值和标准差,然后将均值和标准差串联(concatenate)起来,所以池化后,序列长度 T T T这一维度消失了,得到了 1500 1500 1500个均值和 1500 1500 1500个标准差,串联起来就是长度为 3000 3000 3000的向量
  • segment6、segment7和Softmax都是标准的MLP,不再赘述
  • 最后segment6输出的 512 512 512长度的向量,被称为x-vector,用于训练一个PLDA模型,进行说话人识别,可以计算一下,提取x-vector所需的参数
    f r a m e 1 + f r a m e 2 + f r a m e 3 + f r a m e 4 + f r a m e 5 + s e g m e n t 6 = 120 × 512 + 1536 × 512 + 1536 × 512 + 512 × 512 + 512 × 1500 + 3000 × 512 = 420 , 0448 \begin{aligned} &frame1+frame2+frame3+frame4+frame5+segment6 \\ =&120 \times 512 + 1536 \times 512 + 1536 \times 512 + 512 \times 512 + 512 \times 1500 + 3000 \times 512 \\ =&420,0448 \end{aligned} ==frame1+frame2+frame3+frame4+frame5+segment6120×512+1536×512+1536×512+512×512+512×1500+3000×512420,0448
  • 参数量并不能代表计算量,因为输入网络的是任意长度的帧序列

文章来源地址https://www.toymoban.com/news/detail-408550.html

到了这里,关于深入理解TDNN(Time Delay Neural Network)——兼谈x-vector网络结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • TDI(Time Delay Integration)

    TDI(Time Delay Integration)是一种特殊的图像采集技术,常用于线阵CCD(Charge-Coupled Device)相机。TDI技术可以在保持高分辨率的同时增强图像的信噪比(Signal-to-Noise Ratio, SNR),从而在低光条件下获取更清晰、更明亮的图像。这种技术主要应用于需要高速、高灵敏度和高分辨率的

    2024年02月12日
    浏览(32)
  • 【计算机网络】深入理解TCP协议二(连接管理机制、WAIT_TIME、滑动窗口、流量控制、拥塞控制)

    正常情况下,TCP需要经过三次握手建立连接+四次挥手断开链接,下面看一个图: 服务器的状态变化: [CLOSED - LISTEN] 服务器端调用listen后进入LISTEN状态, 等待客户端连接; [LISTEN - SYN_RCVD] 一旦监听到连接请求(同步报文段), 就将该连接放入内核等待队列中, 并向客户端发送SYN确认

    2024年02月07日
    浏览(60)
  • Simple Neural Network

    B 站白板推导系列二十三(没有任何数学推导,能够看得很舒服) 李沐-动手学深度学习 相信能看到神经网络的朋友对于机器学习的基础算法已经了解了个大概了,如果你没有听说过感知机算法,那么你可以将它简单理解为你很熟悉的一个算法的弱化版:支持向量机。 感知机

    2024年04月28日
    浏览(31)
  • LSTM Siamese neural network

    本文中的代码在Github仓库或Gitee仓库中可找到。 Hi, 你好。我是茶桁。 大家是否还记得,在「核心基础」课程中,我们讲过CNN以及LSTM。 卷积神经网络(CNN)已经在计算机视觉处理中得到广泛应用,不过,2017年开创性的Transformer神经网络的开创性使其称为一种可行的替代方案,

    2024年02月03日
    浏览(42)
  • RNN:Recurrent Neural Network(上)

    目录 1  为什么提出 RNN 1.1  什么是 Slot Filling 1.2  为什么 FFN 做不好 Slot Filling 1.3  为什么 RNN 能做好 Slot Filling 2  RNN 的整体结构 3  更高级的 RNN 结构 3.1  Deep RNN 3.2  Elman Network Jordan Network 3.3  Bidirectional RNN 原视频: 李宏毅 2020:Recurrent Neural Network (Part I) 李宏毅老师用了一个

    2024年01月19日
    浏览(41)
  • neural network basics2-1

    key words:simple neuron ; multilayer;feedforward;non-linear; (artificial)neural network inspired by the biological neural networls in brains 生物细胞处理信息后,从轴突中输出若干个信号 受神经网络和生物神经元的启发,设计出由计算机能够计算的人工神经元:接受n个数作为输入,然后产生一个数的

    2024年01月20日
    浏览(35)
  • Convolutional Neural network(卷积神经网络)

    目录 Why CNN for Image? The whole CNN structure  Convolution(卷积) Max Pooling Flatten  CNN in Keras  What does CNN learn? what does filter do what does neuron do  what about output  Deep Dream Application Playing Go Speech  Text 当我们直接用一般的fully connected的feedforward network来做图像处理的时候,往往会需要太多

    2024年02月05日
    浏览(46)
  • 卷积神经网络CNN(Convolutional Neural Network)

    一、CNN与NN的区别 卷积神经网络与传统神经网络的区别: 二、CNN的整体架构 1.输入层;2.卷积层;3.池化层;4.全连接层 三、卷积层做了什么 首先将图形分割成一个个小区域,对于每一个区域特征不同;接下来选择一种特征计算的方法,为每一个区域计算特征值,得到特征图

    2024年02月04日
    浏览(75)
  • GraphPlanner: Floorplanning with Graph Neural Network

    GraphPlanner: Floorplanning with Graph Neural Network https://doi.org/10.1145/3555804 在超大规模集成电路芯片的物理实现中,芯片布图规划一直是一项具有高计算复杂度的关键任务。它的主要目标是以最小的线长确定大芯片模块的初始位置,同时坚持密度约束,这在本质上是一个过程,构建一

    2024年02月13日
    浏览(53)
  • Pytorch Tutorial【Chapter 3. Simple Neural Network】

    3.1 Train Neural Network Procedure训练神经网络流程 一个典型的神经网络训练过程包括以下几点: 定义一个包含可训练参数的神经网络 迭代整个输入 通过神经网络处理输入 计算损失(loss) 反向传播梯度到神经网络的参数 更新网络的参数,典型的用一个简单的更新方法:weight = weig

    2024年02月14日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包