Demonstração DL-C e parcial de DL-D • AI Society
Este código aberto é DL-B, que é uma solução de imagem digital baseada em ChatGLM, Wav2lip e so-vits-svc. A base de código foi escrita em meados de março de 2023 e não foi otimizada ou atualizada desde então.
Atualmente estou competindo neste projeto. A competição entrará na fase de competição provincial no final de junho. A equipe do projeto está atualmente avançando para a otimização e melhoria subsequente do DL-C e para o teste e desenvolvimento do DL-D. Nenhum código e detalhes sobre DL-C e DL-D serão divulgados antes do final da competição. O código e a estrutura detalhada serão compilados e atualizados após o final da competição. Esqueci de perdoar.
O código atual é muito rígido. Sou um estudante do segundo ano com especialização em finanças e não tenho habilidades estéticas ou técnicas em escrita de código (C+V estranho).
Após a competição, o projeto será assumido pela AI Society e futuramente será produzido um framework amigável, com um pacote preguiçoso de processo completo.
A plataforma usada para produção de DL-B é fornecida aqui como referência (você pode propor configurações executáveis mais baixas como complemento)
placa gráfica | CPU | Memória | disco rígido |
---|---|---|---|
RTX3060 12G | Intel i5-12400F | 16 GB | 30G |
O ambiente de teste é baseado em Python 3.9.13 de 64 bits
Use pip para instalar dependências: pip install -r requirements.txt
Ressalta-se que você ainda precisa baixar um pacote de ambiente Python 3.8 para rodar o So-VITS (clique no pacote de ambiente), mas não se preocupe, eu já configurei para você, você só precisa baixar e descompactar na pasta DL-B e mantenha o caminho do arquivo
DL-B
├───python3.8
├───Lib
├───libs
├───···
└───Tools
Além disso, você também precisa instalar o ffmpeg. Se não quiser instalá-lo manualmente, você também pode tentar usar o pacote lento que fornecemos.
ChatGLM possui muitos métodos de ajuste fino e os usuários podem escolher o método de ajuste apropriado de acordo com sua situação real. Funcionários da Universidade de Tsinghua deram uma explicação detalhada sobre o ajuste fino do ChatGLM por meio do P-tuning. Existe uma biblioteca de exemplos de ajuste melhor no Github, que usa Zhen Huan como exemplo de ajuste fino. Esta biblioteca contém o código para ajuste fino do P-tuning , mas não inclui o modelo pré-treinado do ChatGLM.
O programa baixará automaticamente a implementação do modelo e os parâmetros transformers
. A implementação completa do modelo pode ser encontrada em Hugging Face Hub. Se o seu ambiente de rede for ruim, o download dos parâmetros do modelo poderá demorar muito ou até mesmo falhar. Neste momento, você pode primeiro baixar o modelo para o local e depois carregá-lo do local.
Para baixar o modelo do Hugging Face Hub, você precisa primeiro instalar o Git LFS e depois executar
git clone https://huggingface.co/THUDM/chatglm-6b
Se você demorar para baixar o ponto de verificação do Hugging Face Hub, só poderá baixar a implementação do modelo.
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm-6b
Em seguida, baixe manualmente o arquivo de parâmetro do modelo aqui e substitua o arquivo baixado no diretório local module/chatglm-6b
.
A implementação do modelo Opcional ainda está em evolução. Se quiser corrigir a implementação do modelo usada para garantir a compatibilidade, você pode executar
git checkout v0.1.0
Use seu próprio conjunto de dados
Aqui está uma biblioteca útil para coletar corpus pessoal
Modifique train_file
, validation_file
e test_file
em train.sh
evaluate.sh
para seu próprio caminho do conjunto de dados no formato JSON e altere prompt_column
e response_column
para a KEY correspondente ao texto de entrada e ao texto de saída no arquivo JSON. Você também pode precisar aumentar max_source_length
e max_target_length
para corresponder aos comprimentos máximos de entrada e saída em seu próprio conjunto de dados.
Conjunto de dados de conversa
Se precisar usar dados de conversa de vários turnos para ajustar o modelo, você pode fornecer o histórico de bate-papo. Por exemplo, a seguir estão os dados de treinamento de uma conversa de três turnos:
{ "prompt" : "长城h3风扇不转。继电器好的。保险丝好的传感器新的风扇也新的这是为什么。就是继电器缺一个信号线" , "response" : "用电脑能读数据流吗?水温多少" , "history" : []}
{ "prompt" : " 95 " , "response" : "上下水管温差怎么样啊?空气是不是都排干净了呢? " , "history" : [[ "长城h3风扇不转。继电器好的。保险丝好的传感器新的风扇也新的这是为什么。就是继电器缺一个信号线" , "用电脑能读数据流吗?水温多少" ]]}
{ "prompt" : "是的。上下水管都好的" , "response" : "那就要检查线路了,一般风扇继电器是由电脑控制吸合的,如果电路存在断路,或者电脑坏了的话会出现继电器不吸合的情况! " , "history" : [[ "长城h3风扇不转。继电器好的。保险丝好的传感器新的风扇也新的这是为什么。就是继电器缺一个信号线" , "用电脑能读数据流吗?水温多少" ], [ " 95 " , "上下水管温差怎么样啊?空气是不是都排干净了呢? " ]]}
Durante o treinamento, você precisa especificar --history_column
como a chave do histórico de bate-papo nos dados ( history
neste exemplo), e o histórico de bate-papo será automaticamente mesclado. Observe que o conteúdo que exceder o comprimento de entrada max_source_length
será truncado.
Você pode consultar as seguintes instruções:
bash train_chat.sh
Claro, você também pode misturar o corpus de diálogos de múltiplas rodadas e diálogos de rodada única. Basta adicionar o seguinte modo de diálogo diretamente sobre o acima.
{ "prompt" : "老刘,你知道那个作业要怎么从电脑上保存到手机上吗? " , "response" : "我也不知道啊" , "history" :[]}
So-VITS já é um modelo muito popular e maduro, e há muitos vídeos de ensino na estação B, então não vou entrar em detalhes aqui. Aqui estão tutoriais que considero de altíssima qualidade e essência. Esta biblioteca contém o código para treinamento básico e treinamento em cluster do So-VITS, mas não é muito fácil de usar e nenhuma alteração foi feita no conteúdo do DL-B após sua conclusão em março. que esta biblioteca não inclui ferramentas para processamento de dados e preparação preliminar.
Existem alguns arquivos de modelo que precisam ser concluídos, checkpoint_best_legacy_500.pt, colocados em hubert
e dois modelos pré-treinados correspondentes G_0.pth e D_0.pth colocados nas pastas .moduleSo-VITS
e pre_trained_model
.
Este é um método mais antigo e muitas otimizações foram feitas na estrutura mais recente. Esta versão é baseada no Wav2Lip original e os usuários podem escolher diferentes pesos de modelo de pré-treinamento. O modelo aqui é um download obrigatório e é colocado na pasta .modulewav2lip
.
Modelo | descrever | Link |
---|---|---|
Wav2Lip | Sincronização labial de alta precisão | Link |
Wav2Lip+GAN | A sincronização labial é um pouco pior, mas a qualidade visual é melhor | Link |
Discriminador Especialista | Link | |
Discriminador de Qualidade Visual | Link |
Ressalta-se que esta biblioteca necessita coletar alguns vídeos, que podem ser gravados em celulares, computadores ou câmeras. É utilizado para coletar informações faciais. O formato recomendado é .mp4
e a resolução é 720p
ou 480p
. geralmente é de 5 a 10 segundos. Vários vídeos podem ser capturados. Armazene os arquivos de vídeo na pasta source
.
Em relação à otimização do Wan2lip, muitos marmanjos da estação B já fizeram isso, então não vou entrar em detalhes (preguiçoso Aqui está um vídeo).
Observe que além do conteúdo acima, você também precisa baixar um modelo s3fd.pth que precisa ser usado durante o processo de inferência e colocá-lo na pasta .face_detectiondetectionsfd
Esta biblioteca não contém nenhum modelo! ! Não pode ser usado depois de ser puxado diretamente! ! É necessário treinar o modelo
O código-fonte precisa ser alterado nos seguintes locais:
Coloque todos os modelos ajustados nas pastas correspondentes module
. Copie todos os arquivos de saída para output
após o treinamento de ajuste P para a output
local correspondente. So-VITS/44k
é usado para armazenar modelos de treinamento So-VITS. O modelo wav2lip+GAN é armazenado na pasta wav2lip
.
Na linha 32 de main_demo.py
altere CHECKPOINT_PATH
para o modelo após ajuste pessoal
prefix_state_dict = torch . load ( os . path . join ( CHECKPOINT_PATH , "pytorch_model.bin" ))
Observe que pode ser necessário alterar pre_seq_len
para o valor real durante o treinamento. Se você estiver carregando o modelo localmente, será necessário alterar THUDM/chatglm-6b
para o caminho do modelo local (observe que não é o caminho do ponto de verificação).
O método de escrita padrão no código fonte é carregar um novo Checkpoint (contendo apenas o parâmetro PrefixEncoder)
Se você precisar carregar o Checkpoint antigo (incluindo os parâmetros ChatGLM-6B e PrefixEncoder) ou realizar o ajuste completo dos parâmetros, carregue todo o Checkpoint diretamente:
model = AutoModel . from_pretrained ( CHECKPOINT_PATH , trust_remote_code = True )
Adicione o caminho do modelo e o nome do alto-falante a So-VITS_run.py
(dependendo das configurações de seu treinamento)
parser . add_argument ( '-m' , '--model_path' , type = str , default = "" , help = '模型路径' )
parser . add_argument ( '-s' , '--spk_list' , type = str , nargs = '+' , default = [ '' ], help = '合成目标说话人名称' )
Precisa baixar wav2lip_run.py
:
#VIDEO
face_dir = "./source/"
Faça alterações. O vídeo chamado aqui é o vídeo gravado anteriormente. Você pode escrever seu próprio plano de seleção de vídeo.
Nenhuma surpresa, basta executar main_demo.py
diretamente no VScode ou outro software. Divirtam-se todos.
O código deste repositório é de código aberto sob o acordo GNU GPLv3. A utilização dos pesos de cada modelo deve seguir seu contrato de código aberto.