Demostración de DL-C y DL-D parcial • AI Society
Este código abierto es DL-B, que es una solución de imágenes digitales basada en ChatGLM, Wav2lip y so-vits-svc. El código base se escribió a mediados de marzo de 2023 y no se ha optimizado ni actualizado desde entonces.
Actualmente estoy compitiendo en este proyecto. La competencia entrará en la etapa de competencia provincial a fines de junio. El equipo del proyecto está avanzando hacia la posterior optimización y mejora de DL-C y las pruebas y desarrollo de DL-D. No se publicará ningún código ni detalles sobre DL-C y DL-D antes del final de la competencia. El código y el marco detallado se compilarán y actualizarán una vez finalizada la competencia. Olvidé perdonar.
El código actual es demasiado rígido. Soy un estudiante de segundo año con especialización en finanzas. No tengo habilidades estéticas ni técnicas para escribir códigos (C+V es extraño).
Después de la competencia, la AI Society se hará cargo del proyecto y en el futuro se producirá un marco fácil de usar, con un paquete diferido de proceso completo.
La plataforma utilizada para la producción de DL-B se proporciona aquí como referencia (puede proponer configuraciones ejecutables inferiores como complemento)
tarjeta grafica | UPC | Memoria | disco duro |
---|---|---|---|
RTX 3060 12G | Intel i5-12400F | 16GB | 30G |
El entorno de prueba está basado en Python 3.9.13 de 64 bits.
Utilice pip para instalar dependencias: pip install -r requirements.txt
Cabe señalar que aún necesita descargar un paquete de entorno Python 3.8 para ejecutar So-VITS (haga clic en el paquete de entorno), pero no se preocupe, ya lo configuré para usted, solo necesita descargarlo y descomprimirlo. en la carpeta DL-B y mantenga la ruta del archivo
DL-B
├───python3.8
├───Lib
├───libs
├───···
└───Tools
Además, también necesita instalar ffmpeg. Si no desea instalarlo manualmente, también puede intentar utilizar el paquete diferido que le proporcionamos.
ChatGLM tiene muchos métodos de ajuste y los usuarios pueden elegir el método de ajuste apropiado según su situación real. Los funcionarios de la Universidad de Tsinghua dieron una explicación detallada del ajuste de ChatGLM mediante P-tuning. Hay una biblioteca de ejemplos de ajuste fino mejor en Github, que utiliza a Zhen Huan como ejemplo de ajuste fino. Esta biblioteca contiene el código para el ajuste fino de P , pero no incluye el modelo previamente entrenado de ChatGLM.
El programa descargará automáticamente la implementación del modelo y los parámetros de transformers
. La implementación completa del modelo se puede encontrar en Hugging Face Hub. Si su entorno de red es deficiente, la descarga de los parámetros del modelo puede tardar mucho tiempo o incluso fallar. En este momento, primero puede descargar el modelo al local y luego cargarlo desde el local.
Para descargar el modelo de Hugging Face Hub, primero debe instalar Git LFS y luego ejecutar
git clone https://huggingface.co/THUDM/chatglm-6b
Si tarda en descargar el punto de control de Hugging Face Hub, solo puede descargar la implementación del modelo.
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm-6b
Luego descargue manualmente el archivo de parámetros del modelo desde aquí y reemplace el archivo descargado en el directorio del module/chatglm-6b
.
La implementación del modelo opcional aún está en proceso de cambio. Si desea corregir la implementación del modelo utilizado para garantizar la compatibilidad, puede ejecutar
git checkout v0.1.0
Utilice su propio conjunto de datos
Aquí hay una biblioteca útil para recopilar corpus personales.
Modifique train_file
, validation_file
y test_file
en train.sh
y evaluate.sh
a su propia ruta de conjunto de datos en formato JSON, y cambie prompt_column
y response_column
a la CLAVE correspondiente al texto de entrada y al texto de salida en el archivo JSON. Es posible que también necesite aumentar max_source_length
y max_target_length
para que coincidan con las longitudes máximas de entrada y salida en su propio conjunto de datos.
Conjunto de datos de conversación
Si necesita utilizar datos de conversación de varios turnos para ajustar el modelo, puede proporcionar el historial de chat. Por ejemplo, los siguientes son los datos de entrenamiento de una conversación de tres turnos:
{ "prompt" : "长城h3风扇不转。继电器好的。保险丝好的传感器新的风扇也新的这是为什么。就是继电器缺一个信号线" , "response" : "用电脑能读数据流吗?水温多少" , "history" : []}
{ "prompt" : " 95 " , "response" : "上下水管温差怎么样啊?空气是不是都排干净了呢? " , "history" : [[ "长城h3风扇不转。继电器好的。保险丝好的传感器新的风扇也新的这是为什么。就是继电器缺一个信号线" , "用电脑能读数据流吗?水温多少" ]]}
{ "prompt" : "是的。上下水管都好的" , "response" : "那就要检查线路了,一般风扇继电器是由电脑控制吸合的,如果电路存在断路,或者电脑坏了的话会出现继电器不吸合的情况! " , "history" : [[ "长城h3风扇不转。继电器好的。保险丝好的传感器新的风扇也新的这是为什么。就是继电器缺一个信号线" , "用电脑能读数据流吗?水温多少" ], [ " 95 " , "上下水管温差怎么样啊?空气是不是都排干净了呢? " ]]}
Durante el entrenamiento, debe especificar --history_column
como la clave del historial de chat en los datos ( history
en este ejemplo), y el historial de chat se unirá automáticamente. Tenga en cuenta que el contenido que supere la longitud de entrada max_source_length
se truncará.
Puede consultar las siguientes instrucciones:
bash train_chat.sh
Por supuesto, también puedes mezclar el corpus de diálogos de rondas múltiples y diálogos de ronda única. Simplemente agrega el siguiente modo de diálogo directamente encima del anterior.
{ "prompt" : "老刘,你知道那个作业要怎么从电脑上保存到手机上吗? " , "response" : "我也不知道啊" , "history" :[]}
So-VITS ya es un modelo muy popular y maduro, y hay muchos videos de enseñanza en la estación B, por lo que no entraré en detalles aquí. Aquí tenéis tutoriales que creo que son de muy buena calidad y esencia. Esta biblioteca contiene el código para la capacitación básica y de agrupación de So-VITS, pero no es muy fácil de usar y no se han realizado cambios en el contenido de DL-B después de que se completó en marzo. Lo que se necesita aquí. que esta biblioteca no incluye herramientas para el procesamiento de datos y preparación preliminar.
Hay algunos archivos de modelo que deben completarse, checkpoint_best_legacy_500.pt, ubicados en hubert
, y dos modelos previamente entrenados coincidentes, G_0.pth y D_0.pth, ubicados en las carpetas .moduleSo-VITS
y pre_trained_model
.
Este es un método más antiguo y se han realizado muchas optimizaciones en el marco más reciente. Esta versión se basa en el Wav2Lip original y los usuarios pueden elegir diferentes pesos de modelo de preentrenamiento. El modelo aquí es una descarga obligatoria y se coloca en la carpeta .modulewav2lip
.
Modelo | describir | Enlace |
---|---|---|
Wav2Labio | Sincronización de labios de alta precisión | Enlace |
Wav2Lip+GAN | La sincronización de labios es un poco peor, pero la calidad visual es mejor. | Enlace |
Discriminador experto | Enlace | |
Discriminador de calidad visual | Enlace |
Cabe señalar que esta biblioteca necesita recopilar algunos videos, los cuales se pueden grabar usando teléfonos móviles, computadoras o cámaras. Se utiliza para recopilar información facial. El formato recomendado es .mp4
y la resolución es 720p
o 480p
. suele ser de 5 a 10 segundos. Se pueden capturar varios vídeos. Guarde los archivos de video en la carpeta source
.
Con respecto a la optimización de Wan2lip, muchos grandes de la estación B ya lo han hecho, así que no entraré en detalles (perezoso, aquí hay un video).
Tenga en cuenta que, además del contenido anterior, también debe descargar un modelo s3fd.pth que debe usarse durante el proceso de inferencia y colocarlo en la carpeta .face_detectiondetectionsfd
.
¡Esta biblioteca no contiene ningún modelo! ! ¡No se puede utilizar después de tirarlo directamente! ! Es necesario entrenar el modelo.
El código fuente debe cambiarse en los siguientes lugares:
Coloque todos los modelos ajustados en las carpetas correspondientes module
. Copie todos los archivos de salida a output
después del entrenamiento de ajuste P a la output
local correspondiente. So-VITS/44k
se utiliza para almacenar modelos de entrenamiento So-VITS. El modelo wav2lip+GAN se almacena en la carpeta wav2lip
.
En la línea 32 de main_demo.py
cambie CHECKPOINT_PATH
al modelo después del ajuste personal
prefix_state_dict = torch . load ( os . path . join ( CHECKPOINT_PATH , "pytorch_model.bin" ))
Tenga en cuenta que es posible que necesite cambiar pre_seq_len
al valor real durante su entrenamiento. Si está cargando el modelo localmente, debe cambiar THUDM/chatglm-6b
a la ruta del modelo local (tenga en cuenta que no es la ruta del punto de control).
El método de escritura predeterminado en el código fuente es cargar un nuevo punto de control (que solo contiene el parámetro PrefixEncoder)
Si necesita cargar el antiguo Checkpoint (incluidos los parámetros ChatGLM-6B y PrefixEncoder), o realizar un ajuste completo de los parámetros, cargue todo el Checkpoint directamente:
model = AutoModel . from_pretrained ( CHECKPOINT_PATH , trust_remote_code = True )
Agregue la ruta del modelo y el nombre del orador a So-VITS_run.py
(dependiendo de su configuración de entrenamiento)
parser . add_argument ( '-m' , '--model_path' , type = str , default = "" , help = '模型路径' )
parser . add_argument ( '-s' , '--spk_list' , type = str , nargs = '+' , default = [ '' ], help = '合成目标说话人名称' )
Necesita descargar wav2lip_run.py
:
#VIDEO
face_dir = "./source/"
Realice cambios. El video llamado aquí es el video grabado previamente. Puede escribir su propio plan de selección de videos.
No es de extrañar, simplemente ejecute main_demo.py
directamente en VScode u otro software. Diviértanse todos.
El código de este repositorio es de código abierto bajo el acuerdo GNU GPLv3. El uso de pesos de cada modelo debe seguir su acuerdo de código abierto.