You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VITS语音合成训练中遇Torch填充AssertionError问题求助

解决VITS训练中Torch填充AssertionError问题

问题原因

你遇到的AssertionError: 4D tensors expect 4 values for padding错误,核心原因是训练用的音频是双声道(2通道),导致数据处理流程中生成了4D张量,而配置文件里的padding参数仅设置了2个值((384,384)),无法满足4D张量的填充要求。

从你追踪的张量维度也能验证:双声道音频原始尺寸是[69506, 2],经过两次unsqueeze后变成4D的[1, 1, 69506, 2],而VITS默认是为单声道音频设计的3D张量流程,此时配置中的2个padding值就不匹配了。

解决方法

方法1:批量转换音频为单声道(推荐)

直接将所有训练用的WAV文件转成单声道,从源头解决维度问题:

  • 用ffmpeg命令转换单个文件:
ffmpeg -i input.wav -ac 1 output.wav
  • 批量转换(Linux/macOS bash脚本):
mkdir mono_audio
for wav in /path/to/your/audio/*.wav; do
    ffmpeg -i "$wav" -ac 1 "mono_audio/$(basename "$wav")" -y
done

之后修改配置文件中的音频数据路径,指向转换后的单声道音频文件夹。

方法2:修改代码强制转单声道

如果不想转换音频文件,可以修改data_utils.py的get_audio函数,在读取音频后添加单声道转换逻辑:
找到get_audio函数中获取audio张量的位置,添加:

# 将双声道转为单声道(取左声道或平均声道)
audio = audio[:, 0:1]  # 取左声道
# 或者用 audio = audio.mean(dim=-1, keepdim=True) 平均两个声道

修改后,原始音频张量会变为单声道的[69506, 1],后续处理生成的张量维度会符合VITS的默认3D流程,配置中的(384,384) padding参数就能正常工作。

内容的提问来源于stack exchange,提问作者Panda Senpai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 22:54:17