14. diff - svc에 대하여
Singing Voice Conversion (SVC)은 노래의 내용과 멜로디는 그대로 유지하면서, 다른 가수의 목소리로 노래를 변환하는 기술입니다. 최근 SVC 모델은 content encoder를 통해 소스 음성에서 추출한 content feature와 conversion model을 사용하여 목소리 변환을 수행합니다. 또한, ASR (자동 음성 인식) 모델을 content encoder로 활용하여 각각을 개별적으로 학습시키는 경우도 있습니다.
Conversion model은 GAN이나 회귀 모델을 활용하며, GAN을 사용하는 경우 파형을 생성하고, 회귀 모델을 사용하는 경우 mel spectrogram과 같은 spectral feature로 변환한 후 파형을 생성합니다. 이 논문에서는 diffusion model을 conversion model로 채택하였으며, 이미지 생성 및 오디오 파형 생성 분야에서 최신 기술로 알려져 있습니다. DiffSVC는 diffusion model을 기반으로 하며, ASR acoustic model을 통해 노래에서 추출한 phonetic posteriorgram을 활용합니다.
Diffusion model은 content, 멜로디, loudness의 feature를 조건으로 활용하여 Gaussian noise를 점진적으로 mel spectrogram으로 변환합니다. DiffSVC는 기존 SVC 시스템에 비해 목소리의 자연스러움과 유사성에서 우수한 변환 성능을 보입니다.
학습 알고리즘은 복잡해서 논문 속 자료를 첨부하면 다음과 같습니다.
diff-svc의 모델 구조는 아래와 같습니다.
ASR로 추출한 PPG 는 FC layer로 이루어진 PPG prenet에 입력됩니다. 멜로디는 로그 스케일의 기본 주파수 contour (Log-F0)로 표현되고 Loudness feature은 파워 스펙트럼의 A-weighting 메커니즘으로 계산됩니다. 이것을 256개의 bin으로 양자화한 후 각각 melody embedding lookup table과 loudness embedding lookup table을 통과시키게 됩니다. PPG prenet을 통과한 PPG x와 embedding lookup table을 각각 통과한 Log-F0 f0와 loudness l는 더해져 conditioner e가 됩니다. e는 diffusion decoder의 추가 입력으로 주어지는 token으로 사용됩니다.
mel spectrogram을 Conv1x1 와 ReLU에 통과시킵니다. 그런 다음 step encoder의 output을 더하고 residual block에 입력으로 넣습니다. Conditioner 는 각 residual block의 Conv1x1 layer에 입력으로 넣어준 후 그 output을 mel spectrogram feature와 step encoder feature를 더한 값에 더해줍니다.
그런 다음 feature map에 Wavenet 논문에서 소개된 gated mechanism를 적용합니다. 그 결과로 각 residual block은 skip output 1개와 다음 residual block에 입력으로 사용할 output 1개가 나오는데 개의 skip output을 모두 더한 다음 Conv1x1 layer, ReLU, Conv1x1 layer를 순서대로 통과시키면 noise가 예측됩니다.
논문에서 합성된 노래의 자연스러움과 대상 목소리와의 유사성을 평가하였습니다
두 음성의 유사성을 나타내는 지표인 mel-cepstrum distortion (MCD)와 F0 Pearson correlation (FPC)를 평가했을때 다음과 같은 결과가 나왔습니다.
참고 문헌: Liu, S., Cao, Y., Su, D., & Meng, H. (2021, December). Diffsvc: A diffusion probabilistic model for singing voice conversion. In 2021 IEEE Automatic Speech Recognition and Understanding Workshop (ASRU) (pp. 741-748). IEEE.
https://kimjy99.github.io/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0/diffsvc/