yzyouzhang / AIR-ASVspoof

Official implementation of the SPL paper "One-class Learning Towards Synthetic Voice Spoofing Detection"
MIT License
103 stars 28 forks source link

模型训练过程中维度不统一 #13

Closed aoligeigeigei closed 3 years ago

aoligeigeigei commented 3 years ago

您好,您在模型训练过程中是如何是如何将语音resize呢,从仓库下载的代码执行train.py的时候报错 RuntimeError: stack expects each tensor to be equal size, but got [227, 750] at entry 0 and [301, 750] at entry 1。您遇到过这样的问题吗?是如何解决的呢?

yzyouzhang commented 3 years ago

您好,我没有遇到这个问题,我把所有语音都是切到750帧的,看上去是您在拼接的时候维度没选对。请问是哪个文件哪一行报的错?

aoligeigeigei commented 3 years ago

报错原因是在dataset.py --> class ASVspoof2019 --> def getitem() 中的 feat_mat。上边报错的两个语音的初始维度是[227, 60]和[310, 60],您的代码可以将其转为[227, 750], [310, 750],但是报错的主要原因是227和310不相等。鉴于这个问题,我将他们都转成了[512, 750],然后这一步可以执行通过了。

但是,之后又在dataset.py --> repeat_padding() 遇到问题,解决之后又在restnet.py里边遇到问题,现在还没有调通,卡在了restnet.py `
feat = self.fc(stats)

mu = self.fc_mu(feat)`

提示RuntimeError: mat1 dim 1 must match mat2 dim 0

我将上边两行代码改为 `
feat = self.fc(stats.reshape(1, -1))

mu = self.fc_mu(feat.reshape(1, -1))`

后在这一步执行通过,但在train.py

lfcc_loss = criterion(lfcc_outputs,labels)`处报错,提示

ValueError: Expected input batch_size (1) to match target batch_size (16)

我不确定实部是因为最开始的时候将特征维度转成了[512, 750]而导致后边都会报错,谢谢您的帮助

yzyouzhang commented 3 years ago

您好,我用的是LFCC特征,这个特征在每一帧上的维度是60,所以每一条音频在提取完特征之后应该是Tx60这样的维度,然后我用了padding或者chop把T统一成750帧,这样的话每一条数据的特征应该是750x60。欢迎继续提问!