so-vuts-svc versión completa instalación detallada, capacitación, pasos de razonamiento

Este documento de ayuda es un tutorial detallado de instalación, depuración y razonamiento en chino para el proyecto so-vits-svc También puede seleccionar directamente el documento LÉAME
oficial Escriba: Sucial Haga clic para ir a la página de inicio de Station B

Escrito al principio: en comparación con la versión 3.0, las operaciones de instalación, entrenamiento e inferencia de las versiones 4.0 y 4.1 son más simples

Debido a que Github es fácil de actualizar, la actualización del artículo se actualizará en Github, ¡y CSDN no se actualiza aquí! Dirección Github de este artículo: https://github.com/SUC-DriverOld/so-vits-svc-Chinese-Detail-Documents

Además, se recomienda pinchar directamente para acceder a la documentación oficial


2023.8.2 Actualización del documento:

1. Proporcione el modelo base de entrenamiento 4.1, debe descargarlo usted mismo, dirección de descarga: https://huggingface.co/Sucial/so-vits-svc4.1-pretrain_model también incluye el modelo base de entrenamiento del modelo de difusión

2. Proporcione el modelo base de entrenamiento 4.0, debe descargarlo usted mismo, descargar la dirección: https://huggingface.co/datasets/ms903/sovits4.0-768vec-layer12/tree/main/sovits_768l12_pre_large_320k y debe cambiarse el nombre a G_0. pth y D_0.pth

3. Proporcione el modelo base de entrenamiento 3.0, debe descargarlo usted mismo, dirección de descarga: https://pan.baidu.com/s/1uw6W3gOBvMbVey1qt_AzhA?pwd=80eo código de extracción: 80eo

4. Modificado el contenido del documento.

De hecho, puedes consultar la documentación oficial para configurar paso a paso aquí, pero si no conoces la configuración del entorno previo, puedes continuar leyendo la primera parte del siguiente artículo 1. Dependencia del entorno


El siguiente artículo solo presenta el método de instalación de la versión 4.0 (en realidad, una actualización diferida) porque el proceso de instalación oficial de la versión 4.1 es muy detallado. ! !

SO-VITS-SVC4.0 instalación detallada, capacitación, pasos de razonamiento


0. Antes de usar

Cualquier país, región, organización o individuo que use este proyecto debe cumplir con las siguientes leyes

"Código Civil"

Artículo 1019

Ninguna organización o individuo puede infringir los derechos de imagen de otros por difamación, desfiguración o falsificación por medio de la tecnología de la información. Sin el consentimiento del titular del derecho de retrato, el retrato del titular del derecho de retrato no se producirá, utilizará ni publicará, salvo que la ley disponga lo contrario. Sin el consentimiento del propietario del derecho de retrato, el propietario de la obra de retrato no utilizará ni divulgará el retrato del propietario del derecho de retrato mediante la publicación, copia, distribución, alquiler, exhibición, etc. Para la protección de la voz de las personas físicas, consulte las disposiciones pertinentes sobre la protección de los derechos de retrato.
Para la protección de la voz de las personas físicas, consulte las disposiciones pertinentes sobre la protección de los derechos de retrato

Artículo 1024

[Derecho de reputación] Los sujetos civiles gozan del derecho de reputación. Ninguna organización o individuo puede infringir los derechos de reputación de otros por medio de insultos o difamación.

Artículo 1027

[Obras que vulneran el derecho a la reputación] Si las obras literarias y artísticas publicadas por el perpetrador describen personas reales o personas específicas, tienen contenido insultante o difamatorio e infringen el derecho a la reputación de los demás, la víctima tiene derecho a solicitar al perpetrador asumir la responsabilidad civil conforme a la ley. Las obras literarias y artísticas publicadas por el autor no describen a una persona específica, pero si las circunstancias en ellas son similares a la situación de la persona específica, no incurrirán en responsabilidad civil.

La Constitución de la República Popular China

" Derecho Penal de la República Popular China "

" Código Civil de la República Popular China "

Este tutorial es solo para fines de comunicación y aprendizaje, no lo use para fines ilegales, como violar leyes y reglamentos o violar el orden público y la buena moral.

Por respeto al proveedor de la fuente de audio, no lo use para propósitos de fantasmas y animales.

Continuando con el uso se considera que ha aceptado las normas pertinentes descritas en este tutorial.Este tutorial ha realizado la obligación de persuasión y no se hace responsable de los posibles problemas posteriores.

  1. El contenido de este tutorial solo representa al individuo y no representa los puntos de vista del equipo de so-vits-svc y el autor original.

  2. Respete el acuerdo de fuente abierta del código fuente abierto involucrado en este tutorial

  3. Este tutorial utiliza por defecto el repositorio mantenido por el equipo de so-vits-svc

  4. Si realiza un lanzamiento de video, se recomienda indicar el enlace de Github del proyecto , y la etiqueta recomienda usar so-vits-svc para distinguirlo de otras tecnologías.

  5. El entrenamiento y el razonamiento en la nube pueden implicar el uso de fondos. Si es menor de edad , proceda después de obtener el permiso y la comprensión de su tutor . Este tutorial no es responsable de ningún problema de seguimiento causado por

  6. La capacitación local (especialmente en el caso de un hardware deficiente) puede requerir una operación de alta carga a largo plazo del equipo, tome buenas medidas de mantenimiento y disipación de calor del equipo.

  7. Asegúrese de que la fuente de datos de su conjunto de datos sea legal y compatible , y que el proveedor de datos tenga claro lo que está haciendo y las posibles consecuencias.

  8. Debido a razones de equipo, este tutorial solo se ha probado en el sistema Windows . Para Mac y Linux, asegúrese de tener ciertas habilidades para resolver problemas.

  9. Este proyecto es un proyecto de síntesis de voz cantada y no se puede utilizar para otros fines, tenga en cuenta

0.1 Requisitos de hardware

  1. Actualmente, el razonamiento se divide en razonamiento de línea de comandos y razonamiento WebUI Si el requisito de velocidad no es alto, se pueden usar tanto la CPU como la GPU.
  2. Tarjeta gráfica NVIDIA con al menos 6G de memoria (como RTX3060)
  3. V100 (16G), V100 (32G), A100 (40G), A100 (80G) y otras tarjetas gráficas son comunes en la nube, y algunas nubes ofrecen tarjetas gráficas como RTX3090
  4. Para la formación en la nube , elija primero la imagen del sistema Linux y no se recomienda utilizar el sistema Windows para la formación en la nube.

0.2 Preparar con anticipación

  1. Prepare al menos 200 voces humanas limpias ( sin ruido de fondo, sin reverberación ) de aproximadamente 8 s (aproximadamente 30 minutos de tiempo de conversación continua , es decir, aproximadamente 1,5 horas de muestreo de conversación normal ) como conjunto de entrenamiento. Y es mejor mantener pequeños los altibajos emocionales del orador , el volumen de la voz es apropiado y hacer un buen trabajo al igualar el volumen.
  2. Prepare el modelo inferior para el entrenamiento con anticipación ( muy importante )
  3. Nota : el canto como conjunto de entrenamiento solo se puede usar para inferir el canto, pero el habla como conjunto de entrenamiento se puede usar para inferir el canto y generar TTS. Sin embargo, usar el habla como un conjunto de entrenamiento puede causar problemas en la inferencia de agudos y graves (es decir, falta de muestras de entrenamiento de tonos altos y bajos), y una solución factible es la fusión de modelos.
  4. Razonamiento: Es necesario preparar un ruido de fondo <30dB , tratar de no traer demasiada reverberación y sonido seco armónico para el razonamiento
  5. Nota : Al razonar sobre canciones con voces femeninas, se recomienda usar voces femeninas para entrenar el modelo, y lo mismo se aplica a las voces masculinas (no preguntes por qué, las tarjetas gráficas de precio normal no pueden entrenar un rango tan amplio)

0.3 ciclo de entrenamiento

Bajo la premisa de tener un modelo inferior , se seleccionaron 200 audios como conjunto de entrenamiento, y batch_size = 3tras múltiples pruebas se obtuvieron las siguientes conclusiones (RTX3060, ):

  1. El número de pasos de entrenamiento para que el modelo alcance la convergencia es de 10w+ (si se entrena durante unas 8 horas por noche, tardará unos 7 días)
  2. La cantidad de pasos de entrenamiento que el modelo probablemente puede usar es de aproximadamente 2w-3w (si entrenas unas 8 horas por noche, tomará alrededor de 2-3 días)
  3. La cantidad de pasos de entrenamiento que el modelo puede usar básicamente (no es un gran problema) es de aproximadamente 5w-8w (si entrenas unas 8 horas por noche, tomará alrededor de 4-5 días)

1. Dependencia ambiental

  • El entorno requerido para este proyecto:
    NVIDIA-CUDA
    Python <= 3.10
    Pytorch
    FFmpeg

-Cuda

  • Ingrese en la consola cmd nvidia-smi.exepara ver la versión del controlador de la tarjeta gráfica y la versión cuda correspondiente

  • Vaya al sitio web oficial de NVIDIA-Developer para descargar la versión de Cuda correspondiente
    al sistema.Tome Cuda-11.7la versión como ejemplo ( Nota: todas las configuraciones a continuación en este artículo se muestran Cuda-11.7a continuación ) Dirección de descarga de Cuda11.7 Elija instalar de acuerdo con su propio sistema y necesidades (generalmente, usuarios locales de Windows, elija en orden Windows, x86_64, 系统版本, exe(local))

  • Después de que la instalación sea exitosa, ingrésala en la consola de cmd nvcc -V, y si aparece algo similar a lo siguiente, la instalación es exitosa:

    nvcc: NVIDIA (R) Cuda compiler driver
    Copyright (c) 2005-2022 NVIDIA Corporation
    Built on Tue_May__3_19:00:59_Pacific_Daylight_Time_2022
    Cuda compilation tools, release 11.7, V11.7.64
    Build cuda_11.7.r11.7/compiler.31294372_0

¡prestar atención!

  • Hasta ahora, pytorch admite hastacuda11.7
  • Si ve su versión de Cuda> 11.7 en el primer paso anterior, aún elija 11.7 para descargar e instalar (Cuda tiene compatibilidad de versión) y una vez que se complete la instalación, ingrese nuevamente en cmd y la versión de cuda no cambiará, es decir, nvidia-smi.exese muestran todas las Versiones > 11,7
  • **Cómo desinstalar Cuda:** Abra el Panel de control - Programas - Desinstale un programa y NVIDIA CUDAdesinstale todos los programas que vienen con él (un total de 5)

- Pitón

  • Vaya al sitio web oficial de Python para descargar Python, la versión debe ser inferior a 3.10 (aquí se omiten el método de instalación detallado y la ruta de acceso, solo verifíquelo en línea)
  • pythonUna vez completada la instalación, ingrese algo similar a lo siguiente en la consola cmd , y la instalación se realizará correctamente:
    Python 3.10.4 (tags/v3.10.4:9d38120, Mar 23 2022, 23:13:41) [MSC v.1929 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> 
  • Configure python para descargar el origen del espejo (omítalo si hay condiciones de red ajenas) y
    ejecútelo secuencialmente en la consola cmd
    # 设置清华大学下载镜像
    pip config set global.index-url http://pypi.tuna.tsinghua.edu.cn/simple
    pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn

Instalar dependencias

  • En primer lugar, necesitamos instalar estas tres bibliotecas por separadotorch , torchaudioy se proporcionan los dos métodos siguientestorchvision

Método 1 (conveniente pero no recomendado, porque encontré un problema en el proceso de prueba de este método, que afectará la configuración posterior de AI

Vaya directamente al sitio web oficial de Pytorch , seleccione la versión requerida y copie el comando que se muestra en la columna Ejecutar este comando para la instalación de cmd (no recomendado)

Método 2 (más lento pero estable, recomendado)

  • Vaya a esta dirección y use Ctrl+Fla búsqueda para descargar el paquete whl directamente Haga clic para ir

    • Lo que este proyecto necesita es
      torch==1.10.0+cu113
      torchaudio==0.10.0+cu113
      1.10.0y 0.10.0significa pytorchla versión, cu113significa cudala versión 11.3
      , etc., elija la versión que más le convenga para instalar
  • A continuación, tomaré Cuda11.7la versión como ejemplo
    : el ejemplo comienza:

    • Necesitamos instalar las siguientes tres bibliotecas
    1. torch-1.13.0+cu117-cp310-cp310-win_amd64.whl donde cp310 python3.10se refiere win-amd64al sistema operativo Windows de 64 bits
    2. antorchaaudio-0.13.0+cu117-cp310-cp310-win_amd64.whl
    3. torchvision-0.14.0+cu117-cp310-cp310-win_amd64.whl
  • Una vez completada la descarga, ingrese al directorio del archivo whl descargado, haga clic derecho en el espacio en blanco en la carpeta, seleccione Abrir en Terminal y ejecute el siguiente comando para instalar la biblioteca

    pip install .\torch-1.13.0+cu117-cp310-cp310-win_amd64.whl
    # 回车运行(安装时间较长)
    pip install .\torchaudio-0.13.0+cu117-cp310-cp310-win_amd64.whl
    # 回车运行
    pip install .\torchvision-0.14.0+cu117-cp310-cp310-win_amd64.whl 
    # 回车运行
  • Asegúrese de ejecutar el siguiente comando después de que aparezca Successfully installed ..., el primer paquete de antorcha tarda mucho en instalarse
    – el final del ejemplo –

torchDespués de instalar estas tres bibliotecas, use el siguiente comando en la consola cmd para verificar si las versiones de cuda y torch torchaudiocoincidentorchvision

    python
    # 回车运行
    import torch
    # 回车运行
    print(torch.__version__)
    # 回车运行
    print(torch.cuda.is_available())
    # 回车运行
  • Si aparece la última línea True, tiene éxito, Falsesi aparece, falla y necesita ser reinstalado

Luego instale las dependencias (solo como referencia, las dependencias de la nueva versión han cambiado, consulte los requisitos oficiales.txt)

  • requirements.txtCree un nuevo archivo de texto con el nombre en cualquier lugar , ingrese el siguiente contenido para guardar
    Flask==2.1.2
    Flask_Cors==3.0.10
    gradio==3.4.1
    numpy==1.23.5
    playsound==1.3.0
    PyAudio==0.2.12
    pydub==0.25.1
    pyworld==0.3.2
    requests==2.28.1
    scipy==1.10.0
    sounddevice==0.4.5
    SoundFile==0.10.3.post1
    starlette==0.19.1
    tqdm==4.63.0
    scikit-maad
    praat-parselmouth
    tensorboard
    librosa
    fairseq
  • Haga clic derecho en el espacio en blanco en la carpeta donde se encuentra el archivo de texto y seleccione Abrir en Terminal y ejecute el siguiente comando para instalar la biblioteca (si ocurre un error, intente pip install [库名称]volver a instalarlo por separado hasta que tenga éxito)
    pip install -r requirements.txt

-FFmpeg

  • Vaya al sitio web oficial de FFmpeg para descargar. Descomprímalo en cualquier ubicación y agregue Ruta para ubicarlo en Configuración avanzada del sistema-Variables de entorno .\ffmpeg\bin(aquí se omiten el método de instalación detallado y la ruta agregada, solo compruébelo en línea)
  • ffmpeg -versionUna vez completada la instalación, ingrese algo similar a lo siguiente en la consola cmd , y la instalación se realizará correctamente
ffmpeg version git-2020-08-12-bb59bdb Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 10.2.1 (GCC) 20200805
configuration: [此处省略一大堆内容]
libavutil      56. 58.100 / 56. 58.100
libavcodec     58.100.100 / 58.100.100
...

El valor de referencia de seguir bajando aquí no es tan alto como el documento oficial ¡Se recomienda leer el documento oficial directamente! ! !

2. IA preentrenada

- Descargar el código fuente del proyecto

  • Vaya a so-vits-svc4.0 para descargar el código fuente.
    También puede descargar los dos siguientes según sea necesario:
    Una bifurcación con interacción mejorada Recomendado: 34j/so-vits-svc-fork
    Un cliente que admita la conversión en tiempo real: w-okada/voice-changer

  • Extraer a cualquier carpeta

- Descargar modelos pre-entrenados

  • Esta parte del documento oficial está escrita en detalle, y la citaré directamente aquí.

elemento requerido

# contentvec
http://obs.cstcloud.cn/share/obs/sankagenkeshi/checkpoint_best_legacy_500.pt
# 也可手动下载放在hubert目录

opcional (muy recomendable)

  • Archivo de modelo base preentrenado:G_0.pth D_0.pth
  • Colóquelo logs/44ken el directorio y
    consígalo en svc-develop-team (a determinar) o en cualquier otro lugar

Aunque el modelo inferior generalmente no causa ningún problema de derechos de autor, preste atención, como preguntarle al autor con anticipación, o el autor indicó claramente el uso factible en la descripción del modelo.

- Preparar muestras de entrenamiento.

Para los datos de entrenamiento preparados, se recomiendan de 60 a 100 voces ( el formato debe ser wav y se deben crear diferentes carpetas para diferentes oradores ), ¡y cada voz debe controlarse en 4 a 8 segundos! (Asegúrese de que no haya ruido en el discurso o intente reducir el ruido tanto como sea posible, el discurso en una carpeta debe ser pronunciado por una persona), y se puede entrenar un modelo con buen efecto.

El audio largo se puede cortar en grandes cantidades utilizando el software de corte automático de audio auxiliar audio-slicer

  • Coloque las carpetas de audio (múltiples carpetas si hay varias personas) en .\dataset_rawla carpeta juntas. La estructura de archivos es similar a la siguiente:
dataset_raw
├───speaker0
│   ├───xxx1-xxx1.wav
│   ├───...
│   └───Lxx-0xx8.wav
└───speaker1
    ├───xx2-0xxx2.wav
    ├───...
    └───xxx7-xxx007.wav
  • Además, debe .\dataset_rawcrear y editar en la carpeta config.json, el código es el siguiente:
"n_speakers": 10    //修改数字为说话人的人数
"spk":{
    
    
    "speaker0": 0,  //修改speaker0为第一个说话人的名字,需要和文件夹名字一样,后面的: 0, 不需要改
    "speaker1": 1,  //以此类推
    "speaker2": 2,
    //以此类推
}

- Pretratamiento de muestras

Si se informan errores en todos los pasos a continuación, intente varias veces. Si se informan errores todo el tiempo, significa que la primera parte de la dependencia del entorno no está instalada en su lugar. Puede reinstalar la biblioteca correspondiente de acuerdo con el contenido de el informe de errores. (En general, si está instalado correctamente, si hay un informe de error, intente varias veces o apague y reinicie, definitivamente resolverá el informe de error).

1. Remuestreo

  • Ejecute el terminal en so-vits-svcla carpeta y ejecute directamente:
    python resample.py
  • Después de ejecutarse con éxito, .\dataset\32khabrá la voz wav del altavoz en la carpeta.

2. Divide automáticamente el conjunto de entrenamiento, el conjunto de verificación y el conjunto de prueba, y genera automáticamente archivos de configuración

  • Ejecute el terminal en so-vits-svcla carpeta y ejecute directamente:
    python preprocess_flist_config.py
  • Si aparece algo similar a lo siguiente, el procesamiento es exitoso:
PS E:\vs\so-vits-svc> python preprocess_flist_config.py
100%|████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 1993.49it/s]
Writing ./filelists/train.txt
100%|████████████████████████████████████████████████████████████████████████████████████████████| 16/16 [00:00<?, ?it/s]
Writing ./filelists/val.txt
100%|████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:00<?, ?it/s]
Writing ./filelists/test.txt
100%|████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:00<?, ?it/s]
Writing configs/config.json

3. Genera hubert y f0

  • Ejecute el terminal en so-vits-svcla carpeta y ejecute directamente:
    python preprocess_hubert_f0.py
  • Si aparece algo similar a lo siguiente, el procesamiento es exitoso: (Solo usé 20 piezas de audio para la demostración aquí)
PS E:\vs\so-vits-svc-32k> python preprocess_hubert_f0.py
Loading hubert for content...
Loaded hubert.
100%|██████████████████████████████████████████████████████████████████████████████████| 20/20 [00:06<00:00,  3.03it/s]
  • Después de realizar los pasos anteriores, el directorio del conjunto de datos son los datos preprocesados ​​y la carpeta dataset_raw se puede eliminar

4. Modificar el archivo de configuración (obligatorio)

  • Abra el archivo de configuración generado en el segundo paso anterior .\configs\config.jsonpara modificar el valor de la primera 13línea de código "batch_size". Permítanme explicar aquí que "batch_size": 12,el valor 12 debe ajustarse de acuerdo con la memoria de video de su computadora (administrador de tareas-GPU- memoria GPU dedicada )

    • Se recomienda
      modificar la memoria de video 6G a 2 o 3,
      y la memoria de video 8G se recomienda modificar a 4 o 6.
      El parámetro "batch_size" se puede reducir para resolver el problema de memoria de video insuficiente

3. Empieza a entrenar

  • Ejecute el terminal en so-vits-svcla carpeta y ejecute directamente el siguiente comando para comenzar a entrenar
    Nota: Antes de comenzar a entrenar, se recomienda reiniciar la computadora para borrar la memoria y la memoria de video, y cerrar juegos de fondo, fondos de pantalla en vivo y otro software. mejor dejar solo una ventana de cmd
    python train.py -c configs/config.json -m 44k
  • Si ocurre el siguiente error, significa que la memoria de video no es suficiente
torch.cuda.OutOfMemoryError: CUDA out of menory. Tried to allocate 16.80 MiB (GPU 0; 8.0 GiB total capacity; 7.11 Gi8 already allocated; 0 bytes free; 7.30 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_cUDA_ALLOC_CONF
# 注意:一定是 0 bytes free < Tried to allocate 16.80 MiB 才是显存不足,不然就是别的问题
  • Es posible que haya más errores informados aquí. Si ocurre un error, intente volver a ejecutar primero python train.py -c configs/config.json -m 32k, intente varias veces o apague y reinicie, y generalmente tendrá éxito. Si el error es siempre el mismo error, significa que hay un problema en el lugar correspondiente (confíe en el error para encontrar el problema)
  • Después de una ejecución exitosa, debería ser similar a lo siguiente:
2023-04-01 17:02:21,633 44k INFO {
    
    'train': {
    
    'log_interval': 200, 'eval_interval': 800, 'seed': 1234, 'epochs': 10000, 'learning_rate': 0.0001, 'betas': [0.8, 0.99], 'eps': 1e-09, 'batch_size': 2, 'fp16_run': False, 'lr_decay': 0.999875, 'segment_size': 10240, 'init_lr_ratio': 1, 'warmup_epochs': 0, 'c_mel': 45, 'c_kl': 1.0, 'use_sr': True, 'max_speclen': 512, 'port': '8001', 'keep_ckpts': 3}, 'data': {
    
    'training_files': 'filelists/train.txt', 'validation_files': 'filelists/val.txt', 'max_wav_value': 32768.0, 'sampling_rate': 44100, 'filter_length': 2048, 'hop_length': 512, 'win_length': 2048, 'n_mel_channels': 80, 'mel_fmin': 0.0, 'mel_fmax': 22050}, 'model': {
    
    'inter_channels': 192, 'hidden_channels': 192, 'filter_channels': 768, 'n_heads': 2, 'n_layers': 6, 'kernel_size': 3, 'p_dropout': 0.1, 'resblock': '1', 'resblock_kernel_sizes': [3, 7, 11], 'resblock_dilation_sizes': [[1, 3, 5], [1, 3, 5], [1, 3, 5]], 'upsample_rates': [8, 8, 2, 2, 2], 'upsample_initial_channel': 512, 'upsample_kernel_sizes': [16, 16, 4, 4, 4], 'n_layers_q': 3, 'use_spectral_norm': False, 'gin_channels': 256, 'ssl_dim': 256, 'n_speakers': 1}, 'spk': {
    
    'sanwu': 0}, 'model_dir': './logs\\44k'}
2023-04-01 17:02:21,634 44k WARNING E:\vs\so-vits-svc\so-vits-svc-4.0-sanwu is not a git repository, therefore hash value comparison will be ignored.
2023-04-01 17:02:24,816 44k INFO Loaded checkpoint './logs\44k\G_2400.pth' (iteration 7)
2023-04-01 17:02:25,289 44k INFO Loaded checkpoint './logs\44k\D_2400.pth' (iteration 7)
2023-04-01 17:04:07,531 44k INFO Train Epoch: 7 [27%]
2023-04-01 17:04:07,531 44k INFO Losses: [1.178899884223938, 5.447257995605469, 13.873568534851074, 45.92221450805664, 1.7247810363769531], step: 2400, lr: 9.991253280566489e-05
2023-04-01 17:04:12,999 44k INFO Saving model and optimizer state at iteration 7 to ./logs\44k\G_2400.pth
2023-04-01 17:04:13,783 44k INFO Saving model and optimizer state at iteration 7 to ./logs\44k\D_2400.pth
2023-04-01 17:06:45,604 44k INFO Train Epoch: 7 [79%]
2023-04-01 17:06:45,604 44k INFO Losses: [1.1601612567901611, 4.299866199493408, 13.368327140808105, 34.780784606933594, 1.5297999382019043], step: 2600, lr: 9.991253280566489e-05
2023-04-01 17:07:39,541 44k INFO ====> Epoch: 7, cost 317.91 s
2023-04-01 17:09:00,870 44k INFO Train Epoch: 8 [31%]
2023-04-01 17:09:00,871 44k INFO Losses: [0.7684269547462463, 4.85490608215332, 17.213212966918945, 42.981754302978516, 1.2239456176757812], step: 2800, lr: 9.990004373906418e-05
2023-04-01 17:10:57,125 44k INFO Train Epoch: 8 [83%]
2023-04-01 17:10:57,126 44k INFO Losses: [1.4237611293792725, 3.9369957447052, 13.494928359985352, 34.12102127075195, 1.412590503692627], step: 3000, lr: 9.990004373906418e-05
2023-04-01 17:11:34,132 44k INFO ====> Epoch: 8, cost 234.59 s
2023-04-01 17:13:16,350 44k INFO Train Epoch: 9 [36%]
2023-04-01 17:13:16,350 44k INFO Losses: [0.9615359306335449, 5.3759379386901855, 11.088563919067383, 34.991233825683594, 1.9573057889938354], step: 3200, lr: 9.98875562335968e-05
2023-04-01 17:13:20,401 44k INFO Saving model and optimizer state at iteration 9 to ./logs\44k\G_3200.pth
2023-04-01 17:13:21,223 44k INFO Saving model and optimizer state at iteration 9 to ./logs\44k\D_3200.pth
2023-04-01 17:13:21,813 44k INFO .. Free up space by deleting ckpt ./logs\44k\G_800.pth
2023-04-01 17:13:21,814 44k INFO .. Free up space by deleting ckpt ./logs\44k\D_800.pth
2023-04-01 17:15:17,549 44k INFO Train Epoch: 9 [88%]
2023-04-01 17:15:17,550 44k INFO Losses: [1.2361057996749878, 4.204023838043213, 13.108729362487793, 37.149662017822266, 1.6868081092834473], step: 3400, lr: 9.98875562335968e-05
2023-04-01 17:15:45,216 44k INFO ====> Epoch: 9, cost 251.08 s
  • Si aparece algo similar a lo anterior, significa que el entrenamiento está comenzando (la memoria de video se llenará directamente). Hay dos formas de dejar de entrenar:

    1. de acuerdo aCtrl+C
    2. Simplemente tacha la esquina superior derecha y
      ejecútalo en la consola python train.py -c configs/config.json -m 44kpara continuar entrenando
  • Nota: El siguiente error puede ocurrir cuando el proceso de entrenamiento anterior se ejecuta por primera vez, simplemente ignórelo (si comprende la estructura del archivo pth, puede intentar repararlo)

2023-04-01 09:58:55,507 44k INFO emb_g.weight is not in the checkpoint
2023-04-01 09:58:55,507 44k INFO pre.weight is not in the checkpoint
2023-04-01 09:58:55,508 44k INFO pre.bias is not in the checkpoint
2023-04-01 09:58:55,508 44k INFO enc_p.proj.weight is not in the checkpoint
2023-04-01 09:58:55,508 44k INFO enc_p.proj.bias is not in the checkpoint
2023-04-01 09:58:55,508 44k INFO enc_p.f0_emb.weight is not in the checkpoint
2023-04-01 09:58:55,508 44k INFO enc_p.enc_.attn_layers.0.emb_rel_k is not in the checkpoint
2023-04-01 09:58:55,509 44k INFO enc_p.enc_.attn_layers.0.emb_rel_v is not in the checkpoint
2023-04-01 09:58:55,509 44k INFO enc_p.enc_.attn_layers.0.conv_q.weight is not in the checkpoint
2023-04-01 09:58:55,509 44k INFO enc_p.enc_.attn_layers.0.conv_q.bias is not in the checkpoint
2023-04-01 09:58:55,509 44k INFO enc_p.enc_.attn_layers.0.conv_k.weight is not in the checkpoint
2023-04-01 09:58:55,509 44k INFO enc_p.enc_.attn_layers.0.conv_k.bias is not in the checkpoint
2023-04-01 09:58:55,509 44k INFO enc_p.enc_.attn_layers.0.conv_v.weight is not in the checkpoint
2023-04-01 09:58:55,510 44k INFO enc_p.enc_.attn_layers.0.conv_v.bias is not in the checkpoint
2023-04-01 09:58:55,510 44k INFO enc_p.enc_.attn_layers.0.conv_o.weight is not in the checkpoint
2023-04-01 09:58:55,510 44k INFO enc_p.enc_.attn_layers.0.conv_o.bias is not in the checkpoint
#此处省略更多
#…………

- Ver registros y tiempos de entrenamiento

  • La ubicación donde se guarda el registro: .\logs\44k\train.log
    ejemplo de lectura:
# 示例3
2023-02-08 18:32:24,942 44k INFO [2.252035617828369, 2.5846095085144043, 8.220404624938965, 5   17.75478744506836, 0.9781494140625, 2000, 9.911637167309565e-05]
2023-02-08 18:32:28,889 44k INFO Saving model and optimizer state at iteration 72 to ./logs\44k\G_2000.pth
2023-02-08 18:32:29,661 44k INFO Saving model and optimizer state at iteration 72 to ./logs\44k\D_2000.pth
# 示例1
2023-02-08 18:32:39,907 44k INFO ====> Epoch: 72, cost xxx s
2023-02-08 18:33:00,099 44k INFO ====> Epoch: 73, cost xxx s
2023-02-08 18:33:20,682 44k INFO ====> Epoch: 74, cost xxx s
2023-02-08 18:33:40,887 44k INFO ====> Epoch: 75, cost xxx s
2023-02-08 18:34:01,460 44k INFO ====> Epoch: 76, cost xxx s
2023-02-08 18:34:21,798 44k INFO ====> Epoch: 77, cost xxx s
2023-02-08 18:34:41,866 44k INFO ====> Epoch: 78, cost xxx s
2023-02-08 18:34:54,712 44k INFO Train Epoch: 79 [57%]
# 示例2
2023-02-08 18:34:54,712 44k INFO [2.282658100128174, 2.5492446422576904, 10.027194023132324, 15.401838302612305, 1.598284363746643, 2200, 9.902967736366644e-05]

Para la siguiente explicación, cité la explicación de inifnite_loop, el maestro de subida de la estación B, y videos relacionados y columnas relacionadas.

  • Se debe prestar atención a dos parámetros: Epoch y global_step
    Epoch representa el lote iterativo, cada lote se puede considerar como una agrupación iterativa
    Global_step representa el número total de iteraciones
  • La relación entre los dos es global_step = el número de voces de la mayoría de los hablantes de voz / tamaño_lote * época_tamaño_lote
    es un parámetro en el archivo de configuración
  • Ejemplo 1: el resultado de cada iteración ====> Epoch: 74indica que se completó el lote de la iteración 74
  • Ejemplo 2: Global_step Salida cada 200 veces (parámetros en el archivo de configuración log_interval)
  • Ejemplo 3: Global_step salida (parámetros en el archivo de configuración) cada 1000 veces (el archivo de configuración sin cambios debe ser 800 veces por defecto) eval_interval, y el modelo se guardará en un nuevo archivo

- Modelos entrenados guardados

Anteriormente, hablamos sobre guardar una muestra del modelo cada 1000 iteraciones (el archivo de configuración sin modificar debe ser 800 de manera predeterminada), entonces, ¿dónde se guardan estas muestras? ¿Cómo lidiar con estas muestras? Lo describiré en detalle a continuación.

  • El modelo de entrenamiento guarda la ubicación:.\logs\44k
  • Abra esta ruta después de entrenar durante un cierto período de tiempo y encontrará que hay muchos archivos:
D_0.pth
D_1000.pth
D_2000.pth
D_3000.pth
D_4000.pth
...
G_0.pth
G_1000.pth
G_2000.pth
G_3000.pth
G_4000.pth
...

4. Uso razonable

Después de entrenar los últimos G y D de acuerdo con el método anterior, ¿cómo usar estos modelos? A continuación describiré el método de operación específico.

- listo para secar

  • Prepare la voz seca de una canción. La voz seca se puede extraer por software. Recomiendo Ultimate Vocal Remover, que es de código abierto y se puede descargar en Github. enlace de descarga
  • Utilice un software de procesamiento de audio (como Au, Studio One, etc.) para dividir este sonido seco en varios segmentos de no más de 40 segundos y guárdelos uno por uno
  • También puede usar Audio Slicer, un software de corte automático de audio
  • Coloque sus clips de sonido secos procesados ​​en .\rawcarpetas

- Modificar código de inferencia

  • Ábralo inference_main.py, modifique la primera 25-46línea, el contenido específico de la modificación es el siguiente (de hecho, el comentario es muy claro, lo copié)
# 一定要设置的部分
    parser.add_argument('-m', '--model_path', type=str, default="logs/44k/G_4800.pth", help='模型路径')
    parser.add_argument('-c', '--config_path', type=str, default="configs/config.json", help='配置文件路径')
    parser.add_argument('-cl', '--clip', type=float, default=0, help='音频自动切片,0为不切片,单位为秒/s')
    parser.add_argument('-n', '--clean_names', type=str, nargs='+', default=["vocals (1)","vocals (2)","vocals (3)","vocals (4)","vocals (5)","vocals (6)","vocals (7)","vocals (8)"], help='wav文件名列表,放在raw文件夹下')
    parser.add_argument('-t', '--trans', type=int, nargs='+', default=[0], help='音高调整,支持正负(半音)')
    parser.add_argument('-s', '--spk_list', type=str, nargs='+', default=['Hanser'], help='合成目标说话人名称')

    # 可选项部分
    parser.add_argument('-a', '--auto_predict_f0', action='store_true', default=False,
                        help='语音转换自动预测音高,转换歌声时不要打开这个会严重跑调')
    parser.add_argument('-cm', '--cluster_model_path', type=str, default="logs/44k/kmeans_10000.pt", help='聚类模型路径,如果没有训练聚类则随便填')
    parser.add_argument('-cr', '--cluster_infer_ratio', type=float, default=0, help='聚类方案占比,范围0-1,若没有训练聚类模型则填0即可')
    parser.add_argument('-lg', '--linear_gradient', type=float, default=0, help='两段音频切片的交叉淡入长度,如果自动切片后出现人声不连贯可调整该数值,如果连贯建议采用默认值0,单位为秒/s')

    # 不用动的部分
    parser.add_argument('-sd', '--slice_db', type=int, default=-40, help='默认-40,嘈杂的音频可以-30,干声保留呼吸可以-50')
    parser.add_argument('-d', '--device', type=str, default=None, help='推理设备,None则为自动选择cpu和gpu')
    parser.add_argument('-ns', '--noice_scale', type=float, default=0.4, help='噪音级别,会影响咬字和音质,较为玄学')
    parser.add_argument('-p', '--pad_seconds', type=float, default=0.5, help='推理音频pad秒数,由于未知原因开头结尾会有异响,pad一小段静音段后就不会出现')
    parser.add_argument('-wf', '--wav_format', type=str, default='wav', help='音频输出格式')
    parser.add_argument('-lgr', '--linear_gradient_retain', type=float, default=0.75, help='自动音频切片后,需要舍弃每段切片的头尾。该参数设置交叉长度保留的比例,范围0-1,左开右闭')
  • Línea de comando de soporte
# 例
python inference_main.py -m "logs/44k/G_30400.pth" -c "configs/config.json" -n "君の知らない物語-src.wav" -t 0 -s "nen"

campo requerido

  • -m| --model_path: ruta del modelo
  • -c| --config_path: ruta del archivo de configuración
  • -n| --clean_names: lista de nombres de archivos wav, colocados en la carpeta raw
  • -t| --trans: Ajuste de tono, soporte positivo y negativo (semitono)
  • -s| --spk_list: nombre de hablante de destino sintético
  • -cl| --clip: segmento de audio obligatorio, el valor predeterminado 0 es segmento automático, la unidad es segundo/s

Parte opcional: vea la siguiente sección para más detalles

  • -lg| --linear_gradient: La duración del fundido cruzado de dos segmentos de audio. Si la voz humana es incoherente después de forzar el segmento, puede ajustar este valor. Si es coherente, se recomienda utilizar el valor predeterminado de 0 y la unidad es la segunda.
  • -fmp| --f0_mean_pooling: Ya sea para usar el filtro medio (agrupación) para F0, que puede mejorar algunos silencios. Tenga en cuenta que habilitar esta opción hará que la velocidad de inferencia disminuya y está deshabilitada de forma predeterminada
  • -a| --auto_predict_f0: La conversión de voz predice automáticamente el tono, no habilite esto al convertir voces cantadas, causará graves desafinaciones
  • -cm| --cluster_model_path: La ruta del modelo de agrupamiento, si no hay agrupamiento de entrenamiento, simplemente complételo
  • -cr| --cluster_infer_ratio: La proporción del esquema de agrupamiento, el rango es 0-1, si no se entrena ningún modelo de agrupamiento, el valor predeterminado es 0

- Generación de inferencias

  • Una vez completada la modificación, guarde el código, so-vits-svcejecute el terminal en la carpeta y ejecute el siguiente comando para iniciar la generación de inferencias
    python .\inference_main.py
  • Una vez que la ventana negra se cierra automáticamente, se completa la generación de inferencias. Los archivos de audio generados están .\resultsen la carpeta
  • Si parece que no le está yendo bien, entrene más al modelo.

- Postprocesamiento

  • Importe el sonido seco generado y el acompañamiento de la canción (que también se puede extraer con Ultimate Vocal Remover) en el software de procesamiento de audio y el software host (como Au, Studio One, etc.) para mezclar y masterizar, y finalmente obtenga el producto terminado.

5. Lista de agradecimiento


SO-VITS-SVC3.0 instalación detallada, capacitación, pasos de razonamiento

2023-3-12 Instrucciones de actualización del documento:

Por motivos especiales, la documentación del proyecto dejará de actualizarse. Para obtener más información, consulte la página de inicio del autor original. ¡Gracias por su apoyo!


Este documento de ayuda es un tutorial detallado de instalación, depuración y razonamiento en chino para el proyecto so-vits-svc3.0 También puede seleccionar directamente el documento LÉAME
oficial Escriba: Sucial Haga clic para ir a la página de inicio de Station B

1. Dependencia ambiental

  • El entorno requerido para este proyecto:
    NVIDIA-CUDA
    Python <= 3.10
    Pytorch
    FFmpeg

-Cuda

  • Ingrese en la consola cmd nvidia-smi.exepara ver la versión del controlador de la tarjeta gráfica y la versión cuda correspondiente

  • Vaya al sitio web oficial de NVIDIA-Developer para descargar la versión de Cuda correspondiente
    al sistema.Tome Cuda-11.7la versión como ejemplo ( Nota: todas las configuraciones a continuación en este artículo se muestran Cuda-11.7a continuación ) Dirección de descarga de Cuda11.7 Elija instalar de acuerdo con su propio sistema y necesidades (generalmente, usuarios locales de Windows, elija en orden Windows, x86_64, 系统版本, exe(local))

  • Después de que la instalación sea exitosa, ingrésala en la consola de cmd nvcc -V, y si aparece algo similar a lo siguiente, la instalación es exitosa:

    nvcc: NVIDIA (R) Cuda compiler driver
    Copyright (c) 2005-2022 NVIDIA Corporation
    Built on Tue_May__3_19:00:59_Pacific_Daylight_Time_2022
    Cuda compilation tools, release 11.7, V11.7.64
    Build cuda_11.7.r11.7/compiler.31294372_0

¡prestar atención!

  • Hasta ahora, pytorch admite hastacuda11.7
  • Si ve su versión de Cuda> 11.7 en el primer paso anterior, aún elija 11.7 para descargar e instalar (Cuda tiene compatibilidad de versión) y una vez que se complete la instalación, ingrese nuevamente en cmd y la versión de cuda no cambiará, es decir, nvidia-smi.exese muestran todas las Versiones > 11,7
  • **Cómo desinstalar Cuda:** Abra el Panel de control - Programas - Desinstale un programa y NVIDIA CUDAdesinstale todos los programas que vienen con él (un total de 5)

- Pitón

  • Vaya al sitio web oficial de Python para descargar Python, la versión debe ser inferior a 3.10 (aquí se omiten el método de instalación detallado y la ruta de acceso, solo verifíquelo en línea)
  • pythonUna vez completada la instalación, ingrese algo similar a lo siguiente en la consola cmd , y la instalación se realizará correctamente:
    Python 3.10.4 (tags/v3.10.4:9d38120, Mar 23 2022, 23:13:41) [MSC v.1929 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> 
  • Configure python para descargar el origen del espejo (omítalo si hay condiciones de red ajenas) y
    ejecútelo secuencialmente en la consola cmd
    # 设置清华大学下载镜像
    pip config set global.index-url http://pypi.tuna.tsinghua.edu.cn/simple
    pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn

Instalar dependencias

  • requirements.txtCree un nuevo archivo de texto con el nombre en cualquier lugar , ingrese el siguiente contenido para guardar
    Flask==2.1.2
    Flask_Cors==3.0.10
    gradio==3.4.1
    numpy==1.23.5
    playsound==1.3.0
    PyAudio==0.2.12
    pydub==0.25.1
    pyworld==0.3.2
    requests==2.28.1
    scipy==1.10.0
    sounddevice==0.4.5
    SoundFile==0.10.3.post1
    starlette==0.19.1
    tqdm==4.63.0
    scikit-maad
    praat-parselmouth
    tensorboard
    librosa
  • Haga clic derecho en el espacio en blanco en la carpeta donde se encuentra el archivo de texto y seleccione Abrir en Terminal y ejecute el siguiente comando para instalar la biblioteca (si ocurre un error, intente pip install [库名称]volver a instalarlo por separado hasta que tenga éxito)
    pip install -r requirements.txt
  • A continuación , necesitamos instalar por separadotorch , estas tres bibliotecas, se proporcionan los dos métodos siguientestorchaudiotorchvision

Método 1 (conveniente pero no recomendado, porque encontré un problema en el proceso de prueba de este método, que afectará la configuración posterior de AI

Vaya directamente al sitio web oficial de Pytorch , seleccione la versión requerida y copie el comando que se muestra en la columna Ejecutar este comando para la instalación de cmd (no recomendado)

Método 2 (más lento pero estable, recomendado)

  • Vaya a esta dirección y use Ctrl+Fla búsqueda para descargar el paquete whl directamente Haga clic para ir
  • Lo que necesita este proyecto es
    torch==1.10.0+cu113
    torchaudio==0.10.0+cu113
    1.10.0 y 0.10.0 significa la versión pytorch, cu113 significa cuda versión 11.3 y
    así sucesivamente, elija la versión que más le convenga para instalar
  • A continuación, tomaré Cuda11.7la versión como ejemplo
    : el ejemplo comienza:
  • Necesitamos instalar las siguientes tres bibliotecas
  1. torch-1.13.0+cu117Haga clic para descargar: torch-1.13.0+cu117-cp310-cp310-win_amd64.whl
    donde cp310 se refiere python3.10al win-amd64sistema operativo Windows de 64 bits
  2. torchaudio-0.13.0+cu117Haga clic para descargar: torchaudio-0.13.0+cu117-cp310-cp310-win_amd64.whl
  3. torchvision-0.14.0+cu117Haga clic para descargar: torchvision-0.14.0+cu117-cp310-cp310-win_amd64.whl
  • Una vez completada la descarga, ingrese al directorio del archivo whl descargado, haga clic derecho en el espacio en blanco en la carpeta, seleccione Abrir en Terminal y ejecute el siguiente comando para instalar la biblioteca
    pip install .\torch-1.13.0+cu117-cp310-cp310-win_amd64.whl
    # 回车运行(安装时间较长)
    pip install .\torchaudio-0.13.0+cu117-cp310-cp310-win_amd64.whl
    # 回车运行
    pip install .\torchvision-0.14.0+cu117-cp310-cp310-win_amd64.whl 
    # 回车运行
  • Asegúrese de ejecutar el siguiente comando después de que aparezca Successfully installed ..., el primer paquete de antorcha tarda mucho en instalarse
    – el final del ejemplo –

torchDespués de instalar estas tres bibliotecas, use el siguiente comando en la consola cmd para verificar si las versiones de cuda y torch torchaudiocoincidentorchvision

    python
    # 回车运行
    import torch
    # 回车运行
    print(torch.__version__)
    # 回车运行
    print(torch.cuda.is_available())
    # 回车运行
  • Si aparece la última línea True, tiene éxito, Falsesi aparece, falla y necesita ser reinstalado

-FFmpeg

  • Vaya al sitio web oficial de FFmpeg para descargar. Descomprímalo en cualquier ubicación y agregue Ruta para ubicarlo en Configuración avanzada del sistema-Variables de entorno .\ffmpeg\bin(aquí se omiten el método de instalación detallado y la ruta agregada, solo compruébelo en línea)
  • ffmpeg -versionUna vez completada la instalación, ingrese algo similar a lo siguiente en la consola cmd , y la instalación se realizará correctamente
ffmpeg version git-2020-08-12-bb59bdb Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 10.2.1 (GCC) 20200805
configuration: [此处省略一大堆内容]
libavutil      56. 58.100 / 56. 58.100
libavcodec     58.100.100 / 58.100.100
...

2. IA preentrenada

- Descargar el código fuente del proyecto

  • Dirígete a la rama alternativa so-vits-svc32k (a la que apunta este tutorial 32k) para descargar el código fuente. Si ha instalado git, puede obtener directamente la siguiente dirección

  • Extraer a cualquier carpeta

- Descargar modelos pre-entrenados

  • Esta parte del documento oficial está escrita en detalle, y la citaré directamente aquí.

hubert
https://github.com/bshall/hubert/releases/download/v0.1/hubert-soft-0d54a1f4.pt
Modelo de preentrenamiento G y D
https://huggingface.co/innnky/sovits_pretrained/resolve/main / G_0.pth
https://huggingface.co/innnky/sovits_pretrained/resolve/main/D_0.pth
Si los tres modelos básicos anteriores no se pueden descargar, haga clic en el siguiente enlace
https://pan.baidu.com/s/ 1uw6W3gOBvMbVey1qt_AzhA ?pwd=80eo Código de extracción: 80eo

  • hubert-soft-0d54a1f4.ptponer en .\hubertcarpeta
  • D_0.pth和G_0.ptharchivo en .\logs\32kcarpeta

- Preparar muestras de entrenamiento.

Para los datos de entrenamiento preparados, se recomiendan de 60 a 100 voces ( el formato debe ser wav y se deben crear diferentes carpetas para diferentes oradores ), ¡y cada voz debe controlarse en 4 a 8 segundos! (Asegúrese de que no haya ruido en el discurso o intente reducir el ruido tanto como sea posible, el discurso en una carpeta debe ser dicho por una persona), y se puede entrenar un modelo con buen efecto

  • Coloque las carpetas de audio (múltiples carpetas si hay varias personas) en .\dataset_rawla carpeta juntas. La estructura de archivos es similar a la siguiente:
dataset_raw
├───speaker0
│   ├───xxx1-xxx1.wav
│   ├───...
│   └───Lxx-0xx8.wav
└───speaker1
    ├───xx2-0xxx2.wav
    ├───...
    └───xxx7-xxx007.wav
  • Además, debe .\dataset_rawcrear y editar en la carpeta config.json, el código es el siguiente:
"n_speakers": 10    //修改数字为说话人的人数
"spk":{
    
    
    "speaker0": 0,  //修改speaker0为第一个说话人的名字,需要和文件夹名字一样,后面的: 0, 不需要改
    "speaker1": 1,  //以此类推
    "speaker2": 2,
    //以此类推
}

- Pretratamiento de muestras

Si se informan errores en todos los pasos a continuación, intente varias veces. Si se informan errores todo el tiempo, significa que la primera parte de la dependencia del entorno no está instalada en su lugar. Puede reinstalar la biblioteca correspondiente de acuerdo con el contenido de el informe de errores. (En general, si está instalado correctamente, si hay un informe de error, intente varias veces o apague y reinicie, definitivamente resolverá el informe de error).

1. Remuestreo

  • Ejecute el terminal en so-vits-svcla carpeta y ejecute directamente:
    python resample.py

Nota: Si encuentra el siguiente error:

...
E:\vs\so-vits-svc-32k\resample.py:17: FutureWarning: Pass sr=None as keyword args. From version 0.10 passing these as positional arguments will result in an error
  wav, sr = librosa.load(wav_path, None)
E:\vs\so-vits-svc-32k\resample.py:17: FutureWarning: Pass sr=None as keyword args. From version 0.10 passing these as positional arguments will result in an error
  wav, sr = librosa.load(wav_path, None)
...

Abra resample.py, modifique 17el contenido de la línea

# 第17行修改前如下
wav, sr = librosa.load(wav_path, None)
# 第17行修改后如下
wav, sr = librosa.load(wav_path, sr = None)

Guarde y vuelva a ejecutar python resample.pyel comando

  • Después de una operación exitosa, .\dataset\32khabrá la voz wav del altavoz en la carpeta, y luego dataset_rawla carpeta se puede eliminar

2. Divide automáticamente el conjunto de entrenamiento, el conjunto de verificación y el conjunto de prueba, y genera automáticamente archivos de configuración

  • Ejecute el terminal en so-vits-svcla carpeta y ejecute directamente:
    python preprocess_flist_config.py
  • Si aparece algo similar a lo siguiente, el procesamiento es exitoso:
PS E:\vs\so-vits-svc-32k> python preprocess_flist_config.py
100%|██████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 1993.49it/s]
Writing ./filelists/train.txt
100%|██████████████████████████████████████████████████████████████████████████████████████████| 16/16 [00:00<?, ?it/s]
Writing ./filelists/val.txt
100%|████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:00<?, ?it/s]
Writing ./filelists/test.txt
100%|████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:00<?, ?it/s]
Writing configs/config.json

3. Genera hubert y f0

  • Ejecute el terminal en so-vits-svcla carpeta y ejecute directamente:
    python preprocess_hubert_f0.py
  • Si aparece algo similar a lo siguiente, el procesamiento es exitoso: (Solo usé 20 piezas de audio para la demostración aquí)
PS E:\vs\so-vits-svc-32k> python preprocess_hubert_f0.py
Loading hubert for content...
Loaded hubert.
  0%|                                                                                  | 0/20 [00:00<?, ?it/s]dataset/32k\speaker\1_01.wav
  5%|████                                                                              | 1/20 [00:03<01:00,  3.20s/it]dataset/32k\speaker\1_02.wav
 10%|████████                                                                          | 2/20 [00:03<00:25,  1.40s/it]dataset/32k\speaker\1_03.wav
 15%|████████████                                                                      | 3/20 [00:03<00:14,  1.19it/s]dataset/32k\speaker\1_04.wav
 20%|████████████████▌                                                                 | 4/20 [00:03<00:09,  1.69it/s]dataset/32k\speaker\1_05.wav
 25%|████████████████████                                                              | 5/20 [00:03<00:06,  2.39it/s]dataset/32k\speaker\1_06.wav
 30%|████████████████████████                                                          | 6/20 [00:04<00:04,  2.98it/s]dataset/32k\speaker\1_07.wav
 35%|█████████████████████████████                                                     | 7/20 [00:04<00:03,  3.48it/s]dataset/32k\speaker\1_08.wav
 40%|█████████████████████████████████                                                 | 8/20 [00:04<00:03,  3.78it/s]dataset/32k\speaker\1_09.wav
 45%|█████████████████████████████████████                                             | 9/20 [00:04<00:02,  4.13it/s]dataset/32k\speaker\1_10.wav
 50%|█████████████████████████████████████████                                         | 10/20 [00:04<00:02,  4.41it/s]dataset/32k\speaker\1_11.wav
 55%|█████████████████████████████████████████████                                     | 11/20 [00:04<00:01,  4.71it/s]dataset/32k\speaker\1_12.wav
 60%|█████████████████████████████████████████████████                                 | 12/20 [00:05<00:01,  4.93it/s]dataset/32k\speaker\1_13.wav
 65%|█████████████████████████████████████████████████████                             | 13/20 [00:05<00:01,  5.25it/s]dataset/32k\speaker\1_14.wav
 70%|█████████████████████████████████████████████████████████                         | 14/20 [00:05<00:01,  5.46it/s]dataset/32k\speaker\1_15.wav
 75%|█████████████████████████████████████████████████████████████▌                    | 15/20 [00:05<00:00,  6.19it/s]dataset/32k\speaker\1_16.wav
 80%|█████████████████████████████████████████████████████████████████▌                | 16/20 [00:05<00:00,  5.84it/s]dataset/32k\speaker\1_17.wav
 85%|█████████████████████████████████████████████████████████████████████             | 17/20 [00:06<00:00,  5.43it/s]dataset/32k\speaker\1_18.wav
 90%|█████████████████████████████████████████████████████████████████████████         | 18/20 [00:06<00:00,  5.27it/s]dataset/32k\speaker\1_19.wav
 95%|█████████████████████████████████████████████████████████████████████████████     | 19/20 [00:06<00:00,  5.26it/s]dataset/32k\speaker\1_20.wav
100%|██████████████████████████████████████████████████████████████████████████████████| 20/20 [00:06<00:00,  3.03it/s]

4. Modificar el archivo de configuración y parte del código fuente

  • Abra el archivo de configuración generado en el segundo paso anterior .\configs\config.jsonpara modificar el valor de la primera 13línea de código "batch_size". Permítanme explicar aquí que "batch_size": 12,el valor 12 debe ajustarse de acuerdo con la memoria de video de su computadora (administrador de tareas-GPU- memoria GPU dedicada )
  • Se recomienda
    modificar la memoria de video 6G a 2 o 3.
    Se recomienda cambiar la memoria de video 8G a 4.
    El parámetro "batch_size" se puede reducir para resolver el problema de memoria de video insuficiente.
  • Revisartrain.py
# 第60行将nccl改成gloo(如果后续开始训练时gloo报错就改回nccl,一般不会报错)
# 修改前如下
    dist.init_process_group(backend='nccl', init_method='env://', world_size=n_gpus, rank=rank)
# 修改后如下
    dist.init_process_group(backend='gloo', init_method='env://', world_size=n_gpus, rank=rank)

# 第44行开始
# 修改前如下
    n_gpus = torch.cuda.device_count()
    os.environ['MASTER_ADDR'] = 'localhost'
    os.environ['MASTER_PORT'] = hps.train.port
#修改后增加代码后如下
    n_gpus = torch.cuda.device_count()
    os.environ['MASTER_ADDR'] = 'localhost'
    os.environ['MASTER_PORT'] = hps.train.port
    os.environ["CUDA_VISIBLE_DEVICES"] = "0"    # 这里的0代表GPU0是用来训练的显卡,不知道是0还是1的可以在任务管理器查看,如果是双显卡的话一定要选择适合的显卡
    os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "max_split_size_mb:32"  # 这里的32如果懂的话也可以修改,不懂别改

3. Empieza a entrenar

  • Ejecute el terminal en so-vits-svcla carpeta y ejecute directamente el siguiente comando para comenzar a entrenar
    Nota: Antes de comenzar a entrenar, se recomienda reiniciar la computadora para borrar la memoria y la memoria de video, y cerrar juegos de fondo, fondos de pantalla en vivo y otro software. mejor dejar solo una ventana de cmd
    python train.py -c configs/config.json -m 32k
  • Si ocurre el siguiente error, significa que la memoria de video no es suficiente
torch.cuda.OutOfMemoryError: CUDA out of menory. Tried to allocate 16.80 MiB (GPU 0; 8.0 GiB total capacity; 7.11 Gi8 already allocated; 0 bytes free; 7.30 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_cUDA_ALLOC_CONF
# 注意:一定是 0 bytes free < Tried to allocate 16.80 MiB 才是显存不足,不然就是别的问题
  • Es posible que haya más errores informados aquí. Si ocurre un error, intente volver a ejecutar primero python train.py -c configs/config.json -m 32k, intente varias veces o apague y reinicie, y generalmente tendrá éxito. Si el error es siempre el mismo error, significa que hay un problema en el lugar correspondiente (confíe en el error para encontrar el problema)
  • Después de una ejecución exitosa, debería ser similar a lo siguiente:
2023-02-08 18:07:42,439 32k INFO {
    
    'train': {
    
    'log_interval': 200, 'eval_interval': 1000, 'seed': 1234, 'epochs': 10000, 'learning_rate': 0.0001, 'betas': [0.8, 0.99], 'eps': 1e-09, 'batch_size': 2, 'fp16_run': False, 'lr_decay': 0.999875, 'segment_size': 17920, 'init_lr_ratio': 1, 'warmup_epochs': 0, 'c_mel': 45, 'c_kl': 1.0, 'use_sr': True, 'max_speclen': 384, 'port': '8001'}, 'data': {
    
    'training_files': 'filelists/train.txt', 'validation_files': 'filelists/val.txt', 'max_wav_value': 32768.0, 'sampling_rate': 32000, 'filter_length': 1280, 'hop_length': 320, 'win_length': 1280, 'n_mel_channels': 80, 'mel_fmin': 0.0, 'mel_fmax': None}, 'model': {
    
    'inter_channels': 192, 'hidden_channels': 192, 'filter_channels': 768, 'n_heads': 2, 'n_layers': 6, 'kernel_size': 3, 'p_dropout': 0.1, 'resblock': '1', 'resblock_kernel_sizes': [3, 7, 11], 'resblock_dilation_sizes': [[1, 3, 5], [1, 3, 5], [1, 3, 5]], 'upsample_rates': [10, 8, 2, 2], 'upsample_initial_channel': 512, 'upsample_kernel_sizes': [16, 16, 4, 4], 'n_layers_q': 3, 'use_spectral_norm': False, 'gin_channels': 256, 'ssl_dim': 256, 'n_speakers': 2}, 'spk': {
    
    'Sucial': 0}, 'model_dir': './logs\\32k'}
2023-02-08 18:07:42,440 32k WARNING E:\vs\so-vits-svc-32k is not a git repository, therefore hash value comparison will be ignored.
2023-02-08 18:07:45,451 32k INFO Loaded checkpoint './logs\32k\G_0.pth' (iteration 1)
2023-02-08 18:07:45,998 32k INFO Loaded checkpoint './logs\32k\D_0.pth' (iteration 1)
2023-02-08 18:07:55,722 32k INFO Train Epoch: 1 [0%]
2023-02-08 18:07:55,723 32k INFO [1.376741886138916, 3.908522129058838, 12.127800941467285, 35.539894104003906, 4.270486354827881, 0, 0.0001]
2023-02-08 18:08:01,381 32k INFO Saving model and optimizer state at iteration 1 to ./logs\32k\G_0.pth
2023-02-08 18:08:02,344 32k INFO Saving model and optimizer state at iteration 1 to ./logs\32k\D_0.pth
2023-02-08 18:08:19,482 32k INFO ====> Epoch: 1
2023-02-08 18:08:40,093 32k INFO ====> Epoch: 2
2023-02-08 18:09:01,010 32k INFO ====> Epoch: 3
2023-02-08 18:09:21,715 32k INFO ====> Epoch: 4
2023-02-08 18:09:42,242 32k INFO ====> Epoch: 5
2023-02-08 18:10:02,528 32k INFO ====> Epoch: 6
2023-02-08 18:10:22,965 32k INFO ====> Epoch: 7
2023-02-08 18:10:29,149 32k INFO Train Epoch: 8 [14%]
2023-02-08 18:10:29,150 32k INFO [2.378505229949951, 2.3670239448547363, 10.534687042236328, 19.235595703125, 1.8958038091659546, 200, 9.991253280566489e-05]
2023-02-08 18:10:43,388 32k INFO ====> Epoch: 8
2023-02-08 18:11:03,722 32k INFO ====> Epoch: 9
2023-02-08 18:11:23,859 32k INFO ====> Epoch: 10
...
  • Si aparece algo similar a lo anterior, significa que el entrenamiento está comenzando (la memoria de video se llenará directamente). Hay dos formas de dejar de entrenar:
  1. de acuerdo aCtrl+C
  2. Simplemente tacha la esquina superior derecha y
    ejecútalo en la consola python train.py -c config/config.json -m 32kpara continuar entrenando

- Ver registros y tiempos de entrenamiento

  • La ubicación donde se guarda el registro: .\logs\32k\train.log
    ejemplo de lectura:
# 示例3
2023-02-08 18:32:24,942 32k INFO [2.252035617828369, 2.5846095085144043, 8.220404624938965, 5   17.75478744506836, 0.9781494140625, 2000, 9.911637167309565e-05]
2023-02-08 18:32:28,889 32k INFO Saving model and optimizer state at iteration 72 to ./logs\32k\G_2000.pth
2023-02-08 18:32:29,661 32k INFO Saving model and optimizer state at iteration 72 to ./logs\32k\D_2000.pth
# 示例1
2023-02-08 18:32:39,907 32k INFO ====> Epoch: 72
2023-02-08 18:33:00,099 32k INFO ====> Epoch: 73
2023-02-08 18:33:20,682 32k INFO ====> Epoch: 74 
2023-02-08 18:33:40,887 32k INFO ====> Epoch: 75
2023-02-08 18:34:01,460 32k INFO ====> Epoch: 76
2023-02-08 18:34:21,798 32k INFO ====> Epoch: 77
2023-02-08 18:34:41,866 32k INFO ====> Epoch: 78
2023-02-08 18:34:54,712 32k INFO Train Epoch: 79 [57%]
# 示例2
2023-02-08 18:34:54,712 32k INFO [2.282658100128174, 2.5492446422576904, 10.027194023132324, 15.401838302612305, 1.598284363746643, 2200, 9.902967736366644e-05]

Para la siguiente explicación, cité la explicación de inifnite_loop, el maestro de subida de la estación B, y videos relacionados y columnas relacionadas.

  • Se debe prestar atención a dos parámetros: Epoch y global_step
    Epoch representa el lote iterativo, cada lote se puede considerar como una agrupación iterativa
    Global_step representa el número total de iteraciones
  • La relación entre los dos es global_step = el número de voces de la mayoría de los hablantes de voz / tamaño_lote * época_tamaño_lote
    es un parámetro en el archivo de configuración
  • Ejemplo 1: el resultado de cada iteración ====> Epoch: 74indica que se completó el lote de la iteración 74
  • Ejemplo 2: Global_step Salida cada 200 veces (parámetros en el archivo de configuración log_interval)
  • Ejemplo 3: Global_step Cada 1000 tiempos de salida (parámetros en el archivo de configuración eval_interval), el modelo se guardará en un nuevo archivo

En general, entrenar 10.000 veces (alrededor de 2 horas) puede obtener un buen modelo de sonido

- Modelos entrenados guardados

Anteriormente, hablamos sobre guardar muestras de modelos cada 1000 iteraciones, entonces, ¿dónde se guardan estas muestras? ¿Cómo lidiar con estas muestras? Lo describiré en detalle a continuación.

  • El modelo de entrenamiento guarda la ubicación:.\logs\32k
  • Abra esta ruta después de entrenar durante un cierto período de tiempo y encontrará que hay muchos archivos:
D_0.pth
D_1000.pth
D_2000.pth
D_3000.pth
D_4000.pth
...
G_0.pth
G_1000.pth
G_2000.pth
G_3000.pth
G_4000.pth
...
  • Si el espacio de su disco duro es insuficiente, solo necesita dejar los últimos G y D, y los anteriores se pueden eliminar (pero no elimine otros archivos)

4. Uso razonable

Después de entrenar los últimos G y D de acuerdo con el método anterior, ¿cómo usar estos modelos? A continuación describiré el método de operación específico.

- listo para secar

  • Prepare la voz seca de una canción. La voz seca se puede extraer por software. Recomiendo Ultimate Vocal Remover, que es de código abierto y se puede descargar en Github. enlace de descarga
  • Utilice un software de procesamiento de audio (como Au, Studio One, etc.) para dividir este sonido seco en varios segmentos de no más de 40 segundos y guárdelos uno por uno
  • Coloque sus clips de sonido secos procesados ​​en .\rawcarpetas

- Modificar código de inferencia

  • Abra inference_main.pyy modifique la primera 17-27línea, el contenido de modificación específico es el siguiente:
model_path = "logs/32k/G_10000.pth" # 这里改成你最新训练出来的G模型路径
config_path = "configs/config.json"
svc_model = Svc(model_path, config_path)
infer_tool.mkdir(["raw", "results"])

# 支持多个wav文件,放在raw文件夹下
clean_names = ["vocals_01", "vocals_02","vocals_03"] # 这里修改成你要处理的干声片段的文件名,支持多个文件
trans = [0]  # 音高调整,支持正负(半音)
spk_list = ['Sucial']  # 这里是说话人的名字,之前准备训练样本的文件夹名字
slice_db = -40  # 默认-40,嘈杂的音频可以-30,干声保留呼吸可以-50
wav_format = 'wav'  # 音频输出格式
  • Si hay un error en el siguiente paso de la generación de inferencias, intente las siguientes modificaciones: (gracias a kahotv por la sugerencia) Detalles
#inference_main.py line35 第35行,
wav_path = Path(raw_audio_path).with_suffix('.wav')
#改为
wav_path = str(Path(raw_audio_path).with_suffix('.wav'))

- Generación de inferencias

  • Una vez completada la modificación, guarde el código, so-vits-svcejecute el terminal en la carpeta y ejecute el siguiente comando para iniciar la generación de inferencias
    python .\inference_main.py
  • Una vez que la ventana negra se cierra automáticamente, se completa la generación de inferencias. Los archivos de audio generados están .\resultsen la carpeta
  • Si parece que el efecto no es bueno, entrene más modelos, si 10,000 veces no es suficiente, entrene 20,000 veces

- Postprocesamiento

  • Importe el sonido seco generado y el acompañamiento de la canción (que también se puede extraer con Ultimate Vocal Remover) en el software de procesamiento de audio y el software host (como Au, Studio One, etc.) para mezclar y masterizar, y finalmente obtenga el producto terminado.

5. Lista de agradecimiento

Supongo que te gusta

Origin blog.csdn.net/Sucial/article/details/132053475
Recomendado
Clasificación