[논문리뷰]Diffusion-Based Generative Speech Source Separation

Diffusion-Based Generative Speech Source Separation 논문리뷰 해보겠습니다.

슬라이드1

랩세미나 시간에 논문 “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.

슬라이드2

발표 목차는 위와 같이 Introduction, Background, Diffusion-Based Source Separation, Experiments, Conclusion 순이다. 논문의 목차를 따랐다. 그런데 APPENDIX는 이 글에 담지 않을 예정이다.

목차

  1. Introduction
  2. Background
  3. Diffusion-Based Source Separation
  4. Experiments
  5. Conclusion

 

1. Introduction

슬라이드3

Introduction 내용부터 보자.

슬라이드4 

저자들은 디퓨전 모델(내 영상에 잘나와 있다.) 기반 음성 음원 분리 방법을 제안하였다. 디퓨전 모델이라고 하면 SDE (Stochastic Differential Equation, 확률미분방정식, SDE에 대해서는 내 영상에 잘 나와 있다.)을 이용해서 생성모델을 학습하는 형태이다. 이 때 어떤 의도를 가지고 SDE를 구상하느냐가 중요하다. 그런데 저자들은 여러 음원들이 있을 때 그 음원들을 섞어서 Mixture 와 유사하게 만드는 SDE를 구상하였다. 그리고 음원분리에서 만날 수 있는 Permtuation ambiguity 를 해결하기 위해서 기존의 diffusion model 이 최적화 하던 loss에 무언가를 추가하여서 학습하였다. (그 무언가에 대해선 나중에 보자). 논문에 나와있지만 저자들은 이 시도가 디퓨전을 이용해서 음성 음원 분리에 적용한 첫 사례라고 믿고 있다. 음성 음원 분리 뿐만 아니라 음성향상 (Speech Enhancement)에도 적용해보았다고 한다.

2. Background

슬라이드5

이 논문을 이해하기 위한 배경지식에 대해 알아보도록 하자.

슬라이드6

이 논문에서 사용할 기호에 대해 정리해 보았다. 여기서 중요한점은 샘플 N인 음성신호를 길이 N짜리 벡터로 간주한다는 점이다. 그리고 Kronecker product를 도입하였는데 추후 논의에서 더 간단한 표현을 위해 도입한것으로 보인다.

슬라이드7

행렬 \mathbf{P} 는 source들의 모임 \mathbf{s} 에 곱하여 source들을 섞기 위해서 도입된것 같다. 두번째 -에서 확인할 수 있듯이  \mathbf{P} \mathbf{s}  =\bar{\mathbf{s}}이 나온다는 것을 확인할 수 있다.

3. Diffusion-Based Source Separation

슬라이드8

본격적으로 Diffusion-Based Source Separation 을 어떻게 하는지 보자.

슬라이드9

왼쪽에서 오른쪽으로 가는것이 forward process이고 오른쪽에서 왼쪽으로 가는것이 Backward 프로세스이다. 가로로 두줄이 있는데, 각각 source에 해당한다. 즉 두개의 소스가 어떻게 변하는지를 보여주고 있다. 저자는 forward process (왼쪽방향)을 \bar{\mathbf{P}} 을 이용해 정의했다. 이렇게 함으로써 forward process를 진행할 때 두개의 소스가 서로 섞이고 노이즈가 추가 되는 것을 표현했다. 실제로 그럴까? 그러면 왜그럴까?

슬라이드10

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가 되는지 명확하게 볼 수 있을 것이다.

슬라이드11

디퓨전 모델을 이용하려면 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} 로 표현할 수 있다.

슬라이드12

그럼 과연 이렇게 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는 아직 작은것 같지만)

슬라이드13

추론시에는 N( \bar{\mathbf{s}}, \mathbf{\Sigma}_T \mathbf{I}_KN) 로 부터 시작해 샘플링을 시작한다. Predictor는 Reverse Diffuse Sampling 을 사용하고 Corrector는 Langevin Dynamics를 사용한다.

슬라이드14

학습시 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 가 있다. 음원을 분리했는데 실제로는 어떤 음원인지 모르는 현상이다.

 

슬라이드15

이것을 해결하기 위해 일정확률로 두가지 로스중 선택한다. 첫번째 loss는 기존 score based diffusion model 에서 사용하던 loss이고 두번째 loss 는 \mathbf{x}_T 대신에 \bar {\mathbf{x}}_T 를 넣고 source들의 순서를 섞는 여러가지 경우중 가장작은 loss를 갖는 경우에만 최적화를 하는 방법이다.

4. Experiments

슬라이드16

이제 실험 결과에 대해 보겠다.

슬라이드17

음원 분리를 위해서 WSJ0_2mix 를 사용하였다. 당연하겠지만 training 과 test 사이의 화자는 겹치지 않는다. Libri2Mix set은 좀더 일반적인 상황을 test하기 위해 추론시에만 사용한다.음원 향상을 위해서는 VCTK 의 일부인 VoiceBank-Demand를 사용한다.




슬라이드18

네트워크 구성은 간단하다. STFT와 C라는 함수 NCSN++ 그리고 C의 inverse 그리고 ISTFT순이다.

슬라이드19

Inference 시 30번의 prediction step (reverse diffusion sampling)과 각 prediction 마다 1correction step 이 있었다. 그리고 다른 hyperparameter는 위에서 확인할 수 있다.

슬라이드20

 

Table1에서는 source separation 결과를 보여준다. SOTA 모델인 Conv-TasNet과 비교시 성능 차이가 난다. OVRL 빼고는 기존 SOTA 모델보다는 성능이 나오지 않는다. Fig. 3 이 흥미롭다. SI-SDR이 낮을때 결과를 보면 서로 다른 Source가 뒤바껴져 (permutation) 있는 모습을 보인다.  Table 2는 Enhancement에 적용한 결과이다. Conv-TasNet보다 성능이 여전히 낮으며 다른 모델과 비교시에는 더 나은 부분도 있고 아닌 부분도 있다.

5. Conclusion

슬라이드21 슬라이드22

 

이 논문에서 제시한 방법은 아마 디퓨전을 이용해서 음성 음원분리를 한 최초 시도일 것이다. 그러나, 기존의 SOTA 모델에는 미치지 못했다. 저자는 permutation ambiguity 를 완화하기 위하여 loss를 새로 만들어서 try 해봤다.

 

도움이 될 영상

Leave a Comment