오전에 질문한 내용 이어서 이야기해 봅시다.

오전에 vits 음성합성 문제로 질문올렸고 구체적인 상황을 이야기해달라는 답변을 받았고 그에 대한 답변을 써 봅니다.
config.json의 내용입니다.
{
"train": {
"log_interval": 200,
"eval_interval": 1000,
"seed": 1234,
"epochs": 50000,
"learning_rate": 12e-4,
"betas": [0.8, 0.99],
"eps": 1e-9,
"batch_size": 12,
"fp16_run": true,
"lr_decay": 0.999875,
"segment_size": 8192,
"init_lr_ratio": 1,
"warmup_epochs": 0,
"c_mel": 45,
"c_kl": 1.0
},
"data": {
"training_files":"filelists/ko_train_cleaned.txt",
"validation_files":"filelists/ko_train.txt",
"text_cleaners":["korean_cleaners"],
"max_wav_value": 32768.0,
"sampling_rate": 22050,
"filter_length": 1024,
"hop_length": 256,
"win_length": 1024,
"n_mel_channels": 80,
"mel_fmin": 0.0,
"mel_fmax": null,
"add_blank": true,
"n_speakers": 0,
"cleaned_text": true
},
"model": {
"inter_channels": 192,
"hidden_channels": 192,
"filter_channels": 768,
"n_heads": 2,
"n_layers": 6,
"kernel_size": 3,
"p_dropout": 0.1,
"resblock": "1",
"resblock_kernel_sizes": [3,7,11],
"resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]],
"upsample_rates": [8,8,2,2],
"upsample_initial_channel": 512,
"upsample_kernel_sizes": [16,16,4,4],
"n_layers_q": 3,
"use_spectral_norm": false,
"gin_channels": 256
},
"speakers": ["kss"],
"symbols": ["_", ",", ".", "!", "?", "\u2026", "~", "\u3131", "\u3134", "\u3137", "\u3139", "\u3141", "\u3142", "\u3145", "\u3147", "\u3148", "\u314a", "\u314b", "\u314c", "\u314d", "\u314e", "\u3132", "\u3138", "\u3143", "\u3146", "\u3149", "\u314f", "\u3153", "\u3157", "\u315c", "\u3161", "\u3163", "\u3150", "\u3154", " "]
}
위 내용이 파라미터인지 잘 모릅니다.
전 초보자니까요.
이제 오전의 질문을 이어서 이야기해 봅시다.

위 링크를 타고들어가면 모델들이 쭉 나열되어있습니다.
모델 6번을 참고해주세요.
1164_epochs.pth
MoeGoe github에서 가져온 모델입니다.
huggingface와 같은 모델입니다.
전 이 모델로 전의학습을했습니다.
몇가지 음성을 학습했었습니다.
애니메이션과 aihub에서 제공해주는 음성으로 학습했습니다.
그리고 지금은 kss를 전의학습중이죠.
문제는 kss 음성 문제입니다.
다른 음성들은 사 발음과 륙 발음에는 문제가 없었습니다.
이건 장담합니다.
kss 음성이 문제입니다.
처음 만들어진 음성을 들어봤습니다.
외국인 스러운 발음이지만 부명 사는 사로 발음했었습니다.
학습하면 학습할 수록 사 발음은 다가 되고 댜가 되고 쟈가 됩니다.
이륙과 착륙 발음중 착륙 발음이 이상합니다.
이륙의 발음에는 문제가 없습니다.
데이터셋 대본을 가져왔습니다.
dataset/KO/3_3798.wav|비행기는 5분 후에 이륙할 예정입니다.
dataset/KO/3_3805.wav|우리 비행기는 10분 후에 이륙합니다.
dataset/KO/3_3806.wav|저희 비행기가 정시에 착륙하고 있습니다.
dataset/KO/3_3895.wav|호주의 내륙은 하나의 거대한 사막 지역이다.
dataset/KO/1_0001.wav|그녀의 사랑을 얻기 위해 애썼지만 헛수고였다.
dataset/KO/1_0009.wav|사흘 동안 심하게 몸살을 앓았어요.
dataset/KO/1_0011.wav|장사가 잘 안돼서 우울해.
dataset/KO/1_0020.wav|그는 절대 다른 사람의 의견을 받아들이지 않는다.
dataset/KO/1_0031.wav|오타를 발견하시는 분께 사례하겠습니다.
dataset/KO/1_0044.wav|저는 무력 사용을 반대합니다.
dataset/KO/1_0046.wav|저희 회사에 방문해 주셔서 감사드립니다.
dataset/KO/1_0062.wav|벽 사이에 벌어진 틈이 있어.
dataset/KO/1_0091.wav|그녀가 나에게 사진 몇 장을 보여 주었다.
dataset/KO/1_0103.wav|사람들은 그를 게으른 천재라고 부른다.
dataset/KO/1_0018.wav|114에 전화를 해서 번호를 알아보시지 그러세요?
너무 많아서 대충 가져왔습니다.
뭐가 문제일까요?
vits는 GitHub - ouor/vits: VITS implementation of Japanese, Chinese, Korean, Sanskrit and Thai 에서 가져왔고 아나콘다를 사용하며 python은 원래 3.7를 사용했지만 자꾸 업데이트하라는 메세지가 나와 3.8로 업데이트했고 파이토치는 1.3을 사용하며 rtx 3060 12gb를 사용하고있고 배치사이즈는 36을 사용하다 발음 문제가 개선되지 않아 12로 나춰봣고 학습속도는 13을 넘어가면 자꾸 nan이 나와 저 정도로 나추었는데 몇달이 걸릴지 몇년이 걸릴지 알 수가 없는 상황입니다.

  • 아래 답변은 Anthropic의 Claude-3 Opus 모델로 자동 생성한 것으로, 정확하지 않을 수 있습니다.
  • 잘못된 답변을 보셨다면 댓글로 첨삭 지도 부탁드립니다. :sweat_smile:

안녕하세요 kbuwel님, 질문 주셔서 감사합니다. 말씀해주신 vits 음성 합성 모델 학습과 관련된 문제를 잘 이해했습니다. 말씀해주신 내용을 정리해보면 다음과 같습니다.

  • kss 데이터셋으로 vits 모델을 전이학습(fine-tuning)하고 계신데, 특정 자음(ㅅ,ㄹ 등)의 발음이 정확하지 않고 학습이 진행될수록 더 나빠지는 문제가 있음
  • 다른 음성 데이터로는 이런 문제가 없었음
  • 사용 중인 모델은 MoeGoe에서 가져온 1164 epoch 학습된 것이며, config 설정과 환경은 다음과 같음
    • Python 3.8, PyTorch 1.3, Batch size 12 또는 36 (nan 오류 때문에 12로 낮춤)
    • RTX 3060 12GB GPU 사용 중
  • 현재 학습 속도가 매우 느려 개선이 어려운 상황

우선 kss 데이터 자체의 문제일 가능성이 있습니다. 데이터 품질을 한번 더 검토해보시는 것이 좋겠습니다.
수작업으로 오디오-텍스트 align이 잘못된 샘플들이 있거나 오디오 품질이 좋지 않은 경우가 있는지 체크해보세요. 가능하다면 문제가 되는 발음들이 많이 포함된 데이터를 더 보강하는 것도 도움이 될 수 있습니다.

또한 모델 아키텍처나 하이퍼파라미터 튜닝을 시도해볼 수 있겠습니다.

  • hidden/filter dimension, n_head 등을 더 크게 해서 모델 용량을 늘리기
  • learning rate, batch size 등 학습 파라미터 조정하기
  • phoneme 단위 학습, pitch/energy contidioning 등 다양한 기법 적용해보기

이런 실험들을 위해서는 자원과 시간이 더 필요할 것 같네요. Automatic Speech Recognition(ASR) 모델로 align해서 데이터를 다시 구축하는 것도 고려해볼 만합니다.

아래는 vits 모델 학습 예제 코드입니다. use_pitch, n_speakers 등 파라미터를 바꿔가며 실험해보시기 바랍니다.

import torch
from torch.utils.data import DataLoader
from model import SynthesizerTrn
from data_utils import TextAudioLoader, TextAudioCollate
from train import train

# define model
model = SynthesizerTrn(
    n_vocab=51, 
    spec_channels=80,
    segment_size=8192,
    inter_channels=192,
    hidden_channels=192,
    filter_channels=768,
    n_heads=2,
    n_layers=6,
    kernel_size=3,
    p_dropout=0.1,
    resblock='1',
    resblock_kernel_sizes=[3,7,11],
    resblock_dilation_sizes=[[1,3,5], [1,3,5], [1,3,5]],
    upsample_rates=[8,8,2,2],
    upsample_initial_channel=512,
    upsample_kernel_sizes=[16,16,4,4],
    n_speakers=1,
    gin_channels=256,
    use_sdp=True,
    **hps,
).cuda()

# define dataset
train_dataset = TextAudioLoader(hps.data.training_files, hps.data)
train_loader = DataLoader(train_dataset, collate_fn=TextAudioCollate(), batch_size=12, num_workers=8, shuffle=True)

# train
train(model, train_loader, None, hps)

참고로 vits 오피셜 github의 READMEKorean TTS example에 모델 설정과 한국어 학습 관련 좋은 정보들이 많이 있으니 꼭 읽어보시기 바랍니다.

한국어 TTS는 아직 challenging한 task인 만큼 어려움이 많으시겠지만, 점진적으로 개선해나가시길 응원하겠습니다. 혹시 제가 말씀드린 내용 중에 잘못되거나 부족한 점이 있다면 말씀해주세요. 추가 질문이나 실험 결과 공유도 환영합니다!


  • 답변이 어떠셨나요? 괜찮았다고 생각하신다면 아래 :heart:를 한 번 눌러주시길 부탁드려요!
  • 아래 답변은 OpenAI의 GPT-4-Turbo 모델로 자동 생성한 것으로, 정확하지 않을 수 있습니다.
  • 잘못된 답변을 보셨다면 댓글로 첨삭 지도 부탁드립니다. :sweat_smile:

안녕하세요! 오전에 이어서 VITS 음성합성 문제에 대해 질문해주셨군요. 문제의 상황을 자세히 설명해주셔서 감사합니다. 질문을 요약해보면, VITS 모델을 사용하여 음성 합성을 진행 중이시고, 특히 '사', '륙' 발음에서 문제를 겪고 계시며, 이 문제가 KSS 데이터셋에만 나타나는 것으로 보입니다. 또한, 학습 환경과 파라미터 설정에 대한 정보도 공유해주셨습니다.

이 문제를 해결하기 위해 몇 가지 제안을 드리겠습니다.

  1. 데이터 전처리 확인: 발음 문제가 특정 데이터셋에서만 발생한다면, 데이터의 전처리 과정에서 문제가 발생했을 가능성이 있습니다. KSS 데이터셋의 전처리 과정을 다시 한번 확인해보세요. 특히, '사', '륙' 발음이 포함된 오디오 파일을 직접 듣고, 해당 발음이 정확하게 녹음되었는지, 노이즈가 없는지 확인해보는 것이 좋습니다.

  2. 학습 파라미터 조정: 학습 파라미터 중 learning_rate, batch_size, epochs 등이 모델의 성능에 큰 영향을 미칠 수 있습니다. 이미 batch_size를 조정해보셨다고 하니, learning_rate를 조금 더 낮춰보거나, epochs를 늘려서 모델이 충분히 학습할 수 있도록 해보세요. 또한, betaseps 값도 실험적으로 조정해보며 결과가 개선되는지 확인해보세요.

  3. 학습 과정 모니터링: 학습 과정에서 발생하는 nan 값은 학습이 제대로 진행되지 않고 있다는 신호일 수 있습니다. 학습 과정을 자세히 모니터링하면서, nan 값이 발생하는 정확한 시점을 파악해보세요. 이를 통해 문제의 원인을 좀 더 정확하게 진단할 수 있을 것입니다.

  4. 모델 아키텍처 조정: VITS 모델의 아키텍처를 조정하여 발음 문제를 해결할 수도 있습니다. 예를 들어, n_layers, hidden_channels, filter_channels 등의 값을 조정해보세요. 이러한 값들을 조정함으로써 모델이 특정 발음을 더 잘 학습할 수 있도록 할 수 있습니다.

아래는 PyTorch를 사용하여 학습 파라미터를 조정하는 예시 코드입니다:

import torch
import torch.optim as optim

# 모델 정의
model = YourVITSModel()

# 옵티마이저 설정
optimizer = optim.Adam(model.parameters(), lr=1e-4, betas=(0.8, 0.99), eps=1e-9)

# 학습 루프
for epoch in range(num_epochs):
    for batch_idx, (data, targets) in enumerate(train_loader):
        optimizer.zero_grad()
        output = model(data)
        loss = loss_function(output, targets)
        loss.backward()
        optimizer.step()
        
        if batch_idx % log_interval == 0:
            print(f'Epoch: {epoch}, Batch: {batch_idx}, Loss: {loss.item()}')

이 코드는 기본적인 학습 루프를 보여줍니다. 여기서 YourVITSModel은 사용자의 VITS 모델 클래스이며, train_loader는 학습 데이터셋을 로드하기 위한 DataLoader입니다. loss_function은 모델의 출력과 타겟 사이의 손실을 계산하는 함수입니다.

더 자세한 정보와 학습 자료는 PyTorch 공식 문서에서 찾아볼 수 있습니다:

제 답변이 문제 해결에 도움이 되길 바랍니다. 추가적인 질문이 있으시면 언제든지 질문해주세요.


  • 답변이 어떠셨나요? 괜찮았다고 생각하신다면 아래 :heart:를 한 번 눌러주시길 부탁드려요!
  • 아래 답변은 Google의 Gemini Pro 모델로 자동 생성한 것으로, 정확하지 않을 수 있습니다.
  • 잘못된 답변을 보셨다면 댓글로 첨삭 지도 부탁드립니다. :sweat_smile:

죄송하지만 모델의 학습 과정에 문제가 있다고 판단하기엔 주신 정보가 부족합니다. 따라서 다음을 확인해 주세요.

  1. 학습용 데이터셋에는 문제가 없는지 확인해 주세요. 사 발음과 륙 발음이 섞여 있지는 않은지 확인하고, 데이터셋이 충분히 커서 모델이 제대로 학습할 수 있는지 확인해 주세요.
  2. 모델의 하이퍼파라미터가 적절한지 확인해 주세요. 학습률, 배치 크기, 에폭 수 등의 하이퍼파라미터가 모델의 성능에 큰 영향을 줄 수 있습니다.
  3. 모델의 구조가 적절한지 확인해 주세요. 모델의 레이어 수, 뉴런 수, 활성화 함수 등의 구조가 모델의 성능에 영향을 줄 수 있습니다.
  4. 모델의 손실 함수가 적절한지 확인해 주세요. 모델의 손실 함수는 모델이 학습하는 것을 도울 수 있습니다.
  5. 모델의 정규화 기법이 적절한지 확인해 주세요. 정규화 기법은 모델의 과적합을 방지하는 데 도움이 될 수 있습니다.

또한, 다음 리소스를 참조하여 도움을 받으실 수 있습니다.


  • 답변이 어떠셨나요? 괜찮았다고 생각하신다면 아래 :heart:를 한 번 눌러주시길 부탁드려요!
  • 아래 답변은 OpenAI의 GPT-4 모델로 자동 생성한 것으로, 정확하지 않을 수 있습니다.
  • 잘못된 답변을 보셨다면 댓글로 첨삭 지도 부탁드립니다. :sweat_smile:

안녕하세요! 오전에 이어서 VITS 음성합성 문제에 대한 상세한 상황 설명해주셔서 감사합니다. 문제의 핵심을 파악하기 위해 제공해주신 정보를 바탕으로 상황을 정리해보겠습니다.

문제 상황은 VITS 모델을 사용하여 음성 합성을 진행하는 과정에서 특정 발음(특히 '사', '륙' 발음)이 정확하게 합성되지 않는 현상을 겪고 계신 것으로 이해됩니다. 이 문제는 KSS 데이터셋을 전이학습하는 과정에서 발생하며, 다른 음성 데이터셋에서는 해당 문제가 발생하지 않았다고 합니다. 사용하고 계신 설정(config.json)과 환경(Python 3.8, PyTorch 1.3, RTX 3060 12GB)에 대한 정보도 공유해주셨습니다.

이 문제를 해결하기 위해 몇 가지 접근 방법을 제안드리겠습니다.

1. 데이터 전처리 확인

  • KSS 데이터셋의 특정 발음 문제가 발생하는 것으로 보아, 데이터 전처리 과정에서 발음이 정확하게 인코딩되지 않았을 가능성이 있습니다. 데이터셋의 발음 레이블링이 정확한지, 발음 구분이 명확하게 처리되었는지 확인해보세요.
  • text_cleaners 설정에서 "korean_cleaners"를 사용하고 계신데, 이 부분에서 발음 문제가 발생할 수 있는 처리가 있는지 검토해보세요.

2. 학습 파라미터 조정

  • 학습 파라미터 중 learning_rate, batch_size, lr_decay 등을 조정해보며 학습이 더 안정적으로 진행되도록 시도해볼 수 있습니다. 특히, 발음 문제가 개선되지 않는 경우, 학습률을 조금 더 낮추거나 배치 크기를 조정해보는 것이 좋습니다.
  • batch_size를 12로 조정하셨다고 하셨는데, 이외에도 learning_rate를 조금 더 낮추어 보거나, lr_decay 값을 조정하여 학습률 감소를 더 세밀하게 조절해보세요.

3. 모델 구조 및 학습 과정 검토

  • 모델의 구조(n_layers, hidden_channels 등)와 학습 과정에서 사용하는 손실 함수, 최적화 알고리즘 등이 문제의 발음을 정확하게 학습하기에 적합한지 검토해보세요.
  • 발음 문제가 지속되는 경우, 모델의 구조를 조금 변경해보거나, 다른 손실 함수나 최적화 알고리즘을 시도해볼 수 있습니다.

4. 추가 학습 데이터 활용

  • 발음 문제가 있는 부분에 대해 추가적인 학습 데이터를 준비하여 학습 데이터셋에 포함시켜보세요. 특정 발음에 대한 더 많은 예시를 모델에 제공함으로써 학습 과정에서 해당 발음을 더 잘 학습할 수 있도록 도울 수 있습니다.

참고 자료

  • PyTorch 공식 문서 및 튜토리얼은 모델 학습과 관련된 다양한 기술과 팁을 제공합니다. 특히, 학습 파라미터 조정, 모델 구조 변경 등에 대한 아이디어를 얻을 수 있습니다. PyTorch Tutorials를 참고해보세요.

이러한 접근 방법들을 통해 문제를 해결할 수 있는 방향을 찾으시길 바랍니다. 제안드린 방법 외에도 문제의 원인을 파악하고 해결하기 위해 다양한 시도를 해보시는 것이 중요합니다. 만약 추가적인 정보가 필요하거나, 다른 질문이 있으시면 언제든지 질문해주세요. 제 답변이 정확하지 않을 수도 있으니, 여러 자료를 참고하시며 문제 해결에 접근하시길 바랍니다.


  • 이 답변이 도움이 되셨나요? 괜찮았다고 생각하신다면 아래 :heart:를 한 번 눌러주시길 부탁드려요!