Spaces:
Runtime error
Runtime error
import os | |
import subprocess | |
import sys | |
import gradio as gr | |
from assets.i18n.i18n import I18nAuto | |
from core import ( | |
run_preprocess_script, | |
run_extract_script, | |
run_train_script, | |
run_index_script, | |
) | |
from rvc.configs.config import max_vram_gpu, get_gpu_info | |
i18n = I18nAuto() | |
now_dir = os.getcwd() | |
sys.path.append(now_dir) | |
pretraineds_custom_path = os.path.join( | |
now_dir, "rvc", "pretraineds", "pretraineds_custom" | |
) | |
if not os.path.exists(pretraineds_custom_path): | |
os.makedirs(pretraineds_custom_path) | |
def get_pretrained_list(suffix): | |
return [ | |
os.path.join(dirpath, filename) | |
for dirpath, _, filenames in os.walk(pretraineds_custom_path) | |
for filename in filenames | |
if filename.endswith(".pth") and suffix in filename | |
] | |
pretraineds_list_d = get_pretrained_list("D") | |
pretraineds_list_g = get_pretrained_list("G") | |
def refresh_custom_pretraineds(): | |
return ( | |
{"choices": sorted(get_pretrained_list("G")), "__type__": "update"}, | |
{"choices": sorted(get_pretrained_list("D")), "__type__": "update"}, | |
) | |
def run_train( | |
model_name, | |
rvc_version, | |
save_every_epoch, | |
save_only_latest, | |
save_every_weights, | |
total_epoch, | |
sampling_rate, | |
batch_size, | |
gpu, | |
pitch_guidance, | |
pretrained, | |
custom_pretrained, | |
g_pretrained_path, | |
d_pretrained_path, | |
): | |
core = os.path.join("core.py") | |
command = [ | |
"python", | |
core, | |
"train", | |
str(model_name), | |
str(rvc_version), | |
str(save_every_epoch), | |
str(save_only_latest), | |
str(save_every_weights), | |
str(total_epoch), | |
str(sampling_rate), | |
str(batch_size), | |
str(gpu), | |
str(pitch_guidance), | |
str(pretrained), | |
str(custom_pretrained), | |
str(g_pretrained_path), | |
str(d_pretrained_path), | |
] | |
subprocess.run(command) | |
def save_drop_model(dropbox): | |
if ".pth" not in dropbox: | |
gr.Info( | |
i18n( | |
"The file you dropped is not a valid pretrained file. Please try again." | |
) | |
) | |
else: | |
file_name = os.path.basename(dropbox) | |
pretrained_path = os.path.join(pretraineds_custom_path, file_name) | |
if os.path.exists(pretrained_path): | |
os.remove(pretrained_path) | |
os.rename(dropbox, pretrained_path) | |
gr.Info( | |
i18n( | |
"Click the refresh button to see the pretrained file in the dropdown menu." | |
) | |
) | |
return None | |
def train_tab(): | |
with gr.Accordion(i18n("Preprocess")): | |
with gr.Row(): | |
with gr.Column(): | |
model_name = gr.Textbox( | |
label=i18n("Model Name"), | |
placeholder=i18n("Enter model name"), | |
value="my-project", | |
interactive=True, | |
) | |
dataset_path = gr.Textbox( | |
label=i18n("Dataset Path"), | |
placeholder=i18n("Enter dataset path"), | |
interactive=True, | |
) | |
with gr.Column(): | |
sampling_rate = gr.Radio( | |
label=i18n("Sampling Rate"), | |
choices=["32000", "40000", "48000"], | |
value="40000", | |
interactive=True, | |
) | |
rvc_version = gr.Radio( | |
label=i18n("RVC Version"), | |
choices=["v1", "v2"], | |
value="v2", | |
interactive=True, | |
) | |
preprocess_output_info = gr.Textbox( | |
label=i18n("Output Information"), | |
value="", | |
max_lines=8, | |
interactive=False, | |
) | |
with gr.Row(): | |
preprocess_button = gr.Button(i18n("Preprocess Dataset")) | |
preprocess_button.click( | |
run_preprocess_script, | |
[model_name, dataset_path, sampling_rate], | |
preprocess_output_info, | |
api_name="preprocess_dataset", | |
) | |
with gr.Accordion(i18n("Extract")): | |
with gr.Row(): | |
hop_length = gr.Slider( | |
1, 512, 128, step=1, label=i18n("Hop Length"), interactive=True | |
) | |
with gr.Row(): | |
with gr.Column(): | |
f0method = gr.Radio( | |
label=i18n("Pitch extraction algorithm"), | |
choices=["pm", "dio", "crepe", "crepe-tiny", "harvest", "rmvpe"], | |
value="rmvpe", | |
interactive=True, | |
) | |
extract_output_info = gr.Textbox( | |
label=i18n("Output Information"), | |
value="", | |
max_lines=8, | |
interactive=False, | |
) | |
extract_button = gr.Button(i18n("Extract Features")) | |
extract_button.click( | |
run_extract_script, | |
[model_name, rvc_version, f0method, hop_length, sampling_rate], | |
extract_output_info, | |
api_name="extract_features", | |
) | |
with gr.Accordion(i18n("Train")): | |
with gr.Row(): | |
batch_size = gr.Slider( | |
1, | |
50, | |
max_vram_gpu(0), | |
step=1, | |
label=i18n("Batch Size"), | |
interactive=True, | |
) | |
save_every_epoch = gr.Slider( | |
1, 100, 10, step=1, label=i18n("Save Every Epoch"), interactive=True | |
) | |
total_epoch = gr.Slider( | |
1, 1000, 500, step=1, label=i18n("Total Epoch"), interactive=True | |
) | |
with gr.Row(): | |
pitch_guidance = gr.Checkbox( | |
label=i18n("Pitch Guidance"), value=True, interactive=True | |
) | |
pretrained = gr.Checkbox( | |
label=i18n("Pretrained"), value=True, interactive=True | |
) | |
save_only_latest = gr.Checkbox( | |
label=i18n("Save Only Latest"), value=False, interactive=True | |
) | |
save_every_weights = gr.Checkbox( | |
label=i18n("Save Every Weights"), value=True, interactive=True, | |
) | |
custom_pretrained = gr.Checkbox( | |
label=i18n("Custom Pretrained"), value=False, interactive=True | |
) | |
multiple_gpu = gr.Checkbox( | |
label=i18n("GPU Settings"), value=False, interactive=True | |
) | |
with gr.Row(): | |
with gr.Column(visible=False) as pretrained_custom_settings: | |
with gr.Accordion("Pretrained Custom Settings"): | |
upload_pretrained = gr.File( | |
label=i18n("Upload Pretrained Model"), | |
type="filepath", | |
interactive=True, | |
) | |
refresh_custom_pretaineds_button = gr.Button( | |
i18n("Refresh Custom Pretraineds") | |
) | |
g_pretrained_path = gr.Dropdown( | |
label=i18n("Custom Pretrained G"), | |
choices=sorted(pretraineds_list_g), | |
interactive=True, | |
allow_custom_value=True, | |
) | |
d_pretrained_path = gr.Dropdown( | |
label=i18n("Custom Pretrained D"), | |
choices=sorted(pretraineds_list_d), | |
interactive=True, | |
allow_custom_value=True, | |
) | |
with gr.Column(visible=False) as gpu_custom_settings: | |
with gr.Accordion("GPU Settings"): | |
gpu = gr.Textbox( | |
label=i18n("GPU Number"), | |
placeholder=i18n("0 to ∞ separated by -"), | |
value="0", | |
interactive=True, | |
) | |
gr.Textbox( | |
label=i18n("GPU Information"), | |
value=get_gpu_info(), | |
interactive=False, | |
) | |
with gr.Row(): | |
train_output_info = gr.Textbox( | |
label=i18n("Output Information"), | |
value="", | |
max_lines=8, | |
interactive=False, | |
) | |
with gr.Row(): | |
train_button = gr.Button(i18n("Start Training")) | |
train_button.click( | |
run_train, | |
[ | |
model_name, | |
rvc_version, | |
save_every_epoch, | |
save_only_latest, | |
save_every_weights, | |
total_epoch, | |
sampling_rate, | |
batch_size, | |
gpu, | |
pitch_guidance, | |
pretrained, | |
custom_pretrained, | |
g_pretrained_path, | |
d_pretrained_path, | |
], | |
train_output_info, | |
api_name="start_training", | |
) | |
index_button = gr.Button(i18n("Generate Index")) | |
index_button.click( | |
run_index_script, | |
[model_name, rvc_version], | |
train_output_info, | |
api_name="generate_index", | |
) | |
def toggle_visible(checkbox): | |
return {"visible": checkbox, "__type__": "update"} | |
custom_pretrained.change( | |
fn=toggle_visible, | |
inputs=[custom_pretrained], | |
outputs=[pretrained_custom_settings], | |
) | |
refresh_custom_pretaineds_button.click( | |
fn=refresh_custom_pretraineds, | |
inputs=[], | |
outputs=[g_pretrained_path, d_pretrained_path], | |
) | |
upload_pretrained.upload( | |
fn=save_drop_model, | |
inputs=[upload_pretrained], | |
outputs=[upload_pretrained], | |
) | |
multiple_gpu.change( | |
fn=toggle_visible, | |
inputs=[multiple_gpu], | |
outputs=[gpu_custom_settings], | |
) | |