lglg666 commited on
Commit
d5b200d
·
verified ·
1 Parent(s): d2b5abf

Delete 实验三:基于VoxCPM的音色克隆(实验指导).md

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