Applio-V3 / tabs /train /train.py
freshyfresco's picture
Upload 125 files (#2)
938411e verified
raw history blame
No virus
10.2 kB
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],
)