Creo que nadie ha publicado una guía sobre como hacerlo, se que hay vídeos, etc, pero aquí voy a hacer una pequeña guía de como entrenar esta IA para generar la voz de quien tu quieras y ponerlo a cantar, como tan de moda se ha puesto estas últimas semanas.
Con esta guía se pueden obtener resultados como los tan famosos de xokas, o uno de muestra que he entrenado yo:
Disclaimer: Guía en proceso de construcción y mejora. De momento sin capturas.
Qué vamos a utilizar?
so-vits-svc-fork
Es una versión más simple de utilizar de so-vits-svc, que incluye una interfaz gráfica (que no es necesaria) y unos scripts más sencillos de utilizar a la hora de preparar los datos.
Requisitos:
- Esta guía se enfoca en Windows, en Linux será muy parecido, pero la instalación será algo diferente.
- Gráfica NVIDIA. Si no, vas a tardar 3 semanas en ver algun resultado decente.
- Programa para separar las voces del resto de sonidos (Por ejemplo, Ultimate Vocal Remover 5)
Entrenamiento:
- Gráfica con al menos 6GB de VRAM, puede funcionar con 4GB, pero las velocidades que se van a conseguir son realmente bajas. Pero si tienes >=10GB, mucho mejor.
- Entre 100 y 200 audios de entre 5 y 10 segundos, de la voz que queremos entrenar. Que hable solo esa voz y cuanto más limpio sean los audios, mejor. Es decir, que no corte palabras al final, que no se oigan ruidos de fondo, etc.
Inferencia:
- Aquí es un poco más bajo y con 4GB de VRAM ya puedes ejecutar el modelo sin mucho problema.
Instalación:
La instalación es bastante sencilla, descargamos este archivo:
Preparación de los datos:
Aquí cada uno tendrá que hacer su trabajo de campo, buscando un audio en el que se oiga la voz correctamente, limpiarlo, trocearlo.
Para ello, un posible flujo es: Descargar un video de youtube donde hable, pasarlo por el Ultimate Vocal Remover para eliminar musicas y sonidos que no sean la voz y una vez tenemos el audio, recortarlo en trozos, con Adobe Audition o Audacity, por ejemplo.
El objetivo es acabar teniendo entre 100 y 150 audios de entre 5 y 10 segundos. Muy importante respetar estas duraciones.
Entrenando la IA:
NOTA: Cuando algo esta entre {}, como {voz}, significa que se reemplace por un texto, como por ejemplo el nombre de la persona. Asi proyecto-{voz}, podria ser proyecto-ilitri.
Una vez tenemos todo instalado y los audios preparados podemos empezar a entrenar nuestro modelo.
Para ello, creamos una carpeta, podemos llamarla proyecto-{voz}.
Dentro de esta carpeta, crearemos otra llamada dataset_raw. Y dentro de dataset_raw, otra con el nombre de la voz.
Así deberiamos tener proyecto-{voz}/dataset_raw/{voz}
Ahora abrimos una terminal en la carpeta proyecto-{voz}, y empezaremos a hacer los pasos previos al entreno.
Ejecutaremos los comandos, uno por uno, cuando acabe el anterior:
Cita:
svc pre-resample
svc pre-config
svc pre-hubert -fm crepe |
Ahora, en la carpeta proyecto-{voz}, veremos que además de dataset_raw que habiamos creado, se han generado otras muchas carpetas.
Nos interesa configs. Entramos dentro, hasta encontrar un archivo llamado config.json.
Este es el archivo que controla cómo se entrena el modelo. Lo principal son los campos "epochs" y "batch_size".
Abrimos el archivo config.json.
Por el momento vamos a cambiar el batch size a "auto", guardamos.
Ahora en la terminal que teniamos abierta de antes, comenzamos a entrenar:
Cita:
Ahora tenemos que ver entre todo el texto que sale que batch_size va utilizando. Si sale algun error y se rompe, deberemos ir cambiando el batch_size manualmente. Comenzando por ejemplo en 16, y bajando. Este valor dependerá de la memoria. Con una gráfica de 6GB y alrededor de 150 audios de 7 segundos, el batch que funciona son 6. Con más memoria, podria aumentarse. Cuestión de ir probando.
Una vez encontrado el batch_size, podemos cambiar los epochs a entrenar. Los epochs son la cantidad de "entrenos" a realizar.
Por lo general, empezaremos a ver resultados decentes a partir del step 25000. Para traducir esto al epoch, aplicamos la siguiente formula: epochs = 25000 / (num_audios / batch_size)
Ya aquí solo queda esperar.
Si quieres pausar el entrenamiento, pulsando control + c se para, y luego volviendo a ejecutar svc train -t se reanuda por el último checkpoint que haya guardado.
Inferencia (Generando audios):
La inferencia, por suerte, es bastante más sencilla que el entrenamiento.
Necesitamos el audio en el que queramos sustituir la voz por la de nuestra IA y ejecutarla. En unos segundos tendremos el resultado.
Para ello, elegimos el audio que queramos sustituir, lo pasamos por el Ultimate Vocal Remove (u otra herramienta que haga lo mismo), y colocamos el archivo que genere ese programa en la carpeta proyecto-{voz}.
Ahora ejecutamos en la terminal:
svc infer {voz} -fm crepe-tiny {archivo_de_voz}.wav
Finalmente, al terminar, encontraremos en la misma carpeta un nuevo archivo llamado {archivo_de_voz}.out.wav
Espero que a alguien le sirva. La guia esta todavía en proceso de construccion. Fallos, mejoras, etc, se iran corrigiendo.
Preguntas por mensaje
🙂