Diffusion-Based Generative Speech Source Separation 논문리뷰 해보겠습니다.
랩세미나 시간에 논문 “Diffusion-Based Generative Speech Source Separation”에 대해 발표할 기회가 있어 발표내용을 정리해보려고 한다. 해당 논문은 네이버와 라인의 합작품이고, 연구실 선배이신 변재욱 박사님이 참여하신 논문이다.
논문정보:
R. Scheibler, Y. Ji, S. -W. Chung, J. Byun, S. Choe and M. -S. Choi, “Diffusion-Based Generative Speech Source Separation,” ICASSP 2023 – 2023 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP), Rhodes Island, Greece, 2023, pp. 1-5, doi: 10.1109/ICASSP49357.2023.10095310.
발표 목차는 위와 같이 Introduction, Background, Diffusion-Based Source Separation, Experiments, Conclusion 순이다. 논문의 목차를 따랐다. 그런데 APPENDIX는 이 글에 담지 않을 예정이다.
목차
1. Introduction
Introduction 내용부터 보자.
저자들은 디퓨전 모델(내 영상에 잘나와 있다.) 기반 음성 음원 분리 방법을 제안하였다. 디퓨전 모델이라고 하면 SDE (Stochastic Differential Equation, 확률미분방정식, SDE에 대해서는 내 영상에 잘 나와 있다.)을 이용해서 생성모델을 학습하는 형태이다. 이 때 어떤 의도를 가지고 SDE를 구상하느냐가 중요하다. 그런데 저자들은 여러 음원들이 있을 때 그 음원들을 섞어서 Mixture 와 유사하게 만드는 SDE를 구상하였다. 그리고 음원분리에서 만날 수 있는 Permtuation ambiguity 를 해결하기 위해서 기존의 diffusion model 이 최적화 하던 loss에 무언가를 추가하여서 학습하였다. (그 무언가에 대해선 나중에 보자). 논문에 나와있지만 저자들은 이 시도가 디퓨전을 이용해서 음성 음원 분리에 적용한 첫 사례라고 믿고 있다. 음성 음원 분리 뿐만 아니라 음성향상 (Speech Enhancement)에도 적용해보았다고 한다.
2. Background
이 논문을 이해하기 위한 배경지식에 대해 알아보도록 하자.
이 논문에서 사용할 기호에 대해 정리해 보았다. 여기서 중요한점은 샘플 N인 음성신호를 길이 N짜리 벡터로 간주한다는 점이다. 그리고 Kronecker product를 도입하였는데 추후 논의에서 더 간단한 표현을 위해 도입한것으로 보인다.
행렬 \mathbf{P} 는 source들의 모임 \mathbf{s} 에 곱하여 source들을 섞기 위해서 도입된것 같다. 두번째 -에서 확인할 수 있듯이 \mathbf{P} \mathbf{s} =\bar{\mathbf{s}}이 나온다는 것을 확인할 수 있다.
3. Diffusion-Based Source Separation
본격적으로 Diffusion-Based Source Separation 을 어떻게 하는지 보자.
왼쪽에서 오른쪽으로 가는것이 forward process이고 오른쪽에서 왼쪽으로 가는것이 Backward 프로세스이다. 가로로 두줄이 있는데, 각각 source에 해당한다. 즉 두개의 소스가 어떻게 변하는지를 보여주고 있다. 저자는 forward process (왼쪽방향)을 \bar{\mathbf{P}} 을 이용해 정의했다. 이렇게 함으로써 forward process를 진행할 때 두개의 소스가 서로 섞이고 노이즈가 추가 되는 것을 표현했다. 실제로 그럴까? 그러면 왜그럴까?
forward process는 위에 보이는 것처럼 정의했다. 맨위에 SDE는 \mathbf{x}_0 = \mathbf{s} 로부터 시작해 source를 어떻게 perturbation 시킬지 표현하고 있다. diffusion term 인 g(t) 는 디퓨전 기반 생성모델 논문에서 많이 볼 수 있는 VE-SDE(궁금하면 이 영상들 쭉 보자.)에서 쓰고 있던 term 이다. 이제 위의 식중 맨 마지막 식을 보자. 맨 마지막에서 보듯이 시간의 변화 dt 가 커질 수록 \mathbf{x} 는 source 에서 시작하여 mixture 인 \bar{\mathbf{s}} 로 변한다는 것을 확인할 수 있다. 그리고 그와 더불어 noise 도 추가되고 있다. 맨마지막 식은 SDE를 discretization 해서 시뮬레이션 한거니까 근사치일 뿐이고 실제로 더 분석을 하면, 저자가 제시한 forward process를 이용하면 source 가 mixture가 되는지 명확하게 볼 수 있을 것이다.
디퓨전 모델을 이용하려면 0에서 t까지의 transition probability denstiy 를 알아야 한다. 다행히도 제시한 forward process는 linear SDE이기 때문에 0에서 t까지의 transition probability density 는 gaussian probability denstify 를 갖는다. 그리고 이 가우시안 분포의 평균(mean) \mathbb{\mu}_t 과 공분산(covariance) \mathbf{\Sigma}_t 는 미분방정식을 풀어서 얻을 수 있다. 여기서 주목할점은 t에서의 mean \mathbf{\mu}_t 이다. t가 커질수록 mixture \bar{\mathbf{s}} 에 가까워 진다는 것을 알 수 있다. 즉 평균적으로 t가 커질수록 source \mathbf{x} 는 mixture와 비슷해 진다는 점이다. 여기서 Covariance와 관련있는 \mathbf{\Sigma}_t 에 대해서도 관찰해 보자. \mathbf{\Sigma}_t 가 K \times K 행렬임을 알 수 있다. \mathbf{x}_t는 K \times N 이므로 covraince 는 KN \times KN 행렬이어야 한다. 실제 Covariance 는 \mathbf{\Sigma}_t \mathbf{I}_{KN} 이므로 KN \times KN 행렬이다. 그런데 forward process를 관찰하면 K개의 source에 대해 같은 시간대에 있는 샘플들만 관계있고 한 샘플과 다른 시간대의 샘플은 관련이 없게끔 forward process가 구성되어있으므로, 한 샘플시점 내에서 K개의 source간의 covariance를 구하고 이것을 Kroneca product를 이용하여 \mathbf{x}_t 에 대한 covariance \mathbf{\Sigma}_t \mathbf{I}_{KN} 로 표현할 수 있다.
그럼 과연 이렇게 covariance와 mean 을 구했는데 목적 (모든 source를 mixture와 비슷하게 만들기)과 맞게 forward process를 설정하고 covariance와 mean이 나왔는지 궁금할 수 있다. 위의 Fig. 2 에서 맨 왼쪽은 t가 커질수록 mean 이 mixture와 비슷해지는 것을 알 수 잇고, 두번째 그림에선 mean 을 구성하는 지수행렬의 값이 모두 1/2 과 가까워 지는 것으로 보아 \mathbf{x}_0 를 잘 섞는 것으로 볼 수 있다. 세번째 그림은 t가 지남에 따라 source간의 correlation 본것인데 correlation 이 커지는 것으로 보아 각각의 source가 비슷해진다는 것으로 결론 내릴 수 있다. (0.4는 아직 작은것 같지만)
추론시에는 N( \bar{\mathbf{s}}, \mathbf{\Sigma}_T \mathbf{I}_KN) 로 부터 시작해 샘플링을 시작한다. Predictor는 Reverse Diffuse Sampling 을 사용하고 Corrector는 Langevin Dynamics를 사용한다.
학습시 Loss는 디퓨전 논문에서 사용한 Loss를 사용하려고 한다. 그런데 network \mathbf{q}_\theta ( \mathbf{x}, t, \mathbf{y}) 에 입력으로 \mathbf{y} 가 있는것을 볼 수 있다. 이것은 separation 을 위해 특별히 집어넣은것으로 보인다. 이전에 하던것처럼 하면 두가지 문제가 발생한다고 저자들은 주장한다. 첫번째로는 샘플링 시작할 때 \bar{\mathbf{s}} 를 평균으로 갖는 가우시안 분포로부터 시작하는데, 이것이 0에서 t까지의 transition probability denstity 인 \mathbf{\mu}_t 와 차이가 난다는 점이다. (사실 해결책으로 T 를 크게 잡아도 될것 같다.) 두번째 문제로는 Permutation ambiguity 가 있다. 음원을 분리했는데 실제로는 어떤 음원인지 모르는 현상이다.
이것을 해결하기 위해 일정확률로 두가지 로스중 선택한다. 첫번째 loss는 기존 score based diffusion model 에서 사용하던 loss이고 두번째 loss 는 \mathbf{x}_T 대신에 \bar {\mathbf{x}}_T 를 넣고 source들의 순서를 섞는 여러가지 경우중 가장작은 loss를 갖는 경우에만 최적화를 하는 방법이다.
4. Experiments
이제 실험 결과에 대해 보겠다.
음원 분리를 위해서 WSJ0_2mix 를 사용하였다. 당연하겠지만 training 과 test 사이의 화자는 겹치지 않는다. Libri2Mix set은 좀더 일반적인 상황을 test하기 위해 추론시에만 사용한다.음원 향상을 위해서는 VCTK 의 일부인 VoiceBank-Demand를 사용한다.
네트워크 구성은 간단하다. STFT와 C라는 함수 NCSN++ 그리고 C의 inverse 그리고 ISTFT순이다.
Inference 시 30번의 prediction step (reverse diffusion sampling)과 각 prediction 마다 1correction step 이 있었다. 그리고 다른 hyperparameter는 위에서 확인할 수 있다.
Table1에서는 source separation 결과를 보여준다. SOTA 모델인 Conv-TasNet과 비교시 성능 차이가 난다. OVRL 빼고는 기존 SOTA 모델보다는 성능이 나오지 않는다. Fig. 3 이 흥미롭다. SI-SDR이 낮을때 결과를 보면 서로 다른 Source가 뒤바껴져 (permutation) 있는 모습을 보인다. Table 2는 Enhancement에 적용한 결과이다. Conv-TasNet보다 성능이 여전히 낮으며 다른 모델과 비교시에는 더 나은 부분도 있고 아닌 부분도 있다.
5. Conclusion
이 논문에서 제시한 방법은 아마 디퓨전을 이용해서 음성 음원분리를 한 최초 시도일 것이다. 그러나, 기존의 SOTA 모델에는 미치지 못했다. 저자는 permutation ambiguity 를 완화하기 위하여 loss를 새로 만들어서 try 해봤다.
도움이 될 영상