Índice Um mergulho profundo na clonagem de voz com SoftVC VITS e Bert-VITS2 Preparar conjunto de dados Extrair de uma música Fluxos de trabalho de UVR Preparação para gravação vocal Equipamento de áudio do Cheapskate Fluxos de trabalho do Audacity fatiador de áudio Limpeza do conjunto de dados Volume correspondente so-vits-svc Configurar ambiente Inicialização Baixe modelos pré-treinados Preparação do conjunto de dados Editar configurações Treinamento Inferência Edição de áudio so-vits-svc-fork Instalação Preparação Treinamento Inferência DDSP-SVC Preparação Treinamento Inferência Bert-vits2-V2.3 Inicialização Preparação Transcrição Treinamento e Inferência vits-simple-api Ajustes Compartilhar modelos No , experimentei um pouco do e achei interessante. Então, decidi treinar um modelo utilizável com minha própria voz. post anterior TTS Generation WebUI Este projeto de clonagem de voz explora SVC para mudança de voz e para conversão de texto em fala. Não existe uma ferramenta que faça todas as tarefas. VITS Testei várias ferramentas para este projeto. Muitos dos bons guias, como , e , estão em chinês. Então, pensei que seria útil postar minhas anotações em inglês. este este este Embora esteja arquivado há alguns meses, provavelmente devido à opressão, ainda é a ferramenta para obter o melhor resultado. so-vits-svc Outras ferramentas relacionadas, como , , e fornecem otimização mais rápida/litro, mais recursos ou interfaces melhores. so-vits-svc-fork so-vits-svc-5.0 DDSP-SVC RVC Mas com tempo e recursos suficientes, nenhuma dessas alternativas pode competir com o resultado superior gerado pelo so-vits-svc original. Para o TTS, uma nova ferramenta chamada funciona de maneira fantástica e já amadureceu com seu lançamento final no mês passado. Possui alguns casos de uso muito diferentes, por exemplo, criação de conteúdo de áudio. Bert-VITS2 Preparar conjunto de dados Os arquivos de áudio do conjunto de dados devem estar no formato WAV, 44100 Hz, 16 bits, mono, idealmente de 1 a 2 horas. Extrair de uma música é a ferramenta mais fácil para este trabalho. Existe um que explica tudo detalhadamente. Ultimate Vocal Remover tópico Fluxos de trabalho de UVR Remova e extraia Instrumental Modelo: VR - UVR (4_HP-Vocal-UVR) Configurações: 512 - 10 - GPU Saída e vocal impuro instrumental Remova e extraia vocais de fundo. Modelo: VR - UVR (5_HP-Karaokê-UVR) Configurações: 512 - 10 - GPU Saída e vocal principal impuro de vocal de fundo Remova reverberação e ruído. Modelo: VR - UVR-DeEcho-DeReverb e UVR-DeNoise Configurações: 512 - 10 - GPU - Nenhum outro somente Saída vocal principal limpo (Opcional) Usando RipX (não gratuito) para realizar uma limpeza manual. Preparação para Gravação Vocal É melhor gravar em uma sala tratada com microfone condensador; caso contrário, use um microfone direcional ou dinâmico para reduzir o ruído. Equipamento de áudio do Cheapskate A primeira vez que me interessei pela música foi no ensino médio, com o Sennheiser MX500 azul e o Koss Porta Pro. Ainda me lembro da primeira vez que gravei uma música em um Sony VAIO com Cool Edit Pro. Hoje em dia, ainda resisto a gastar muito dinheiro em hardware de áudio como amador, porque é literalmente um buraco negro sugador de dinheiro. No entanto, aprecio muito a fiabilidade desses equipamentos de produção baratos. A parte principal da minha configuração é um Behringer UCA202 e é perfeito para meus casos de uso. Comprei por US $ 10 durante uma queda de preço. É a chamada “Interface de Áudio”, mas basicamente apenas uma placa de som com múltiplas portas. Usei cabos RCA para TRS de 3,5 mm para meus fones de ouvido, um K240s semiaberto para saída regular e um HD669/MDR7506 fechado para saída de monitor. Todos os três fones de ouvido mencionados custam menos de US$ 100 pelo preço normal. E existem clones de Samson, Tascam, Knox Gear e outros por menos de US$ 50. Para o dispositivo de entrada, estou usando um microfone dinâmico para evitar ruídos ambientais. É uma cópia SM58 (Pyle) + um gravador Tascam DR-05 (como amplificador). Outros clones como SL84c ou wm58 também fariam isso. Eu uso um cabo XLR para TRS de 3,5 mm para conectar o microfone à entrada MIC/Externa do gravador e, em seguida, uso um cabo AUX para conectar entre a saída de linha do gravador e a entrada do UCA202. Não é recomendado comprar uma “interface de áudio” e um amplificador dedicado para replicar minha configuração. Uma placa de som USB c-media de US$ 10 deve ser boa o suficiente. O modelo Syba que possuo é capaz de “pré-amplificar” microfones dinâmicos diretamente e até mesmo alguns microfones com alimentação fantasma de baixo custo. A configuração pode ser extremamente barata (US$ 40~60), mas com UCA202 e DR-05, o som é muito mais limpo. E eu realmente gosto dos controles físicos, versatilidade e portabilidade do meu velho e bom gravador digital. Fluxos de trabalho do Audacity Embora quando eu era pago como designer, fiquei muito feliz com o Audition. Mas para uso pessoal em um projeto divertido, o Audacity é a maneira de evitar o mal caótico da Adobe. Redução de ruído Dereverb Silêncio truncado Normalizar fatiador de áudio Use ou para cortar o arquivo de áudio em pequenos pedaços para uso posterior. audio-slicer audio-slicer (gui) A configuração padrão funciona muito bem. Limpeza do conjunto de dados Remova os muito curtos e corte novamente os que ainda duram mais de 10 segundos. No caso de um conjunto de dados grande, remova todos os que tenham menos de 4 segundos. No caso de um conjunto de dados pequeno, remova-os apenas em menos de 2 segundos. Se necessário, realize uma inspeção manual para cada arquivo. Volume da correspondência Use o Audacity novamente com ; 0db deve fazer isso. Loudness Normalization so-vits-svc Configure o ambiente O ambiente virtual é essencial para executar várias ferramentas Python dentro de um sistema. Eu costumava usar VMs e Docker, mas agora descobri que é muito mais rápido e prático que os outros. o anaconda Crie um novo ambiente para so-vits-svc e ative-o. conda create -n so-vits-svc python=3.8 conda activate so-vits-svc Em seguida, instale os requisitos. git clone https://github.com/svc-develop-team/so-vits-svc cd so-vits-svc pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 #for linux pip install -r requirements.txt #for windows pip install -r requirements_win.txt pip install --upgrade fastapi==0.84.0 pip install --upgrade gradio==3.41.2 pip install --upgrade pydantic==1.10.12 pip install fastapi uvicorn Inicialização Baixe modelos pré-treinados pré-treinar wget https://huggingface.co/WitchHuntTV/checkpoint_best_legacy_500.pt/resolve/main/checkpoint_best_legacy_500.pt wget https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/rmvpe.pt registros/44k wget https://huggingface.co/datasets/ms903/sovits4.0-768vec-layer12/resolve/main/sovits_768l12_pre_large_320k/clean_D_320000.pth wget https://huggingface.co/datasets/ms903/sovits4.0-768vec-layer12/resolve/main/sovits_768l12_pre_large_320k/clean_G_320000.pth logs/44k/difusão wget https://huggingface.co/datasets/ms903/Diff-SVC-refactor-pre-trained-model/resolve/main/fix_pitch_add_vctk_600k/model_0.pt (Alternativa) wget https://huggingface.co/datasets/ms903/DDSP-SVC-4.0/resolve/main/pre-trained-model/model_0.pt (Alternativa) wget https://huggingface.co/datasets/ms903/Diff-SVC-refactor-pre-trained-model/blob/main/hubertsoft_fix_pitch_add_vctk_500k/model_0.pt pré-treinamento/nsf_hifigan wget -P pretrain/ https://github.com/openvpi/vocoders/releases/download/nsf-hifigan-v1/nsf_hifigan_20221211.zip unzip -od pretrain/nsf_hifigan pretrain/nsf_hifigan_20221211.zip Preparação do conjunto de dados Coloque todos os arquivos audio.wav preparados em dataset_raw/character cd so-vits-svc python resample.py --skip_loudnorm python preprocess_flist_config.py --speech_encoder vec768l12 --vol_aug python preprocess_hubert_f0.py --use_diff Editar configurações O arquivo está localizado em configs/config.json : a frequência de impressão do log: a frequência de salvamento de pontos de verificação : total de etapas : número de pontos de verificação salvos, 0 para ilimitado. : fp32 No meu caso, : quanto menor, mais rápido (mais áspero), quanto maior, mais lento (melhor). log interval eval interval epochs keep ckpts half_type batch_size Tamanho de lote recomendado por VRAM: 4 = 6G;6 = 8G;10 = 12G;14 = 16G;20 = 24G Mantenha o padrão para configs/diffusion.yaml Treinamento python cluster/train_cluster.py --gpu python train_index.py -c configs/config.json python train.py -c configs/config.json -m 44k python train_diff.py -c configs/diffusion.yaml Nas etapas de treinamento: Use para treinar o modelo principal; normalmente, 20k-30k seriam utilizáveis, e 50k ou mais seriam bons o suficiente. Isso pode levar alguns dias dependendo da velocidade da GPU. train.py Sinta-se à vontade para interrompê-lo com e o treinamento continuará executando novamente a qualquer momento. ctrl+c python train.py -c configs/config.json -m 44k Use para treinar o modelo de difusão; as etapas de treinamento são recomendadas em 1/3 do modelo principal. train_diff.py Esteja ciente do excesso de treinamento. Use para monitorar os gráficos e ver se eles ficam planos. tensorboard --logdir=./logs/44k Altere a de 0,0001 para 0,00005, se necessário. learning rate Quando terminar, compartilhe/transporte esses arquivos para inferência. configuração/ config.json difusão.yaml registros/44k feature_and_index.pkl kmeans_10000.pt modelo_0.pt G_xxxx.pt Inferência É hora de experimentar o modelo treinado. Eu preferiria o Webui pela conveniência de ajustar os parâmetros. Mas antes de iniciá-lo, edite as seguintes linhas em para acesso LAN: webUI.py os.system("start http://localhost:7860") app.launch(server_name="0.0.0.0", server_port=7860) Execute ; em seguida, acesse seu em um navegador da web. python webUI.py ipaddress:7860 O webui não tem localização em inglês, mas seria útil. a Tradução Imersiva A maioria dos parâmetros funcionaria bem com o valor padrão. Consulte e para fazer alterações. this this Faça upload destes 5 arquivos: e seu main model.pt config.json e seu diffusion model.pt diffusion.yaml Modelo de cluster para falar ou recuperação de recursos para cantar. kmeans_10000.pt feature_and_index.pkl serve apenas para falar, não para cantar. Recomende ao usar. F0 predictor RMVPE é útil ao cantar uma música feminina usando um modelo com voz masculina ou vice-versa. Pitch change é a forma de controlar o tom. Use para obter a fala mais clara e use para obter o tom mais próximo do modelo. Clustering model/feature retrieval mixing ratio 0.1 0.9 devem ser definidas em torno de , o que melhora o resultado em etapas. shallow diffusion steps 50 30-100 Edição de áudio Este procedimento é opcional. Apenas para a produção de uma música melhor. Não entrarei em detalhes sobre isso, pois o software de edição de áudio, ou o chamado DAW (estação de trabalho de áudio digital), que estou usando não é gratuito. Não tenho intenção de defender software proprietário, embora toda a indústria tenha acesso pago e código fechado. O Audacity oferece suporte a multitrack, efeitos e muito mais. Ele também carrega alguns plug-ins VST avançados. Não é difícil encontrar tutoriais sobre como masterizar músicas com o Audacity. Normalmente, o processo de masterização deve ser mixagem/balanceamento, equalização/compressão, reverberação e imagem. Quanto mais avançada for a ferramenta, mais fácil será o processo. Definitivamente gastarei mais tempo adotando o Audacity para meu processo de masterização no futuro e recomendo a todos que façam isso. so-vits-svc-fork Este é um so-vits-svc com suporte em tempo real e os modelos são compatíveis. Mais fácil de usar, mas não suporta o modelo Diffusion. Para mudança de voz dedicada em tempo real, é recomendado um . fork trocador de voz Instalação conda create -n so-vits-svc-fork python=3.10 pip conda activate so-vits-svc-fork git clone https://github.com/voicepaw/so-vits-svc-fork cd so-vits-svc-fork python -m pip install -U pip setuptools wheel pip install -U torch torchaudio --index-url https://download.pytorch.org/whl/cu118 pip install -U so-vits-svc-fork pip install click sudo apt-get install libportaudio2 Preparação Coloque os arquivos .wav do conjunto de dados em so-vits-svc-fork/dataset_raw svc pre-resample svc pre-config Edite um em . Este garfo é um tamanho maior que o original. batch_size configs/44k/config.json Treinamento svc pre-hubert svc train -t svc train-cluster Inferência Use GUI com . Isso requer um ambiente de área de trabalho local. svcg Ou use CLI com para tempo real e para geração. svc vc svc infer -m "logs/44k/xxxxx.pth" -c "configs/config.json" raw/xxx.wav DDSP-SVC requer menos recursos de hardware e é executado mais rapidamente que o so-vits-svc. Ele suporta modelos em tempo real e de difusão (Diff-SVC). O DDSP-SVC conda create -n DDSP-SVC python=3.8 conda activate DDSP-SVC git clone https://github.com/yxlllc/DDSP-SVC cd DDSP-SVC pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 pip install -r requirements.txt Consulte a para os dois arquivos: seção Inicialização pretrain/rmvpe/model.pt pretrain/contentvec/checkpoint_best_legacy_500.pt Preparação python draw.py python preprocess.py -c configs/combsub.yaml python preprocess.py -c configs/diffusion-new.yaml Editar configs/ batch_size: 32 (16 for diffusion) cache_all_data: false cache_device: 'cuda' cache_fp16: false Treinamento conda activate DDSP-SVC python train.py -c configs/combsub.yaml python train_diff.py -c configs/diffusion-new.yaml tensorboard --logdir=exp Inferência É recomendado usar , pois inclui DDSP e modelo de difusão. main_diff.py python main_diff.py -i "input.wav" -diff "model_xxxxxx.pt" -o "output.wav" GUI em tempo real para clonagem de voz: python gui_diff.py Bert-vits2-V2.3 Esta é uma ferramenta TTS completamente diferente de tudo acima. Com ele, já criei vários audiolivros com minha voz para meus pais, e eles gostaram muito. Em vez de usar o , usei o fork da para uma configuração mais fácil. original v3u Inicialização conda create -n bert-vits2 python=3.9 conda activate bert-vits2 git clone https://github.com/v3ucn/Bert-vits2-V2.3.git cd Bert-vits2-V2.3 pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 torchaudio==2.0.2+cu118 --index-url https://download.pytorch.org/whl/cu118 pip install -r requirements.txt Baixe modelos pré-treinados (inclui chinês, japonês e inglês): wget -P slm/wavlm-base-plus/ https://huggingface.co/microsoft/wavlm-base-plus/resolve/main/pytorch_model.bin wget -P emotional/clap-htsat-fused/ https://huggingface.co/laion/clap-htsat-fused/resolve/main/pytorch_model.bin wget -P emotional/wav2vec2-large-robust-12-ft-emotion-msp-dim/ https://huggingface.co/audeering/wav2vec2-large-robust-12-ft-emotion-msp-dim/resolve/main/pytorch_model.bin wget -P bert/chinese-roberta-wwm-ext-large/ https://huggingface.co/hfl/chinese-roberta-wwm-ext-large/resolve/main/pytorch_model.bin wget -P bert/bert-base-japanese-v3/ https://huggingface.co/cl-tohoku/bert-base-japanese-v3/resolve/main/pytorch_model.bin wget -P bert/deberta-v3-large/ https://huggingface.co/microsoft/deberta-v3-large/resolve/main/pytorch_model.bin wget -P bert/deberta-v3-large/ https://huggingface.co/microsoft/deberta-v3-large/resolve/main/pytorch_model.generator.bin wget -P bert/deberta-v2-large-japanese/ https://huggingface.co/ku-nlp/deberta-v2-large-japanese/resolve/main/pytorch_model.bin Crie uma pasta de modelo de personagem mkdir -p Data/xxx/models/ Baixe modelos básicos: !wget -P Data/xxx/models/ https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/resolve/main/DUR_0.pth !wget -P Data/xxx/models/ https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/resolve/main/D_0.pth !wget -P Data/xxx/models/ https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/resolve/main/G_0.pth !wget -P Data/xxx/models/ https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/resolve/main/WD_0.pth #More options https://openi.pcl.ac.cn/Stardust_minus/Bert-VITS2/modelmanage/model_filelist_tmpl?name=Bert-VITS2_2.3%E5%BA%95%E6%A8%A1 https://huggingface.co/Erythrocyte/bert-vits2_base_model/tree/main https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/tree/main Edite substituindo todos por train_ms.py bfloat16 float16 Edite para acesso LAN: webui.py webbrowser.open(f"start http://localhost:7860") app.launch(server_name="0.0.0.0", server_port=7860) Edite para e Data/xxx/config.json batch_size spk2id Preparação Fluxo de trabalho semelhante ao da . seção anterior Remova o ruído e o silêncio, a normalização e, em seguida, coloque o arquivo WAV não fatiado em . Data/xxx/raw Edite para , e . config.yml dataset_path num_workers keep_ckpts Execute para fatiar o arquivo WAV. python3 audio_slicer.py Limpe o conjunto de dados ( ) removendo arquivos pequenos com menos de 2 segundos. Data/xxx/raw Transcrição Instale o sussurro pip install git+https://github.com/openai/whisper.git Para desativar a detecção automática de idioma, configure-a apenas para inglês e use um modelo ; edite conforme abaixo: large short_audio_transcribe.py # set the spoken language to english print('language: en') lang = 'en' options = whisper.DecodingOptions(language='en') result = whisper.decode(model, mel, options) # set to use large model parser.add_argument("--whisper_size", default="large") #Solve error "Given groups=1, weight of size [1280, 128, 3], expected input[1, 80, 3000] to have 128 channels, but got 80 channels instead" while using large model mel = whisper.log_mel_spectrogram(audio,n_mels = 128).to(model.device) Execute para iniciar a transcrição. python3 short_audio_transcribe.py Faça uma nova amostra do conjunto de dados fatiado: python3 resample.py --sr 44100 --in_dir ./Data/zizek/raw/ --out_dir ./Data/zizek/wavs/ Transcrição de pré-processamento: python3 preprocess_text.py --transcription-path ./Data/zizek/esd.list Gere a configuração do recurso BERT: python3 bert_gen.py --config-path ./Data/zizek/configs/config.json Treinamento e Inferência Execute para iniciar o treinamento python3 train_ms.py Edite para o caminho do modelo: config.yml model: "models/G_20900.pth" Execute para iniciar o webui para inferência python3 webui.py vits-simple-api é uma interface web para usar modelos treinados. Eu uso isso principalmente pelo suporte a textos longos que o projeto original não possui. vits-simple-api git clone https://github.com/Artrajz/vits-simple-api git pull https://github.com/Artrajz/vits-simple-api cd vits-simple-api conda create -n vits-simple-api python=3.10 pip conda activate vits-simple-api && pip install -r requirements.txt (Opcional) Copie os arquivos de modelo pré-treinados de para Bert-vits2-V2.3/ vits-simple-api/bert_vits2/ Copie e para Bert-vits2-V2.3/Data/xxx/models/G_xxxxx.pth Bert-vits2-V2.3/Data/xxx/config.json vits-simple-api/Model/xxx/ Edite para e conforme preferido config.py MODEL_LIST Default parameter Edite conforme abaixo: Model/xxx/config.json "data": { "training_files": "Data/train.list", "validation_files": "Data/val.list", "version": "2.3" Verifique/edite em como model_list config.yml [xxx/G_xxxxx.pth, xxx/config.json] Execute python app.py Ajustes para tom, para aleatoriedade, para pronúncia e para velocidade. e são autoexplicativos SDP Ratio Noise Noise_W Length emotion style Compartilhar modelos Em seu , há muitos modelos VITS compartilhados por outras pessoas. Você pode experimentá-lo primeiro e depois baixar os modelos desejados em . repositório Hugging Face Arquivos O é amplamente utilizado em algumas comunidades de criação de conteúdo devido à sua alta qualidade. Ele contém centenas de caracteres, embora apenas chinês e japonês sejam suportados. modelo Genshin Em , existem muitos modelos Bert-vits2 feitos de streamers e VTubers chineses populares. outro repositório Já existem projetos fazendo AI Vtubers como e . Estou ansioso para ver como essa tecnologia pode mudar a indústria em um futuro próximo. este este https://techshinobi.org/posts/voice-vits/https://techshinobi.org/posts/voice-vits/