weixin_62994174/shiro_voice
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

shiro_voice (昇腾 NPU 适配版)

shiro_voice 是基于 SoVITS-SVC 架构的歌声/语音转换模型,本仓库提供 华为昇腾 Ascend910 NPU 适配版本,支持在昇腾硬件上高效推理。

模型简介

shiro_voice 是一个基于 SoVITS-SVC (Singing Voice Conversion via VITS) 架构的语音转换模型,参数规模 45.1M,支持将任意输入语音转换为目标音色。

  • 模型架构: SoVITS-SVC (VITS-based voice conversion)
  • 核心组件: Conformer Encoder + Pitch Encoder + Residual Coupling Flow + HiFi-GAN Decoder
  • 参数规模: 45.1M
  • 精度: float32
  • 采样率: 40000 Hz
  • 输入: 音色无关的语音特征 (Content + F0 + Speaker Embedding)
  • 输出: 目标音色语音波形

昇腾 NPU 适配说明

适配环境

项目版本/信息
NPU 型号Ascend910_9362
CANN 版本25.5.2
PyTorch2.9.0
torch_npu2.9.0.post1
精度float32
模型参数45.1M

适配要点

  1. 设备迁移: 将模型及输入张量迁移至 NPU 设备 (torch.npu)
  2. 模型架构适配: 从 state dict 中逆向构建完整的 SoVITS-SVC 模型结构,实现 100% 权重复现 (750 个参数,0 missing / 0 unexpected)
  3. 推理同步: NPU 推理前后添加 torch.npu.synchronize() 确保正确计时
  4. 数值精度对齐: NPU float32 与 CPU float32 输出精度一致

适配模型组件

组件说明
Synthesizer主模型,包含编码器、流模型和解码器
PitchEncoder音高编码器,含 F0 Embedding 和 Conformer
ConformerEncoder基于相对位置注意力的编码器 (2 heads, 6 layers)
ResidualCouplingBlock4 层仿射耦合流 (Affine Coupling Flow)
HiFiGANGenerator5 级上采样 HiFi-GAN 声码器
F0Decoder基频解码器,含 SimpleAttention
WNWaveNet 扩张卷积模块

快速开始

环境安装

pip install torch==2.9.0
pip install torch_npu==2.9.0.post1
pip install librosa
pip install pyworld
pip install soundfile

下载模型

# 通过 ModelScope 下载
pip install modelscope
python -c "from modelscope import snapshot_download; snapshot_download('Y39c5bb/shiro_voice', local_dir='./models/Y39c5bb/shiro_voice')"

推理示例

import torch
import torch_npu
from sovits_model import Synthesizer

DEVICE = "npu:0" if torch.npu.is_available() else "cpu"

# 加载模型
checkpoint = torch.load("models/Y39c5bb/shiro_voice/sovits/G_0.pth",
                         map_location="cpu", weights_only=False)
model = Synthesizer()
model.load_state_dict(checkpoint["model"], strict=True)
model = model.to(DEVICE)
model.eval()

# 准备输入 (Content features, F0, UV)
c = torch.randn(1, 256, 100)         # 语音内容特征
f0 = torch.rand(1, 1, 100)           # 基频 (F0)
uv = torch.zeros(1, 100, dtype=torch.long)  # 有声/无声标记
g = torch.randn(1, 256, 1)           # 说话人嵌入

with torch.no_grad():
    audio, _ = model(c, f0, uv, g=g, noise_scale=0.667)

print(f"生成音频: {audio.shape}")  # [1, 1, N*512]

也可直接运行推理脚本:

# 测试推理 (随机输入)
python inference_npu.py --test-only

# 语音转换
python inference_npu.py --input input.wav --output output.wav

# CPU 基线
python inference_npu.py --cpu --test-only

精度评测

评测方法

在 NPU 和 CPU 上分别加载相同权重,使用完全相同的输入 (noise_scale=1.0 消除随机性差异),对比输出音频的各项指标。

评测结果

指标NPU vs CPU判定
Pearson 相关系数 (均值)> 0.99999✅ PASS
信噪比 SNR (均值)> 55 dB✅ PASS
归一化平均误差< 0.02%✅ PASS
正弦扫频 Pearson 相关> 0.99999✅ PASS
正弦扫频 SNR> 47 dB✅ PASS
综合判定误差 < 1%✅ PASS
序列长度Pearson 相关SNR (dB)归一化最大误差
501.00000052.640.357%
1001.00000057.420.099%
2000.99999457.400.161%
5001.00000056.090.221%

运行精度评测:

python evaluate_accuracy.py

性能评测

评测环境

  • 硬件: Ascend910_9362 × 2 (单卡推理)
  • 模型精度: float32
  • 模型参数: 45.1M

推理性能

序列长度推理时间 (ms)生成音频时长 (s)RTFNPU vs CPU 加速比
5023.450.640.03740.8×
10023.801.280.01980.0×
20024.642.560.010159.1×
50030.696.400.005324.9×
100049.4612.800.004-

RTF (Real-Time Factor) = 推理时间 / 生成音频时长,RTF < 1 表示推理速度快于实时播放。所有测试场景下 NPU RTF 均远小于 1。

显存占用

指标占用
模型加载后~0.43 GB
推理峰值~0.63 GB
推理增量~0.20 GB

运行性能评测:

python benchmark_perf.py

模型文件说明

文件说明
inference_npu.pyNPU 推理脚本 (语音转换 + 测试模式)
sovits_model.pySoVITS-SVC 模型架构定义 (从权重逆向构建)
evaluate_accuracy.py精度评测脚本 (NPU vs CPU)
benchmark_perf.py性能评测脚本 (延迟/吞吐/显存)
models/模型权重目录
evaluation_results/评测结果输出目录

模型架构

Synthesizer
├── pre: Conv1d(256→192)
├── emb_uv: Embedding(2→192)
├── enc_p (PitchEncoder)
│   ├── f0_emb: Embedding(256→192)
│   ├── enc_ (ConformerEncoder ×6)
│   │   ├── RelativeAttention (2 heads, window=4)
│   │   └── FFN (192→768→192)
│   └── proj: Conv1d(192→384)
├── flow (ResidualCouplingBlock ×4)
│   └── WN (WaveNet, dilation=1)
├── f0_decoder
│   ├── SimpleAttention (2 heads, 6 layers)
│   └── proj: Conv1d(192→1)
└── dec (HiFiGANGenerator)
    ├── ConvTranspose1d ×5 (upsample: 8,8,2,2,2)
    ├── ResBlock ×15 (kernels: 3,7,11)
    └── conv_post: Conv1d(512→1)

引用

本模型基于 SoVITS-SVC 架构,通过 Y39c5bb/shiro_voice 权重适配昇腾 NPU。

@misc{sovits-svc,
  author = {SoVITS Community},
  title = {SoVITS-SVC: Singing Voice Conversion},
  year = {2024},
}

License

Apache 2.0