【开发日记】Deep speaker之ResCNN Input结构

Deep speaker这篇文章有很多细节没有描述,加上没有官方的源代码,导致要实现很难。

这篇文章主要是写一下ResCNN Input的结构,这个应该是很多人迷惑的地方。

由于一开始没有经验,因此代码是参考github上的开源代码:https://github.com/philipperemy/deep-speaker

因此思路一直被这篇代码的结构给困住了,其实RecCNNInput和这个开源代码有很大的区别(这是我和论文作者李超博士交流后自己的理解,我觉得还是蛮有把握的)

我的理解,在Keras中,Input的维度应该是 n*f*h*c,其中nbatchsizeffbank的频点,h是帧数,是可变的(当然,在同一个batch中,h是一样的),c是通道,一般为3,即静态的fbank,和一阶倒数delta1,以及二阶导数delata2,李说通道的顺序是delta2delta1,fbank。这样,假设batchsize9632个三元组),f64(论文中),h256(这个是可变的,这里取256,大概是3s多左右,取256是为了方便描述),那么Input的维度就是96*64*256*3

这里就以96*64*256*3来描述RecCNN的结构,在做卷积是batchsize也可以不考虑,因此Input维度这里取64*256*3。这里的关键是CNN为什么可以用在可变的维度上(比如256这个数是可变的),其实就是全卷积网络的使用加上average pooling

Layer name

Structure

Stride

Input size

Output size

Conv64-s

res64

5*5, 64

2*2

1*1

 

64*256*3

 

 

32*128*64

Conv128-s

Res128

5*5, 128

2*2

1*1

 

32*128*64

 

16*64*128

Conv256-s

Res256

5*5, 256

2*2

1*1

 

16*64*128

 

8*32*256

Conv512-s

Res512

5*5, 512

2*2

1*1

 

8*32*256

 

4*16*512

transpose

 

 

4*16*512

4*512*16

reshape

 

 

4*512*16

2048*16

average

 

 

2048*16

2048*1

affine

2048*512

 

2048*1

512

ln

 

 

512

512

也可以参考下图

 【开发日记】Deep speaker之ResCNN Input结构