深入理解ECAPA-TDNN——兼谈Res2Net、ASP统计池化、SENet、Batch Normalization

news2024/12/1 0:31:28

概述

  • ECAPA-TDNN是说话人识别中基于TDNN的神经网络,是目前最好的单体模型之一
  • 关于TDNN,可以参考深入理解TDNN(Time Delay Neural Network)——兼谈x-vector网络结构

ECAPA-TDNN

  • TDNN本质上是1维卷积,而且常常是1维膨胀卷积,这样的一种结构非常注重context,也就是上下文信息,具体而言,是在frame-level的变换中,更多地利用相邻frame的信息,甚至跳过 t − 1 , t + 1 t-1,t+1 t1,t+1的frame,而去对 t − 2 , t + 2 t-2,t+2 t2,t+2的frame进行连接
  • 在ECAPA-TDNN中,更是进一步利用了膨胀卷积,出现了 d i l a t i o n = 2 , 3 , 4 dilation=2,3,4 dilation=2,3,4的情况。此外,还引入了Res2Net,从而获得了多尺度的context,所谓多尺度,指的是各种大小的感受野
  • 1维膨胀卷积已经在深入理解TDNN(Time Delay Neural Network)——兼谈x-vector网络结构中讲解清楚,下面先介绍Res2Net

Res2Net

  • 经典的ResNet结构如下左图所示,先用 k e r n e l - s i z e = 1 × 1 kernel \text{-} size=1 \times 1 kernel-size=1×1的卷积运算,相当于只针对每个像素点的特征通道进行变换,而不关注该像素点的任何邻近像素,并且是降低特征通道的,所以也被叫做Bottleneck,就好像将可乐从瓶口倒出来,如果是增加特征通道,那么就叫Inverted Bottleneck
  • 1 × 1 1\times1 1×1卷积后,会经过 3 × 3 3\times3 3×3卷积,通常不改变特征通道,如果不需要在最后加上残差连接,那么 s t r i d e = 2 stride=2 stride=2,特征图的分辨率会被下采样,如果需要在最后加上残差连接,那么 s t r i d e = 1 stride=1 stride=1,保持特征图分辨率不变
  • 最后还会有一个 1 × 1 1\times1 1×1卷积,目的是复原每个像素点的特征通道,使其等于输入时的特征通道,从而能够进行残差连接。整个Bottleneck block形似一个沙漏,中间是窄的(特征通道少),两边是宽的(特征通道多)
    在这里插入图片描述
  • 而Res2Net则是在中间的 3 × 3 3\times3 3×3卷积进行的微创新,首先将 1 × 1 1\times1 1×1卷积后的特征图,按照特征通道数进行平分,得到 s c a l e scale scale个相同的特征图(这里的 s c a l e scale scale是“尺度”的意思,Res2Net的作用就是多尺度特征,一语双关)
  • 第一个特征图保留,不进行变换,这是对前一层特征的复用,同时也降低了参数量和计算量。从第二个特征图开始,都进行 3 × 3 3\times3 3×3卷积,并且当前特征图的卷积结果,会与后一个特征图进行残差连接(逐元素相加),然后,后一个特征图再进行 3 × 3 3\times3 3×3卷积
  • 卷积中有一个概念叫感受野,是指当前特征图上的像素点,由之前某一个特征图在多大的分辨率下进行卷积得到的。如下图所示, d i l a t i o n = 1 dilation=1 dilation=1 3 × 3 3\times3 3×3卷积,其输出特征图的每一个像素点的感受野都是 3 × 3 3\times3 3×3,再进行 d i l a t i o n = 1 dilation=1 dilation=1 3 × 3 3\times3 3×3卷积,其输出特征图的每一个像素点的感受野都是 5 × 5 5\times5 5×5
    在这里插入图片描述
  • 因此Res2Net中,第二个特征图的感受野为 3 × 3 3\times3 3×3,第三个特征图的感受野为 5 × 5 + 3 × 3 5\times5+3\times3 5×5+3×3,第四个特征图的感受野为 7 × 7 + 5 × 5 + 3 × 3 7\times7+5\times5+3\times3 7×7+5×5+3×3,以此类推,从而得到多尺度特征
  • 所有的卷积结果都会按照特征通道进行串联(concatenate),由于第一个特征图保留,不进行变换,所以后续的特征图维度必须与第一个特征图相同,因此 3 × 3 3\times3 3×3卷积不改变特征通道和分辨率
  • 最后的 1 × 1 1\times1 1×1卷积,目的是复原每个像素点的特征通道,使其等于输入时的特征通道,从而能够进行残差连接
  • Res2Net可以作为一个即插即用的结构,插入到现有的其他神经网络中,还可以与其他即插即用的结构一起工作,比如SENet和ResNeXt

SENet

  • SENet(Squeeze-and-Excitation Networks)是现代卷积神经网络所必备的结构,性能提升明显,计算量不大。基本思路是将一个特征图的每个特征通道,都映射成一个值(常用全局平均池化,即取该特征通道的均值,代表该通道),从而特征图会映射为一个向量,长度与特征通道数一致
    在这里插入图片描述
  • 之后,对向量进行FC(用1维卷积也行,等价的),输出长度为特征通道数的 1 r \frac{1}{r} r1,然后经过激活函数ReLU,这个过程称为Squeeze(挤压);再进行FC,输出长度与特征通道数一致,然后经过激活函数Sigmoid,这个过程称为Excitation(激励);此时输出向量的每一个值,范围都是 ( 0 , 1 ) (0,1) (0,1),最后用输出向量的每一个值,对输入特征图的对应通道进行加权,这个过程称为Scale(伸缩)
    在这里插入图片描述
  • SENet的结构相当于对特征图的特征通道进行加权,因为每个特征通道的重要性是不一样的,所以让神经网络自行学习每个特征通道的权重,因此是一种Attention机制。并且输入特征图和输出特征图的维度完全一致,从而可以作为一个即插即用的结构,下面是Res2Net与SENet结合得到的结构,被称为SE-Res2Net
    在这里插入图片描述
  • Res2Net还可以与ResNeXt结合,其实就是将中间的 3 × 3 3\times3 3×3卷积换成 3 × 3 3\times3 3×3分组卷积,不过ECAPA-TDNN中没有用到,就不再赘述了,接下来介绍ECAPA-TDNN的具体设计

回到ECAPA-TDNN

  • 在ECAPA-TDNN中所用的Res2Net,是上述结构中的2维卷积全部换成1维卷积,采用的中间 k = 3 k=3 k=3卷积(1维卷积,不能用 3 × 3 3\times3 3×3表示,以下都用 k = 3 k=3 k=3代替)为膨胀卷积,并且随着网络深度增加, d i l a t i o n dilation dilation分别为 2 , 3 , 4 2,3,4 2,3,4。ECAPA-TDNN的结构图如下,SE-Res2Block后面括号内的参数,指的是Res2Block的中间 k = 3 k=3 k=3卷积的参数
    在这里插入图片描述
  • SE-Res2Block的内部,如下图所示,夹着Res2的两个CRB(Conv1D+ReLU+BN)结构的参数为 ( k = 1 , d = 1 ) (k=1,d=1) (k=1,d=1),中间的Res2, s c a l e = 8 scale=8 scale=8,之后的运算与上述Res2Net一致,不过每个 k = 3 k=3 k=3卷积都是膨胀卷积,并且都会接ReLU和BN,从而形成Res2 Dilated Conv1D+ReLU+BN的结构
    在这里插入图片描述
  • 最后的SE-Block是在特征维度进行的,也就是将T个frame的特征,在每个特征维度求平均,得到的向量,长度与特征维度一致,之后的运算与上述SENet一致
  • 之前提到ResNet结构是沙漏型的,但是ECAPA-TDNN的frame-level变换中的ResNet结构,除了Res2会把特征维度进行平分外,其余的运算都没有发生特征维度的变化,关于frame-level变换,详见深入理解TDNN(Time Delay Neural Network)——兼谈x-vector网络结构。ECAPA-TDNN有两个版本,主要区别就在于frame-level的变换中,特征维度是512还是1024
  • frame-level变换之后,则是统计池化(Statistics Pooling),ECAPA-TDNN采用了ASP作为统计池化层,并且还进行了一些改进

ASP

  • ASP(Attentive Statistics Pooling)是2018年提出的,至今仍然广为使用的带有Attention的统计池化层,直到2022年才出现竞争对手(一种带有Multi-head Attention的统计池化)
  • ECAPA-TDNN中对ASP进行了改进,首先将之前3个SE-Res2Block的输出,按照特征维度进行串联,假设frame-level变换中的特征维度是512,由于3个SE-Res2Block的输出维度都是 ( b s , 512 , T ) (bs,512,T) (bs,512,T),所以串联之后是 ( b s , 512 ∗ 3 , T ) (bs,512*3,T) (bs,5123,T),之后经过一个CRB结构,输出维度固定为 ( b s , 1536 , T ) (bs,1536,T) (bs,1536,T),即便frame-level的特征维度是1024,该CRB的输出维度也不变。如下图所示
    在这里插入图片描述
  • 对特征图 ( b s , 1536 , T ) (bs,1536,T) (bs,1536,T),记为h,按照T维度计算每个特征维度的均值和标准差,如上图的TSTP公式所示(符号 ⊙ \odot 表示哈达玛积,即对应项相乘,两个因子的维度必须相同,从而结果的维度与因子的维度也相同),从而T维度消失,得到的均值和标准差维度均为 ( b s , 1536 ) (bs,1536) (bs,1536)
  • 之后的操作很神奇,将均值在T维度重复堆叠T次,维度恢复为 ( b s , 1536 , T ) (bs,1536,T) (bs,1536,T),对标准差也是堆叠,维度恢复为 ( b s , 1536 , T ) (bs,1536,T) (bs,1536,T),接着将特征图、均值和标准差在特征维度进行串联,得到的特征图维度为 ( b s , 1536 ∗ 3 , T ) (bs,1536*3,T) (bs,15363,T),记为H
    在这里插入图片描述
  • 对H进行1维卷积,等价于上图的 W × H + b W\times H+b W×H+b,目的是将每个frame的特征从1536*3维降维映射到F维,F可取128,然后经过tanh激活函数,得到特征图a,维度为 ( b s , F , T ) (bs,F,T) (bs,F,T)
  • 对a进行1维卷积,等价于上图的 V × a + k V\times a+k V×a+k,目的是将每个frame的特征从F维恢复映射到与h相同的维度,即1536,然后在T维度,进行softmax激活,得到特征图a,维度为 ( b s , 1536 , T ) (bs,1536,T) (bs,1536,T)
  • 此时的特征图a的每一行特征,在T维度上求和,都等于1,这是softmax激活的效果,又因为与h的维度相同,所以可以将a视为一种Attention分数,利用上图的ASTP公式,对h求基于Attention的均值和标准差,关于Attention分数,可以参考深入理解Self-attention(自注意力机制)
  • 基于Attention的均值和标准差,维度都为 ( b s , 1536 ) (bs,1536) (bs,1536),再将它们按照特征维度进行串联,得到ASP最终的输出,维度为 ( b s , 1536 ∗ 2 ) (bs,1536*2) (bs,15362),在ECAPA-TDNN中,ASP之后还会接一个BN

BN

  • 这一节是讲BN(Batch Normalization)的,可能观众会感觉我太啰嗦了,怎么连BN都要讲,主要是ECAPA-TDNN是一个完全的TDNN结构,连BN都是1维的,所以怕大家一下子转不过来弯,下面主要讲解1维BN,自认对BN滚瓜烂熟的观众,可跳过本节
    t o r c h . n n . B a t c h N o r m 1 d ( n u m - f e a t u r e s , e p s = 1 e − 05 , m o m e n t u m = 0.1 , a f f i n e = T r u e , t r a c k - r u n n i n g - s t a t s = T r u e , d e v i c e = N o n e , d t y p e = N o n e ) torch.nn.BatchNorm1d(num \text{-} features, eps=1e-05, momentum=0.1, affine=True, track \text{-} running \text{-} stats=True, device=None, dtype=None) torch.nn.BatchNorm1d(num-features,eps=1e05,momentum=0.1,affine=True,track-running-stats=True,device=None,dtype=None)
  • BN中的 n u m - f e a t u r e s num \text{-} features num-features是理解BN的关键,对于图像任务, n u m - f e a t u r e s num \text{-} features num-features要等于输入特征图的通道数,而对于音频任务, n u m - f e a t u r e s num \text{-} features num-features要等于 ( b s , F , T ) (bs,F,T) (bs,F,T)中的F
  • 也就是说,BN必然是作用于图像的特征图通道,或者音频中frame的每个特征的, n u m - f e a t u r e s num \text{-} features num-features是告诉BN,均值和标准差,这两个向量的长度
  • BN计算均值和标准差的操作,与上述ASP的第一步,计算h_mean和h_std是类似的,不过计算的范围是在一个batch中
    μ B = 1 b s ∗ T ∑ t b s ∗ T h t σ B 2 = 1 b s ∗ T ∑ t b s ∗ T ( h t − μ ) 2 \begin{aligned} \mu_B &= \frac{1}{bs*T} \sum_{t}^{bs*T} h_t \\ \sigma_B^2 &= \frac{1}{bs*T} \sum_{t}^{bs*T} (h_t - \mu)^2 \end{aligned} μBσB2=bsT1tbsTht=bsT1tbsT(htμ)2
  • 得到一个batch的统计量后,BN的输出也就确定了,不过需要先将 μ B \mu_B μB σ B 2 \sigma_B^2 σB2重复堆叠成 ( b s , F , T ) (bs,F,T) (bs,F,T)的大小,与输入BN的特征图H的维度相同,才能让其与H进行运算。在训练时,BN的输出
    y t r a i n i n g = γ ∗ H − μ B σ B 2 + ϵ + β y_{training}=\gamma * \frac{H-\mu_B}{\sqrt{\sigma_B^2+\epsilon}} +\beta ytraining=γσB2+ϵ HμB+β
  • 其中
    • ϵ \epsilon ϵ是用于稳定计算的,可取 1 0 − 5 10^{-5} 105
    • γ \gamma γ β \beta β是两个可学习参数,用于将输出进行伸缩和平移,提高模型的表达能力
  • 此外,BN内部还有两个用于估计全局统计量的均值和标准差向量,在训练时,这两个向量根据每个batch的统计量进行更新,在测试时,BN会采用全局统计量对特征图进行规范化
    μ s a m p l e = μ B σ s a m p l e 2 = b s ∗ T b s ∗ T − 1 σ B 2 μ r u n n i n g = ( 1 − m o m e n t u m ) ∗ μ r u n n i n g + m o m e n t u m ∗ μ s a m p l e σ r u n n i n g 2 = ( 1 − m o m e n t u m ) ∗ σ r u n n i n g 2 + m o m e n t u m ∗ σ s a m p l e 2 y e v a l u a t i n g = γ ∗ H − μ r u n n i n g σ r u n n i n g 2 + ϵ + β \begin{aligned} \mu_{sample}&=\mu_B \\ \sigma_{sample}^2&=\frac{bs*T}{bs*T-1} \sigma_B^2 \\ \mu_{running}&=(1-momentum)*\mu_{running}+momentum*\mu_{sample} \\ \sigma_{running}^2&=(1-momentum)*\sigma_{running}^2+momentum*\sigma_{sample}^2 \\ y_{evaluating}&=\gamma * \frac{H-\mu_{running}}{\sqrt{\sigma_{running}^2+\epsilon}} +\beta \end{aligned} μsampleσsample2μrunningσrunning2yevaluating=μB=bsT1bsTσB2=(1momentum)μrunning+momentumμsample=(1momentum)σrunning2+momentumσsample2=γσrunning2+ϵ Hμrunning+β
  • 其中
    • 下标 r u n n i n g running running表示采用移动平均(running average)的方法对全局统计量进行估计
    • 系数 m o m e n t u m momentum momentum是对当前batch的统计量的权重,可取 0.1 0.1 0.1

尾声

  • 在ASP+BN之后,接FC+BN,得到嵌入码,长度是192,最后接损失函数即可
  • 总结一下ECAPA-TDNN的改进
    • 对ASP进行了改进
    • 引进了SE-Res2Block
    • 将多层特征聚合(原文中称为Multi-layer feature aggregation),再送入统计池化层
    • 最后一点,也是有争议的一点改进,原文中称为Multi-layer feature summation,也就是在frame-level的变换中
      • frame-layer2(第二个SE-Res2Block)的输入是frame-layer1(第一个SE-Res2Block)和frame-layer0(第一个CRB)的逐元素相加
      • frame-layer3(第三个SE-Res2Block)的输入是frame-layer2、frame-layer1以及frame-layer0的逐元素相加
      • 实验结果是下图中的C.3,可以看到,如果没有Multi-layer feature summation,EER升高了,但是minDCF降低了,由于VoxSRC是以minDCF作为最终性能指标的,所以Multi-layer feature summation没有在一些开源代码中被实现
        在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152163.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Django项目开发】角色管理模块的开发(八)

文章目录一、序列化器设计1、嵌套的序列化器设计2、普通的序列化类支持:新增、修改角色名、删除、查询3、用于给某一个角色批量授权的序列化4、用于给某一个角色单一授权,包括取消单一授权二、视图类设计1、包含的接口有哪些2、set_permission_to_role方…

听说……国产的领航辅助驾驶系统都很卷?

什么是城市NOA功能? 基于国产芯片的城市NOA功能有看点吗? 国产芯片发展到了什么阶段? 车上配的激光雷达是不是越多越好? 车企常吹的“数据驱动”、“中央计算” 究竟是真是假? ……最近,两家中国公司组CP 推…

基于ros将文件夹中的图像转换为bag包(c++版本)

一、前期工作创建工作空间 二、创建工作包 创建完成后,文件夹的格式为: 三、准备编译文件和代码 3.1 更换编译文件中的内容 将上图中的,CMakeLists.txt文件中的内容,替换为下面的内容 cmake_minimum_required(VERSION 3.0.2) p…

【漏洞复现】Yapi接口管理平台RCE漏洞汇总

文章目录前言YApi接口管理平台远程代码执行漏洞一、漏洞描述二、影响版本三、FOFA语句四、漏洞复现五、修复建议YApi NoSQL注入导致远程命令执行漏洞一、YApi介绍二、漏洞描述三、漏洞分析四、漏洞详情五、影响版本六、漏洞复现七、修复建议前言 本篇文章主要归纳总结YApi各版…

南邮数据结构

md文档网址:https://gitee.com/infiniteStars/wang-dao-408-notes/blob/master/408/数据结构.md 1 绪论 1.1算法的基本概念 程序与算法的区别和联系 联系:程序是计算机指令的有序集合,是算法用某种程序设计语言的表述,是算法在…

2023年如何搭建最小可行性的产品文档/产品手册?

在推出并击败竞争对手进入市场的竞赛中,很容易将“不必要的”任务(如文档)放在次要位置。但根据 Write the Docs 纪录片社区的说法,文档应该既是先导性的,也是参与性的。这意味着您应该在开始开发之前开始记录&#xf…

吊打高斯模糊的stackBlur加入OpenCV

stackBlur介绍 stackBlur 最近才加入到OpenCV中,将在下一个Relase版本(4.7)中出现。C用户可以尝试从源码编译OpenCV体验一下。Python 用户可以尝试用pip安装rolling版本的OpenCV: pip install opencv-python-rolling4.6.0.202210…

新手教程 | 常见的爬虫类型有哪些?

程序猿圈流传着一个神话级别的事:全公司仅靠1个人,每年就能转上1400多万美元。听起来天方夜谭一样,那他是如何做到的呢?看报道就会发现,他利用的是爬虫技术。 随着互联网的发展,从海量的互联网数据中&…

不可错过,Java程序员必备珍藏书单

不要因为迷茫,而停止了脚下的路。给大家推荐一份Java程序员必看的书单,豆瓣评分都挺不错的,往下看! 一、Java 基础篇书单 《Java编程思想》:从Java的基础语法到最高级特性(深入的面向对象概念、多线程、自…

煤矿智能化相关50项团体标准征求意见

智能化煤矿总体架构 原文地址:https://chinacs.scimall.org.cn/a3651.html 由煤矿智能化创新联盟等单位提出,中国煤炭学会归口,中煤科工集团常州研究院有限公司等单位起草的《煤矿通信接口与协议通用技术要求》50项团体标准已完成征求意见稿的…

用 Python 脚本实现电脑唤醒后自动拍照 截屏并发邮件通知

背景 背景是这样的, 我的家里台式机常年 休眠, 并配置了 Wake On Lan (WOL) 方便远程唤醒并使用. 但是我发现, 偶尔台式机会被其他情况唤醒, 这时候我并不知道, 结果白白运行了好几天, 浪费了很多电. 所以我的需求是这样的: 🤔 电脑唤醒后(可能是开机, 有可能是…

3款电脑必装软件,功能强大且免费,打死也舍不得卸载

闲话不多说,直接上狠货。 1、FlowUs息流 FlowUs息流是一款知识管理与协作平台,以云端笔记为载体,配合在线文档、知识库、文件夹等多形态功能,支持免费使用,极大提高个人与团队工作效率。支持多端同步使用,无…

STL空间配置器框架分析

目录 一、空间配置器概念 二、空间配置器的作用 三、内存池技术 四、空间配置器的实现原理 3.1 流程概述 3.2 一级空间配置器 3.3 二级空间配置器 3.3.1 二级空间配置器设计 3.3.2 内存碎片问题 一、空间配置器概念 即为各个容器高效的管理空间(空间的申请与回收)的。…

聊一聊双亲委派模式

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 说起双亲委派模型,不得不说一下类加载器。 类加载器是什么? 当我们编译Java类时,JVM会创建与平台和…

Allegro174版本新功能介绍之移动画布不闪屏设置

Allegro174版本新功能介绍之移动画布不闪屏设置 Allegro在升级到174版本后,在移动画布的时候,视图数据量比较大的情况,会出现闪屏现象 Allegro在切换到Open GL模式下,这个现象会有所缓解,具体操作如下 选择Setup选择User-preferences

【Ansible】ansible 基础知识

ansible 文章目录ansible一、ansible Ad-Hoc 命令1.命令格式2.模块类型3.联机帮助4.常用模块4.1 command & shell 模块4.2 script 模块4.3 copy 模块4.4 yum_repository4.5 yum 模块4.6 systemd 模块4.7 group 模块4.8 user 模块4.9 file 模块4.10 cron 模块4.11 template …

SIE高级副总裁:关于PS VR2定价、设计、内容的思考

2023年2月22日,索尼将正式推出次世代头显PS VR2,首发VR游戏将超过30款,其中包括热门游戏《GT赛车7 VR》。此外,PS5全球销量也已突破3000万。实际上距离索尼推出上一代PS VR,已经过去了6年时间,相比于Quest等…

M12269 支持PD3.1等快充协议、140W升降压3-8节多串锂电充放电移动电源管理IC

引言 在快充技术持续迭代升级的过程中,充电从小功率向中大功率的转变是最为明显的。支持的快充功率从最初的7.5W,已经向最高240W迈进。PD3.1协议的推出,进一步助力快充加速走向中大功率。新增三种固定电压档:28V(100-1…

VS1053 MP3模块介绍

VS1053MP3模块简介ATK-VS1053 MP3 MODULE是ALIENTEK推出的一款高性能音频编解码模块,该模块采用VS1053B作为主芯片,支持:MP3/WMA/OGG/WAV/FLAC/MIDI/AAC等音频格式的解码,并支持:OGG/WAV音频格式的录音,支持…

Mask RCNN网络源码解读(Ⅱ) --- ResNet、ResNeXt网络结构、BN及迁移学习

目录 1.ResNet简介 2.residual结构和ResNet-34详解 2.1 residual结构 2.2 Batch Normalization 3.迁移学习 4.ResNeXt网络结构 1.ResNet简介 ResNet在2015年由微软实验室提出,斩获当年lmageNet竞赛中分类任务第一名,目标检测第一名。获得coco数据…