用ModelScope 粤语模型推理声音的时候出现了以下问题,有遇到过的吗?
Traceback (most recent call last):
File ""kantts/bin/text_to_wav.py"", line 234, in
args.lang,
File ""kantts/bin/text_to_wav.py"", line 161, in text_to_wav
am_infer(symbols_file, am_ckpt, output_dir, se_file)
File ""/root/KAN-TTS/kantts/bin/infer_sambert.py"", line 222, in am_infer
line[1], fsnet, ling_unit, device, se=se
File ""/root/KAN-TTS/kantts/bin/infer_sambert.py"", line 87, in am_synthesis
[inputs_sy, inputs_tone, inputs_syllable, inputs_ws], dim=-1
RuntimeError: stack expects each tensor to be equal size, but got [5] at entry 0 and [21] at entry 1
根据您提供的错误信息,问题出现在使用ModelScope粤语模型进行推理时,具体错误为RuntimeError: stack expects each tensor to be equal size, but got [5] at entry 0 and [21] at entry 1
。以下是对该问题的详细分析和解决建议:
错误描述
错误提示表明在执行张量堆叠(torch.stack
)操作时,输入的张量尺寸不一致。具体来说:
[5]
。[21]
。这种尺寸不匹配通常发生在以下场景: - 输入数据预处理阶段未正确对齐或填充。 - 模型期望的输入格式与实际输入数据格式不一致。
可能原因
根据知识库中的相关资料,语音识别和语音合成模型对输入数据有严格的格式要求,包括但不限于:
infer_sambert.py
文件中可能存在逻辑错误,导致输入张量未正确对齐。音频采样率:确保输入音频的采样率为模型支持的值(如8000 Hz或16000 Hz)。可以通过以下命令检查音频文件的采样率:
ffprobe -i your_audio_file.wav
如果采样率不符合要求,请使用工具(如ffmpeg
)进行转换:
ffmpeg -i input.wav -ar 16000 output.wav
文本格式:确认输入文本是否符合粤语模型的要求。例如,是否包含非法字符、过长的句子或未分句的多句话。可以尝试将长文本拆分为短句后重新推理。
定位问题代码:根据错误堆栈信息,问题出现在 infer_sambert.py
文件的第87行和第222行。请检查以下内容:
修改代码示例:假设问题出在张量尺寸不一致,可以在堆叠前添加调试信息并手动对齐张量。例如:
print(f"Tensor sizes: {[t.size() for t in inputs]}")
max_size = max(t.size(0) for t in inputs)
padded_inputs = [torch.nn.functional.pad(t, (0, max_size - t.size(0))) for t in inputs]
stacked_tensor = torch.stack(padded_inputs, dim=-1)
symbols_file
和 am_ckpt
),确保其与当前任务匹配。curl -XPOST http://localhost:8000/generate -H "Content-Type: application/json" -d '{"text_input": "粤语测试文本", "parameters": {"stream": false}}'
如果官方示例能够正常运行,则问题可能出在您的输入数据或代码实现上。
通过以上步骤,您可以逐步排查并解决 RuntimeError: stack expects each tensor to be equal size
的问题。如果仍有疑问,请随时补充更多信息以便进一步协助您解决问题。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。