SpeechBrain:无法从本地路径加载预训练模型



我正试图从本地文件加载一个预训练的SpeechBrain HuggingFace模型;我不想把它叫到HuggingFace下载。然而,除非我在hyperparams.yaml中更改pretrained_path,否则它仍然在呼叫HuggingFace并从HF下载模型。

from speechbrain.pretrained import EncoderClassifier
model_folder = "/local/path/to/folder/with/model_files"
model = EncoderClassifier.from_hparams(source=model_folder)

将模型文件放入本地目录:

  1. 我从HuggingFace下载了模型
  2. 我将~/.cache/huggingface/hub/model_folder路径中的实际模型文件移动。我还将它们重命名为符号链接名称:embedding_model.ckptlabel_encoder.ckptclassifier.ckpt
  3. 然后我尝试将hyperparams.yaml中的pretrained_path更改为model_folder。但这会导致模型无法正确加载

HF模型:https://huggingface.co/TalTechNLP/voxlingua107-epaca-tdnn

从本地文件加载EncoderClassifier的正确方法是什么?

已解决:用户错误。上面1-3中的步骤起作用。我的一个文件的名称有一个拼写错误:应该是label_encoder.txt,而不是label_encoder.ckpt。您可以通过查看hyperparams.yamlvoxlingua107-epaca-tdnn来了解它的预期。

作为一个SpeechBrain新手,我只需要加10美分,希望它能帮助其他人。

对我来说,该模型是另一个ECAPA-TDNN,但用于IEMOCAP上的情绪识别,而不是VoxLingua107上的LID。此外,该模型是在谷歌硬盘上,而不是在HF集线器上。

第一件事是将文件hyperparams.yamllabel_encoder.txt移动到检查点目录save/CKPT+2021-07-04+12-04-23+00/,然后按如下方式编辑YAML配置文件。底线秘密是将一些*.ckpt文件链接到pretrained参数tho。

# this param should be edited
pretrained_path: /tmp/ECAPA-TDNN/1968/save/CKPT+2021-07-04+12-04-23+00
# the following must be appended
label_encoder: !new:speechbrain.dataio.encoder.CategoricalEncoder
pretrainer: !new:speechbrain.utils.parameter_transfer.Pretrainer
loadables:
embedding_model: !ref <embedding_model>
classifier: !ref <classifier>
mean_var_norm: !ref <mean_var_norm>
label_encoder: !ref <label_encoder>
paths:
embedding_model: !ref <pretrained_path>/embedding_model.ckpt
classifier: !ref <pretrained_path>/classifier.ckpt
mean_var_norm: !ref <pretrained_path>/normalizer.ckpt
label_encoder: !ref <pretrained_path>/label_encoder.txt

然后,我编写了Python脚本,该脚本对单个文件执行推理。

from speechbrain.pretrained import EncoderClassifier
model_folder = "/tmp/ECAPA-TDNN/1968/save/CKPT+2021-07-04+12-04-23+00"
model = EncoderClassifier.from_hparams(source=model_folder)
x = model.classify_file("/tmp/angry.wav")
print(x)  # (tensor([[0.4100, 0.3910, 0.2401, 0.7020]]), tensor([0.7020]), tensor([3]), ['neu'])

还必须确保speechbrain.pretrained接口中的类与模型的匹配。

帮助我的链接:

  • https://huggingface.co/speechbrain/emotion-recognition-wav2vec2-IEMOCAP/blob/main/hyperparams.yaml#L49
  • https://huggingface.co/TalTechNLP/voxlingua107-epaca-tdnn/blob/main/hyperparams.yaml#L44
  • https://github.com/speechbrain/speechbrain/issues/1226

相关内容

  • 没有找到相关文章

最新更新