프로젝트 개요
지능시스템 캡스톤 디자인 프로젝트에서는 RelGAN이라는 생성모델과 KoBERT라는 자연어 처리 모델, TTS 기술을 사용하여, 문장에 감정을 담아 실감나게 읽어주는 TTS 서비스를 제작하고자 진행하고 있습니다. 조금 더 자세히 설명드리자면 KoBERT 모델을 사용하여 텍스트 문장에서 감정을 추출하고, TTS를 통해 해당 텍스트를 Speech로 변환합니다. 마지막으로 변환한 Speech에 RelGAN을 사용하여 KoBERT에서 추출한 감정을 입혀 실감나는 TTS 서비스를 제작하고자 합니다. 이 중 저는 RelGAN을 통해 음성에 감정을 입히는 부분을 도맡아 하고 있습니다.
프로젝트 이슈
어제 batch_size가 1인 데이터를 가지고 출력하는 코드를 작성했었다. 그런데 출력물이 음성이 아닌 완전 노이즈만 나왔다.. Generater가 생성한 이후, 사이즈 맞추는 부분에서 데이터 손실이 많이 이뤄졌던 것 같다.
with torch.no_grad():
conversion = gan.G(img, attribute).detach()
gen[-1] = torch.cat([gen[-1], conversion.unsqueeze(1).cpu()], dim=1) #generate list에 쌓기
gen = torch.cat(gen)
print("generate size: ",gen.size())
gen = gen.view(gen.size(0)*gen.size(1)*gen.size(2), gen.size(3), gen.size(4))
print("사이즈 맞춤: ",gen.size())
이렇게 Generater 부분을 마지막 출력이 [2, 256, 256]이 되도록 수정하였고 그 결과 나름 나쁘지 않은 음성데이터가 만들어졌다.
음성에서 뭔가 감정이 변화하였다는 느낌이 없어서 많이 아쉬운 느낌이다.. 아무래도 가지고 있는 weight가 끝까지 학습된 버전은 아니다보니 학습에 좀 부족한 것 같다..
우선 이 19999.weight를 통해 음성을 출력해서 세트를 가지고 있고 Colab 추가 결제 후 epoch 40,000번을 학습시켜서 끝까지 학습된 weight파일을 가지는 것을 목표로 마지막까지 달려보려고 한다.
numpy에서 음성으로 변환하는 코드는 다음과 같다.
def npytomp4(npy, path):
spec = np.array(npy.squeeze(), dtype=np.float64)
# spec = spec.type(np.float64)
print("spec", spec.shape)
sr = 22050
res = librosa.feature.inverse.mel_to_audio(spec,
sr=sr,
n_fft=512,
hop_length=256,
win_length=None,
window='hann',
center=True,
pad_mode='reflect',
power=2.0, n_iter=256)
import soundfile as sf
sf.write(path, res, sr)
세밀한 파라미터 값 조정을 위해 librosa.feature.inverse.mel_to_audio()함수에 대해 알아보자
spec : np.ndarray를 입력값으로 받는 부분으로, audio파일로 바꿀 melSpectrogram을 입력해주면 된다.
sr : Samplig Rate을 뜻한다. 이 값은 Mel Spectrgram화 할 때 사용했던 sr을 사용하는데, 모른다면 대부분 16000 혹은 22050 둘 중 하나일 것이다. Mel spectogram화 할 때 따로 sampling rate을 설정하지 않았으면 기본값은 22050이라는 것을 알아두자
n_fft : 한 번 FFT를 할 만 큼의 sequence 길이
hop_length : STFT의 hop 길이로, 다른 말로는 window간의 거리를 뜻한다.
n_iter : Grittin-Lim의 반복 횟수이다. 여기서 Griffin-Lim이란, TTS에 사용되는 알고리즘으로, 스펙토그램을 오디오로 바꿔주는 후처리 알고리즘이다.
음성을 numpy로 변환할 때 각자 사용한 파라미터 값들이 다르기 때문에 음성이 제대로 출력되지 않을 수 있다. 그럴 경우에는 본인에게 맞는 sr, n_fft, hop_length등 파라미터 값들을 조정해가면서 음성이 출력될 수 있도록 하다보면, 깨끗한 음성을 얻을 수 있다!
'지능시스템 졸업 프로젝트' 카테고리의 다른 글
[지능시스템 캡스톤 디자인] 음성 합성 프로젝트 일지 ⑨ (0) | 2023.06.04 |
---|---|
[지능시스템 졸업프로젝트] 음성 합성 프로젝트 일지 ⑦ (0) | 2023.05.26 |
[지능시스템 졸업 프로젝트] 음성 합성 프로젝트 일지 ⑥ (0) | 2023.05.22 |
[지능시스템 졸업 프로젝트] 음성 합성 프로젝트 개요 ⑤ (0) | 2023.05.22 |
[지능시스템 캡스톤 디자인] 음성 합성 프로젝트 일지 ④ (0) | 2023.05.22 |