我正试图从本地文件加载一个预训练的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)
将模型文件放入本地目录:
- 我从HuggingFace下载了模型
- 我将
~/.cache/huggingface/hub/
到model_folder
路径中的实际模型文件移动。我还将它们重命名为符号链接名称:embedding_model.ckpt
、label_encoder.ckpt
和classifier.ckpt
- 然后我尝试将
hyperparams.yaml
中的pretrained_path
更改为model_folder
。但这会导致模型无法正确加载
HF模型:https://huggingface.co/TalTechNLP/voxlingua107-epaca-tdnn
从本地文件加载EncoderClassifier
的正确方法是什么?
已解决:用户错误。上面1-3中的步骤起作用。我的一个文件的名称有一个拼写错误:应该是label_encoder.txt
,而不是label_encoder.ckpt
。您可以通过查看hyperparams.yaml
和voxlingua107-epaca-tdnn
来了解它的预期。
作为一个SpeechBrain新手,我只需要加10美分,希望它能帮助其他人。
对我来说,该模型是另一个ECAPA-TDNN,但用于IEMOCAP上的情绪识别,而不是VoxLingua107上的LID。此外,该模型是在谷歌硬盘上,而不是在HF集线器上。
第一件事是将文件hyperparams.yaml
和label_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