| | import gradio as gr |
| | from app.original import * |
| |
|
| |
|
| |
|
| | def train_tabs(): |
| | with gr.TabItem(i18n("训练")): |
| | gr.Markdown( |
| | value=i18n( |
| | "step1: 填写实验配置. 实验数据放在logs下, 每个实验一个文件夹, 需手工输入实验名路径, 内含实验配置, 日志, 训练得到的模型文件. " |
| | ) |
| | ) |
| | with gr.Row(): |
| | exp_dir1 = gr.Textbox(label=i18n("输入实验名"), value="mi-test") |
| | sr2 = gr.Radio( |
| | label=i18n("目标采样率"), |
| | choices=["40k", "48k"], |
| | value="40k", |
| | interactive=True, |
| | ) |
| | if_f0_3 = gr.Radio( |
| | label=i18n("模型是否带音高指导(唱歌一定要, 语音可以不要)"), |
| | choices=[i18n("是"), i18n("否")], |
| | value=i18n("是"), |
| | interactive=True, |
| | ) |
| | version19 = gr.Radio( |
| | label=i18n("版本"), |
| | choices=["v1", "v2"], |
| | value="v2", |
| | interactive=True, |
| | visible=True, |
| | ) |
| | np7 = gr.Slider( |
| | minimum=0, |
| | maximum=config.n_cpu, |
| | step=1, |
| | label=i18n("提取音高和处理数据使用的CPU进程数"), |
| | value=int(np.ceil(config.n_cpu / 1.5)), |
| | interactive=True, |
| | ) |
| | with gr.Group(): |
| | gr.Markdown( |
| | value=i18n( |
| | "step2a: 自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化, 在实验目录下生成2个wav文件夹; 暂时只支持单人训练. " |
| | ) |
| | ) |
| | with gr.Row(): |
| | trainset_dir4 = gr.Textbox( |
| | label=i18n("输入训练文件夹路径"), |
| | value=i18n("E:\\语音音频+标注\\米津玄师\\src"), |
| | ) |
| | spk_id5 = gr.Slider( |
| | minimum=0, |
| | maximum=4, |
| | step=1, |
| | label=i18n("请指定说话人id"), |
| | value=0, |
| | interactive=True, |
| | ) |
| | but1 = gr.Button(i18n("处理数据"), variant="primary") |
| | info1 = gr.Textbox(label=i18n("输出信息"), value="") |
| | but1.click( |
| | preprocess_dataset, |
| | [trainset_dir4, exp_dir1, sr2, np7], |
| | [info1], |
| | api_name="train_preprocess", |
| | ) |
| | with gr.Group(): |
| | gr.Markdown( |
| | value=i18n( |
| | "step2b: 使用CPU提取音高(如果模型带音高), 使用GPU提取特征(选择卡号)" |
| | ) |
| | ) |
| | with gr.Row(): |
| | with gr.Column(): |
| | gpus6 = gr.Textbox( |
| | label=i18n( |
| | "以-分隔输入使用的卡号, 例如 0-1-2 使用卡0和卡1和卡2" |
| | ), |
| | value=gpus, |
| | interactive=True, |
| | visible=F0GPUVisible, |
| | ) |
| | gpu_info9 = gr.Textbox( |
| | label=i18n("显卡信息"), value=gpu_info, visible=F0GPUVisible |
| | ) |
| | with gr.Column(): |
| | f0method8 = gr.Radio( |
| | label=i18n( |
| | "选择音高提取算法:输入歌声可用pm提速,高质量语音但CPU差可用dio提速,harvest质量更好但慢,rmvpe效果最好且微吃CPU/GPU" |
| | ), |
| | choices=["pm", "harvest", "dio", "rmvpe", "rmvpe_gpu"], |
| | value="rmvpe_gpu", |
| | interactive=True, |
| | ) |
| | gpus_rmvpe = gr.Textbox( |
| | label=i18n( |
| | "rmvpe卡号配置:以-分隔输入使用的不同进程卡号,例如0-0-1使用在卡0上跑2个进程并在卡1上跑1个进程" |
| | ), |
| | value="%s-%s" % (gpus, gpus), |
| | interactive=True, |
| | visible=F0GPUVisible, |
| | ) |
| | but2 = gr.Button(i18n("特征提取"), variant="primary") |
| | info2 = gr.Textbox(label=i18n("输出信息"), value="", max_lines=8) |
| | f0method8.change( |
| | fn=change_f0_method, |
| | inputs=[f0method8], |
| | outputs=[gpus_rmvpe], |
| | ) |
| | but2.click( |
| | extract_f0_feature, |
| | [ |
| | gpus6, |
| | np7, |
| | f0method8, |
| | if_f0_3, |
| | exp_dir1, |
| | version19, |
| | gpus_rmvpe, |
| | ], |
| | [info2], |
| | api_name="train_extract_f0_feature", |
| | ) |
| | with gr.Group(): |
| | gr.Markdown(value=i18n("step3: 填写训练设置, 开始训练模型和索引")) |
| | with gr.Row(): |
| | save_epoch10 = gr.Slider( |
| | minimum=1, |
| | maximum=50, |
| | step=1, |
| | label=i18n("保存频率save_every_epoch"), |
| | value=5, |
| | interactive=True, |
| | ) |
| | total_epoch11 = gr.Slider( |
| | minimum=2, |
| | maximum=1000, |
| | step=1, |
| | label=i18n("总训练轮数total_epoch"), |
| | value=20, |
| | interactive=True, |
| | ) |
| | batch_size12 = gr.Slider( |
| | minimum=1, |
| | maximum=40, |
| | step=1, |
| | label=i18n("每张显卡的batch_size"), |
| | value=default_batch_size, |
| | interactive=True, |
| | ) |
| | if_save_latest13 = gr.Radio( |
| | label=i18n("是否仅保存最新的ckpt文件以节省硬盘空间"), |
| | choices=[i18n("是"), i18n("否")], |
| | value=i18n("否"), |
| | interactive=True, |
| | ) |
| | if_cache_gpu17 = gr.Radio( |
| | label=i18n( |
| | "是否缓存所有训练集至显存. 10min以下小数据可缓存以加速训练, 大数据缓存会炸显存也加不了多少速" |
| | ), |
| | choices=[i18n("是"), i18n("否")], |
| | value=i18n("否"), |
| | interactive=True, |
| | ) |
| | if_save_every_weights18 = gr.Radio( |
| | label=i18n( |
| | "是否在每次保存时间点将最终小模型保存至weights文件夹" |
| | ), |
| | choices=[i18n("是"), i18n("否")], |
| | value=i18n("否"), |
| | interactive=True, |
| | ) |
| | with gr.Row(): |
| | pretrained_G14 = gr.Textbox( |
| | label=i18n("加载预训练底模G路径"), |
| | value="assets/pretrained_v2/f0G40k.pth", |
| | interactive=True, |
| | ) |
| | pretrained_D15 = gr.Textbox( |
| | label=i18n("加载预训练底模D路径"), |
| | value="assets/pretrained_v2/f0D40k.pth", |
| | interactive=True, |
| | ) |
| | sr2.change( |
| | change_sr2, |
| | [sr2, if_f0_3, version19], |
| | [pretrained_G14, pretrained_D15], |
| | ) |
| | version19.change( |
| | change_version19, |
| | [sr2, if_f0_3, version19], |
| | [pretrained_G14, pretrained_D15, sr2], |
| | ) |
| | if_f0_3.change( |
| | change_f0, |
| | [if_f0_3, sr2, version19], |
| | [f0method8, gpus_rmvpe, pretrained_G14, pretrained_D15], |
| | ) |
| | gpus16 = gr.Textbox( |
| | label=i18n( |
| | "以-分隔输入使用的卡号, 例如 0-1-2 使用卡0和卡1和卡2" |
| | ), |
| | value=gpus, |
| | interactive=True, |
| | ) |
| | but3 = gr.Button(i18n("训练模型"), variant="primary") |
| | but4 = gr.Button(i18n("训练特征索引"), variant="primary") |
| | but5 = gr.Button(i18n("一键训练"), variant="primary") |
| | info3 = gr.Textbox(label=i18n("输出信息"), value="", max_lines=10) |
| | but3.click( |
| | click_train, |
| | [ |
| | exp_dir1, |
| | sr2, |
| | if_f0_3, |
| | spk_id5, |
| | save_epoch10, |
| | total_epoch11, |
| | batch_size12, |
| | if_save_latest13, |
| | pretrained_G14, |
| | pretrained_D15, |
| | gpus16, |
| | if_cache_gpu17, |
| | if_save_every_weights18, |
| | version19, |
| | ], |
| | info3, |
| | api_name="train_start", |
| | ) |
| | but4.click(train_index, [exp_dir1, version19], info3) |
| | but5.click( |
| | train1key, |
| | [ |
| | exp_dir1, |
| | sr2, |
| | if_f0_3, |
| | trainset_dir4, |
| | spk_id5, |
| | np7, |
| | f0method8, |
| | save_epoch10, |
| | total_epoch11, |
| | batch_size12, |
| | if_save_latest13, |
| | pretrained_G14, |
| | pretrained_D15, |
| | gpus16, |
| | if_cache_gpu17, |
| | if_save_every_weights18, |
| | version19, |
| | gpus_rmvpe, |
| | ], |
| | info3, |
| | api_name="train_start_all", |
| | ) |
| |
|