Tutorial: Clonando voces con IA | so-vits-svc

  • Autor Autor gabrielher
  • Fecha de inicio Fecha de inicio
Ahora lo estoy probando en un ubuntu server, instalado en mi pc, va mucho más rápido.
Con la 3070 estoy usando barch_size =8 , y epochs voy a meterle 1000 (tengo 200 audios en esta prueba)
Tarda aproximadamente 12segundos por epoch, a ver cuando termina que tal ha salido todo...
 
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:

svc train -t

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 🙂

Es posible utilizar una GPU amd 6700 xt de 12gb?
 
Tengo entendido que de momento solo se puede con Nvidia (cuda)
Bueno, por suerte tengo mi 3060 guardada en una caja, tocara armar otra PC ya que no quiero dejar de usar mi 6700xt
 
Gracias por el aporte amigo.
 
Gracias, ya me habían comentado de esto, El finde semana me pongo con esto,

Sabes si para correr esto en modo local se necesita algo en especifico? con sable difusión uso una 3090 para usarlo en local.
¿Te parece que los resultados son buenos? ¿Existe una mejor alternativa a este método?
 
¿Te parece que los resultados son buenos? ¿Existe una mejor alternativa a este método?
Para ser una herramienta gratuita si son muy buenos, hay otra herramienta de pago que no me acuerdo el nombre esa si era mejor,

Pero depende como lo entrenes por ejemplo yo utilice un dataset de casi 2 horas de voz divididos en algo mas de 1k archivos de audio. lo entrene por unas 50 horas.

Dejaba toda la noche entrenando mientras dormía y al día siguiente comparaba la calidad con el archivo de hoy con el del día anterior. Y si, se notaba la mejora.

cuando genero audios con mi voz en ingles también va bien.

y no, no conozco otra alternativa gratuita, pero conforme pase el tiempo mejorara y como es de código abierto hay mucho mas gente intentando optimizar.
 
Para ser una herramienta gratuita si son muy buenos, hay otra herramienta de pago que no me acuerdo el nombre esa si era mejor,

Pero depende como lo entrenes por ejemplo yo utilice un dataset de casi 2 horas de voz divididos en algo mas de 1k archivos de audio. lo entrene por unas 50 horas.

Dejaba toda la noche entrenando mientras dormía y al día siguiente comparaba la calidad con el archivo de hoy con el del día anterior. Y si, se notaba la mejora.

cuando genero audios con mi voz en ingles también va bien.

y no, no conozco otra alternativa gratuita, pero conforme pase el tiempo mejorara y como es de código abierto hay mucho mas gente intentando optimizar.
¿Usas está opción o solo la estabas probando? La veo bastante factible para utilizarla creando contenido de calidad sin parecer tan robótica la voz, estaba pensando usar Eleven laps, pero creo que son inferiores a esta opcion.
 
¿Usas está opción o solo la estabas probando? La veo bastante factible para utilizarla creando contenido de calidad sin parecer tan robótica la voz, estaba pensando usar Eleven laps, pero creo que son inferiores a esta opcion.
uso esa voz y sin problemas con YT o el algoritmo, el primer video que subí usando mi voz con so-vits-svc fue hace 8 días ahora tiene 3,1M de views, el 2do video que subí hace 2 días ya tiene 1,1M de visitas.

Pero siempre voy con la idea que esto es temporal, de alguna manera YT se dará cuenta que son voces IA y bajara el alcance perjudicando al canal.
 
uso esa voz y sin problemas con YT o el algoritmo, el primer video que subí usando mi voz con so-vits-svc fue hace 8 días ahora tiene 3,1M de views, el 2do video que subí hace 2 días ya tiene 1,1M de visitas.

Pero siempre voy con la idea que esto es temporal, de alguna manera YT se dará cuenta que son voces IA y bajara el alcance perjudicando al canal.
Muy buenos resultados, no demuestra haber mucho problemas en primer plano.

¿Has comprobado eso del alcance del canal? No había escucha directamente algo así, pero si lo veo factible.
 
Me falta aprender mucho sin duda. Terminé mareada intentando entender qué hacer 😭 😭
 
Gracias por el dato, vamos a probar a ver que tal suena, menos mal google colab nos presta GPU, aunque a veces toca esperar mucho para que estén disponibles. Ojalá y se pudieran compilar con kaggle code
 
Para ser una herramienta gratuita si son muy buenos, hay otra herramienta de pago que no me acuerdo el nombre esa si era mejor,

Pero depende como lo entrenes por ejemplo yo utilice un dataset de casi 2 horas de voz divididos en algo mas de 1k archivos de audio. lo entrene por unas 50 horas.

Dejaba toda la noche entrenando mientras dormía y al día siguiente comparaba la calidad con el archivo de hoy con el del día anterior. Y si, se notaba la mejora.

cuando genero audios con mi voz en ingles también va bien.

y no, no conozco otra alternativa gratuita, pero conforme pase el tiempo mejorara y como es de código abierto hay mucho mas gente intentando optimizar.
como haces para generarlo con tu voz en ingles?
 
ojalá no tuviera una piedra de pc xd

o al menos que se pudiera realizar desde el movil.
 
excelente aporte amigo justo lo que buscaba
 
Atrás
Arriba