lglg666 commited on
Commit
0ede8c2
·
verified ·
1 Parent(s): a4f0f9f

Upload 2 files

Browse files
实验三:基于VoxCPM的音色克隆(实验指导).md ADDED
@@ -0,0 +1,242 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # 实验三:基于VoxCPM的音色克隆(实验指导)
2
+
3
+ 本文件是THUHCSI课程实验三:基于VoxCPM的音色克隆的实验指导文档
4
+
5
+ ## 设置环境
6
+
7
+ 1. [从http://sox.sourceforge.net/](http://sox.sourceforge.net/)安装 sox或使用 apt install sox
8
+ 2. [从https://www.ffmpeg.org/download.html#build-linux](https://www.ffmpeg.org/download.html#build-linux)安装 ffmpeg ,或者使用 apt install FFmpeg安装。
9
+ 3. 通过以下方式设置 Python 环境:首先需要建立一个具有PyTorch 2.5.0版本以上以及与之对应的 CUDA 版本的环境,建议大家使用Conda进行搭建,以避免出现错误。接下来执行下面脚本安装
10
+
11
+ ```
12
+ conda create -n voxcpm python=3.10
13
+ conda activate voxcpm
14
+ pip install torch==2.8 torchaudio
15
+ pip install voxcpm
16
+ pip install tensorboardX argbind
17
+ ```
18
+
19
+ 4. 使用VoxCPM/src/voxcpm中的版本替换python环境中安装的版本(训练用)
20
+
21
+ ```
22
+ rsync -avP src/voxcpm/* /usr/local/python3/lib/python3.10/site-packages/voxcpm/(请输入自己的voxcpm包安装文件)
23
+ ```
24
+
25
+ ## 数据准备
26
+
27
+ 下载HuggingFace(https://huggingface.co/lglg666/dpss-exp3-TTS)中的文件,所有数据存储在VoxCPM/datasets.zip文件中,请解压缩保存到VoxCPM/datasets中,实验需要用到的数据目录文件已经整理在VoxCPM/datasets/metadatas文件中,包含以下文件
28
+
29
+ - single_speaker_test_datas.txt:用于完成任务二第一个要求的测试集文本合集,已经设置好了每条文本的名字和内容,可以直接使用VoxCPM/inference.py中提供的脚本进行批量合成。
30
+ - single_speaker_train_datas.jsonl,single_speaker_test_datas.jsonl:用于任务二和三中模型训练和测试的单一目标说话人数据集,数据来自原神角色“八重神子”的语音。
31
+ - all_train_datas.jsonl,all_test_datas.jsonl:用于任务四中模型训练和测试的多说话人数据集,数据来自原神游戏中不同角色的语音。
32
+
33
+ ## 任务一:VoxCPM 能力探索与 Zero-shot 克隆
34
+
35
+ 在该任务中,主要帮助同学们熟悉VoxCPM的推理流程和Zero-shot能力,我们在VoxCPM/inference.py中提供了一个基础的推理脚本,更多自由的推理方式请参考文件VoxCPM/README.md
36
+
37
+ ### 单条音频推理
38
+
39
+ 单条音频推理只需使用下面的命令,这里我们以文本“恭喜你们通过了第三轮试胆大会,小家伙们。”和参考音频“./prompt_sample.wav”为例
40
+
41
+ ```
42
+ python3 inference.py --model_path ckpts --text 恭喜你们通过了第三轮试胆大会,小家伙们。 --output_dir outputs --cfg_value 2 --inference_timesteps 10 --prompt_wav_path ./prompt_sample.wav --prompt_text 海奇岛的鱼类多样性异常丰富,确实不可多得。
43
+ ```
44
+
45
+ Notes:
46
+
47
+ - --model_path:当前推理待使用模型的存储路径,在VoxCPM/ckpts中已经为大家提供了预训练好的模型,后续也可以替换成自己微调的checkpoint
48
+ - --text:当前轮次合成的语音文本
49
+ - --output_dir:本次生成的音频存储位置,单条推理时默认存储音频名字为"output.wav"
50
+ - --cfg_value & --inference_timesteps:可调节的推理参数
51
+ - --prompt_wav_path:用于Zero-shot的参考音频路径,当对于特定说话人进行微调后不用再提供
52
+ - --prompt_text:对应参考音频的文本内容,**当使用参考音频时必须提供**。
53
+
54
+ ### 多条音频推理
55
+
56
+ 我们以参考音频“./prompt_sample.wav”为例进行多条音频推理。首先需要将我们本次推理的所有文本内容组织成下面格式的文件
57
+
58
+ ```
59
+ 1||简要说明文字输入在VoxCPM中是如何被一步步转变成了输出语音的?
60
+ 2||简要说明提示音频在模型中起到了什么作用?
61
+ 3||自己录制一段语音,对自己的声音进行克隆,合成5个以上不同文本
62
+ 4||对比和分析合成结果的效果及可能存在的问题
63
+ ```
64
+
65
+ 其中每行包含文件名和文本内容两个信息,用‘||’进行隔开,然后使用下面命令进行对同一参考音频的多条文本进行合成
66
+
67
+ ```
68
+ python3 inference.py --model_path ckpts --text_file ./test.txt --output_dir outputs --cfg_value 2 --inference_timesteps 10 --prompt_wav_path ./prompt_sample.wav --prompt_text 海奇岛的鱼类多样性异常丰富,确实不可多得。
69
+ ```
70
+
71
+ Notes:
72
+
73
+ - --text_file:当前轮次合成的文本集合文件
74
+ - --output_dir:本次生成的音频存储位置,每条音频会根据text_file中指定的文件名进行存储
75
+
76
+ ## 任务二:全参数微调(Full Fine-tuning)探索
77
+
78
+ 在该任务中,主要帮助同学们数据VoxCPM的全参数微调流程,我们在VoxCPM/scripts/train_voxcpm_finetune.py中提供了微调的脚本,并在VoxCPM/conf/voxcpm/voxcpm_finetune_example.yaml提供了在全参数微调时使用的配置,更多全参数微调的信息请参考文件VoxCPM/README.md
79
+
80
+ ### 评估指标熟悉--测试集文本推理
81
+
82
+ 该实验测试集文本已经按照多条音频推理流程中的要求整理在VoxCPM/datasets/metadatas/single_speaker_test_datas.txt中��可以自己选定目标说话人的任意一条语音,使用下面脚本进行推理
83
+
84
+ ```
85
+ python3 inference.py --model_path ckpts --text_file datasets/metadatas/single_speaker_test_datas.txt --prompt_wav_path 自由选择音频路径 --prompt_text 音频文本
86
+ ```
87
+
88
+ ### 评估指标熟悉--自动评估工具
89
+
90
+ 关于可懂度和音色相似度的评估,我们已经整理好了评估工具给大家,该脚本已经和测试集文本推理流程进行了适配。
91
+
92
+ 首先需要进行环境配置,该脚本需要的环境在eval/requirements.txt中,要安装所有依赖项,请运行
93
+
94
+ ```
95
+ pip3 install -r requirements.txt
96
+ ```
97
+
98
+ 如果服务器无法链接hugging face请自行下载https://huggingface.co/s3prl/converted_ckpts/resolve/main/wavlm_large.pt
99
+
100
+ #### WER计算
101
+
102
+ 在eval文件中运行下面脚本以完成WER的计算
103
+
104
+ ```
105
+ bash cal_wer.sh base_path/VoxCPM/datasets/metadatas/single_speaker_test_datas.txt base_path/VoxCPM/outputs base_path/VoxCPM/datasets/metadatas/single_speaker_test_datas.jsonl
106
+ ```
107
+
108
+ 该脚本一共需要输入三个路径
109
+
110
+ - 第一个路径是多条音频推理时,输入模型的text_file文件,该文件以||为分隔符包含了文件名和文本内容
111
+ - 第二个路径是存储音频的文件夹路径
112
+ - 第三个路径是测试集的jsonl文件,且该文件每一行的内容与第一个路径的文件每一行是对应的,用于提供GT的音频信息。
113
+
114
+ #### SIM计算
115
+
116
+ 在eval文件中运行下面脚本以完成WER的计算
117
+
118
+ ```
119
+ bash cal_sim.sh base_path/VoxCPM/datasets/metadatas/single_speaker_test_datas.txt base_path/VoxCPM/outputs base_path/VoxCPM/datasets/metadatas/single_speaker_test_datas.jsonl
120
+ ```
121
+
122
+ 该脚本与WER计算输入时需要的文件相同
123
+
124
+ 为了方便计算WER和SIM,推荐大家使用VoxCPM/inference.py进行推理。当使用其他方式进行推理时,需要按照对应的测试集jsonl文件中的音频顺序创建一个包含text_file(以||为分隔符包含了文件名和文本内容)。
125
+
126
+ ### 全参数微调
127
+
128
+ 进行全参数微调需要参考下面的教程
129
+
130
+ #### 1.准备manifest (JSONL)
131
+
132
+ ```
133
+ {"audio": "/path/to/audio_0001.wav", "text": "你好,世界。", "dataset_id": 0}
134
+ {"audio": "/path/to/audio_0002.wav", "text": "第二条语音", "dataset_id": 0}
135
+ ```
136
+
137
+ - `audio`: waveform file path (WAV/FLAC/MP3 supported)
138
+ - `text`: transcription
139
+ - `dataset_id` *(optional)*: integer identifier for multi-dataset sampling statistics
140
+
141
+ 这一步我们已经帮大家完成了,准备好的文件放在VoxCPM/datasets/metadatas/single_speaker_train_datas.jsonl下
142
+
143
+ #### 2.**Copy & edit the example config**
144
+
145
+ 在VoxCPM/conf/voxcpm/voxcpm_finetune_example.yaml中,我们提供了一个进行全参数微调的配置文件示例,包含全参数微调用到的超参数。大家可以对其中的训练配置进行修改,以实现自己的训练方案。
146
+
147
+ #### 3.启动训练
148
+
149
+ 如果你有多张卡,可以使用进行多卡训练,示例如下
150
+
151
+ ```bash
152
+ CUDA_VISIBLE_DEVICES=0,1 torchrun --nproc_per_node 2 \
153
+ scripts/train_voxcpm_finetune.py \
154
+ --config_path conf/voxcpm/voxcpm_finetune_example.yaml
155
+ ```
156
+
157
+ Features:
158
+
159
+ - Distributed + AMP training (`torchrun`).
160
+ - TensorBoard logging (`tensorboard --logdir logs/voxcpm_finetune`).
161
+ - Periodic validation & checkpointing under `checkpoints/`.
162
+
163
+ 如果你只有一张卡,可以进行单卡训练,示例如下
164
+
165
+ ```bash
166
+ torchrun --nproc_per_node 1 \
167
+ scripts/train_voxcpm_finetune.py \
168
+ --config_path conf/voxcpm/voxcpm_finetune_example.yaml
169
+ ```
170
+
171
+ #### 4.**Key modules**
172
+
173
+ - `VoxCPM/src/voxcpm/model/voxcpm.py`: unified model providing both inference and training forward。
174
+ - `VoxCPM/src/voxcpm/training/`: accelerator, tracker, dataset loader & batch packer utilities。
175
+ - `VoxCPM/scripts/train_voxcpm_finetune.py`: end-to-end fine-tune loop。
176
+
177
+ #### 5.效果测试
178
+
179
+ 训练完成后可自行选择合适的step的generator.pth文件代替VoxCPM/ckpts/pytorch_model.bin文件进行效果测试(建议复制一个新文件夹进行测试,VoxCPM/ckpts文件还需要用于后续实验的训练初始化),一个简单的操作指引如下
180
+
181
+ ```bash
182
+ cp -r ckpts new_ckpts
183
+ cp checkpoints/voxcpm_finetune/step_0001000/generator.pth new_ckpts/pytorch_model.bin
184
+ python3 inference.py --model_path new_ckpts --text_file datasets/metadatas/single_speaker_test_datas.txt
185
+ ```
186
+
187
+ ## 任务三:基于 LoRA 的高效微调
188
+
189
+ 在该任务中,主要帮助同学们数据VoxCPM的LoRA微调流程,微调的脚本和全参数微调一致,都在VoxCPM/scripts/train_voxcpm_finetune.py中,并在VoxCPM/conf/voxcpm/voxcpm_finetune_lora.yaml中提供了专门用于LoRA微调的配置文件
190
+
191
+ ### LoRA微调
192
+
193
+ LoRA微调的过程和全参数微调基本一致,唯一的区别就是将配置文件从VoxCPM/conf/voxcpm/voxcpm_finetune_example.yaml换成VoxCPM/conf/voxcpm/voxcpm_finetune_lora.yaml,修改配置文件中的超参数之后我们就可以用下面的脚本开始LoRA微调
194
+
195
+ 如果你有多张卡,可以使用进行多卡训练,示例如下
196
+
197
+ ```bash
198
+ CUDA_VISIBLE_DEVICES=0,1 torchrun --nproc_per_node 2 \
199
+ scripts/train_voxcpm_finetune.py \
200
+ --config_path conf/voxcpm/voxcpm_finetune_lora.yaml
201
+ ```
202
+
203
+ 如果你只有一张卡,可以进行单卡训练,示例如下
204
+
205
+ ```bash
206
+ torchrun --nproc_per_node 1 \
207
+ scripts/train_voxcpm_finetune.py \
208
+ --config_path conf/voxcpm/voxcpm_finetune_lora.yaml
209
+ ```
210
+
211
+ ### LoRA推理
212
+
213
+ LoRA推理得到的checkpoint需要使用全新的推理脚本进行推理,脚本保存在VoxCPM/inference_lora.py中
214
+
215
+ 单条音频推理只需使用下面的命令,这里我们以文本“恭喜你们通过了第三轮试胆大会,小家伙们。”和参考音频“./prompt_sample.wav”为例
216
+
217
+ ```
218
+ python3 inference_lora.py --lora_ckpt checkpoints/voxcpm_finetune/step_0001000 --lora_config_path conf/voxcpm/voxcpm_finetune_lora.yaml --text 恭喜你们通过了第三轮试胆大会,小家伙们。 --output_dir outputs --cfg_value 2 --inference_timesteps 10
219
+ ```
220
+
221
+ Notes:
222
+
223
+ - --lora_ckpt:当前推理使用微调模型训练的checkpoint存储路径,默认在文件夹checkpoints/voxcpm_finetune中
224
+ - --lora_config_path:当前checkpoint进行LoRA微调所用到的训练配置文件
225
+ - --text:当前轮次合成的语音文本
226
+ - --output_dir:本次生成的音频存储位置,单条推理时默认存储音频名字为"output_lora.wav"
227
+ - --cfg_value & --inference_timesteps:可调节的推理参数
228
+
229
+ ### 多条音频推理
230
+
231
+ ```
232
+ python3 inference_lora.py --lora_ckpt checkpoints/voxcpm_finetune/step_0001000 --lora_config_path conf/voxcpm/voxcpm_finetune_lora.yaml --text_file datasets/metadatas/single_speaker_test_datas.txt --output_dir outputs --cfg_value 2 --inference_timesteps 10
233
+ ```
234
+
235
+ Notes:
236
+
237
+ - --text_file:当前轮次合成的文本集合文件
238
+ - --output_dir:本次生成的音频存储位置,每条音频会根据text_file中指定的文件名进行存储
239
+
240
+ ## 任务四:多说话人语音合成模型(原神角色实战)
241
+
242
+ 在该任务中,我们需要大家尝试自行将说话人信息注入模型中,构建一个多说话人(Multi-Speaker)语音合成模型,即输入为“任意文本 + 目标角色 ID”,输出为该角色的语音。大家可以查询相关资料,自行实现这一功能,并使用之前任务中积累的训练经验进行训练。
实验三:基于VoxCPM的音色克隆(实验指导).pdf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6dd00df6cd0b147f64b66a027691a9e8e01dd01a4e0b388130e04a23dd489b0b
3
+ size 152442