Views
No views yet
| Parameter | Value |
|---|---|
| Base model | openbmb/VoxCPM2 (2B) |
| Method | Full SFT (all parameters) |
| Learning rate | 1e-5 |
| Batch size | 1 (grad accum 16, effective batch 16) |
| Sample rate | 16kHz (AudioVAE encoder input) |
| Final step | 1484 |
| Step | loss/total | loss/diff | loss/stop |
|---|---|---|---|
| 0 | 1.171295 | 0.762161 | 0.272756 |
| 200 | 0.780878 | 0.764130 | 0.011165 |
| 400 | 0.706954 | 0.694261 | 0.008462 |
| 600 | 0.693552 | 0.691856 | 0.001131 |
| 800 | 0.636625 | 0.634136 | 0.001659 |
| 1000 | 0.704854 | 0.676256 | 0.019065 |
| 1200 | 0.679028 | 0.677448 | 0.001054 |
| 1400 | 0.710708 | 0.652015 | 0.039129 |
1from voxcpm import VoxCPM
2import soundfile as sf
3import numpy as np
4
5model = VoxCPM.from_pretrained(
6 "FarmerlineML/voxcpm2-krio-sft",
7 load_denoiser=False,
8)
9
10def trim_audio(wav, sr, silence_thresh=0.01, max_silence_secs=2.0):
11 abs_wav = np.abs(wav)
12 window = int(0.05 * sr)
13 n_wins = len(abs_wav) // window
14 max_sil = int(max_silence_secs / 0.05)
15 silence_count, cut_sample = 0, len(wav)
16 for w in range(n_wins):
17 chunk = abs_wav[w * window:(w + 1) * window]
18 if chunk.max() < silence_thresh:
19 silence_count += 1
20 if silence_count >= max_sil:
21 cut_sample = (w - max_sil + 1) * window
22 break
23 else:
24 silence_count = 0
25 return wav[:min(cut_sample + int(0.1 * sr), len(wav))]
26
27wav = model.generate(
28 text="Ow di bodi? Mi na Farmerline agent.",
29 reference_wav_path="your_krio_speaker.wav",
30 cfg_value=2.0,
31 inference_timesteps=15,
32 retry_badcase=False,
33 max_len=max(50, len(text) * 4),
34)
35wav = trim_audio(wav, 48000)
36sf.write("output.wav", wav, 48000)├── model.safetensors # Model weights (~9.2GB)
├── audiovae.pth # AudioVAE decoder
├── config.json # Model architecture config
├── tokenizer.json # Tokenizer
├── training/
│ ├── train.log # Full training log
│ ├── val_loss_summary.txt # Validation losses per checkpoint
│ └── training_state.json # Final training state
└── tensorboard/ # TensorBoard event filesmax_len=max(50, len(text) * 4) to prevent hallucination after sentence end