wav2vec遇到的坑:AttributeError: 'Namespace' object has no attribute 'activation'


今天跑wav2vec的预训练模型:

import torch
from fairseq.models.wav2vec import Wav2VecModel
import librosa

cp = torch.load('../models/wav2vec_large.pt')
model = Wav2VecModel.build_model(cp['args'], task=None)
model.load_state_dict(cp['model'])

signal, sr = librosa.load('../static/test.wav')
tensors = torch.from_numpy(signal).unsqueeze(0)

z = model.feature_extractor(tensors)
c = model.feature_aggregator(z)
#print('c:', c)
print(c.shape)

但是遇到一个非常恶心的问题,截图如下:

 分明是按照网上的代码一步一步来的,就是报错,困扰的很长时间,最后发现是fairseq安装的版本不对。最开始的时候安装的版本是1.0,但是fairseq是一个更新非常快的库,但是代码中加载的模型已经提出来有一段时间了,所以会出现参数不匹配的问题,将fairseq版本改为0.9.0版本就可以运行出来了。

完整的代码见github:https://github.com/SolbiatiAlessandro/wav2vec.git

预训练模型的下载地址:https://gitee.com/pytorch-mirror/fairseq/blob/master/examples/wav2vec/README.md#https://gitee.com/link?target=https%3A%2F%2Fdl.fbaipublicfiles.com%2Ffairseq%2Fwav2vec%2Fwav2vec_large.pt

如果变换版本之后还是不行的话,建议参考https://blog.csdn.net/starinline/article/details/109944198这篇博客,里边的博主也遇到了相同的问题,但是他改变的是hydra/_internal/utils.py中的参数,细节请到该博客阅读

本人在尝试了上边的方法之后,问题仍然没有解决,所以我建议,大家如果也遇到了相同的问题,先尝试一下上边博主的方法,如果尝试无果的话,再尝试更换一个fairseq的版本。