2024년 5월 29일 수요일

P-Flow TTS 논문 번역(3장)

논문 링크

코드: https://github.com/p0p4k/pflowtts_pytorch (비공식)


3. METHOD

본 연구의 목표는 고품질 및 빠른 non-autoregressive TTS 모델에서 제로샷 화자 적응을 위한 context 내 학습 기능을 제공하는 것이다. 참조 음성에서 화자 정보를 추출하는 화자 임베딩 접근법의 잠재적 병목 현상을 피하기 위해, 신경 코덱 언어 모델과 유사하게 참조 음성을 화자 적응을 위한 프롬프트로 직접 활용하는 접근 방식을 채택한다. 음성 프롬프트 방법 외에도 효율적인 샘플링을 위해 플로우 매칭 생성 모델을 사용한다. 본 방법의 개요는 3.1절에서 제공되며, 3.2절에서 디코더에 대한 자세한 설명을 제공하고, 나머지 세부 사항은 3.3절에서 설명한다.

3.1 P-Flow

P-Flow 훈련은 마스크드 오토인코더와 유사하다. <텍스트, 음성> 쌍 데이터를 주어, 음성의 멜-스펙트로그램을 x, 텍스트를 c로 표시한다. x에서 임의로 위치한 3초 세그먼트를 마스킹하는 $m^p$를 정의한다. 우리는 $x^p = (1−m^p)·x$로 정의한다. 훈련 중 P-Flow의 목표는 c와 일부 세그먼트 $x^p$가 주어진 상태에서 x를 재구성하는 것이다. 훈련 중에는 P-Flow가 $x^p$를 포함한 x 전체를 재구성할 것으로 예상하지만, 모델은 x 내의 $x^p$의 정확한 위치를 지정하지 않는다.

P-Flow는 c와 일부 세그먼트 $x^p$가 주어진 상태에서 음성의 조건부 확률 분포 $p(x|c, x^p)$을 모델링하는 법을 학습한다. 많은 제로샷 TTS 모델이 모든 정보를 고정 크기 벡터로 압축하는 것과 달리, 우리는 텍스트 c와 음성 프롬프트 $x^p$를 받아 화자 조건 텍스트 표현을 생성하는 텍스트 인코더 $f_{enc}$를 도입한다. 우리는 이 텍스트 인코더를 음성 프롬프트 텍스트 인코더라 부른다. 이 텍스트 인코더의 출력은 플로우 매칭 생성 모델을 사용하여 멜-스펙트로그램으로 매핑되고, 마지막으로 오디오 보코더를 사용하여 waveform으로 변환된다.

음성 프롬프트 텍스트 인코더:

그림 1a와 같이, 우리는 텍스트 입력 c와 함께 음성 프롬프트로써 임의 세그먼트 $x^p$의 멜-스펙트로그램을 입력한다. 그런 다음 둘 다 동일한 차원으로 투영하여 텍스트 인코더의 입력으로 사용한다. 음성 프롬프트 텍스트 인코더의 역할은 프롬프트 $x^p$에서 추출된 화자 정보를 사용하여 화자 조건 텍스트 표현 $h_c = f_{enc}(x^p, c)$를 생성하는 것이다. 대규모 코덱 언어 모델과 유사하게, 우리는 임의의 텍스트 위치에서 음성 프롬프트에 어텐션할 수 있는 non-autoregressive 트랜스포머 구조를 사용한다.

Figure 1: The overall diagram of P-Flow. P-Flow is a model composed of a speech-prompted text encoder, which outputs a representation containing speaker information from the speech prompt, and a flow matching decoder generates high-quality speech significantly faster than real-time.

음성 프롬프트 텍스트 인코더가 음성 프롬프트에서 화자 정보를 효과적으로 추출하도록 훈련하기 위해, 텍스트 인코더 표현과 멜-스펙트로그램 사이의 거리를 최소화하는 인코더 손실을 사용한다. 이는 단일 화자 TTS 모델의 샘플링 단계를 줄이기 위한 Grad-TTS [30]에서의 원래 목적 외에도, 생성된 텍스트 표현에 화자 관련 세부 사항을 포함하도록 인코더를 장려한다.

음성 프롬프트된 인코더 출력 $h_c$와 멜-스펙트로그램 x의 길이가 다르기 때문에, Glow-TTS [21]에서 제안된 monotonic alignment search (MAS) 알고리즘을 사용하여 텍스트 인코더 출력을 멜-스펙트로그램과 정렬한다. MAS를 적용하여 텍스트 인코더 출력과 멜-스펙트로그램 사이의 전체 L2 거리를 최소화하는 정렬 $A = MAS(h_c, x)$을 도출한다. 정렬 A를 기반으로 각 텍스트 토큰의 지속 시간 d를 결정하고 텍스트 토큰의 지속 시간에 따라 인코더 출력을 복제하여 $h_c$를 확장한다. 이 정렬 프로세스는 멜-스펙트로그램 x와 정렬된 텍스트 인코더 출력 h를 생성한다. 비교적 간단한 재구성 손실은 $L_{enc} = MSE(h, x)$로 작성된다.

실제 훈련에서는 모델이 훈련 중 x 내에서 $x^p$의 정확한 위치를 제공받지 않더라도 여전히 $x^p$의 사소한 복사-붙여넣기(collapse to trivial copy-pasting)로 수렴한다. 이를 피하기 위해, 우리는 $x^p$에 해당하는 세그먼트의 재구성 손실을 단순히 마스킹한다. 그럼에도 불구하고 최종 모델은 여전히 연속적인 멜-스펙트로그램 시퀀스를 추론할 수 있다. 마스크된 인코더 손실 $L^p_{enc}$는 멜-스펙트로그램 x의 무작위 세그먼트 xp에 대해 $m^p$를 사용하여 다음과 같이 정의된다:

$L^p_{enc} = MSE(h · m^p, x · m^p)$

이 손실을 최소화함으로써, 인코더는 주어진 음성 x와 유사한 정렬된 출력을 생성하기 위해 음성 프롬프트에서 가능한 한 많은 화자 정보를 추출하도록 훈련된다. 이는 화자 적응을 위한 context 내 학습 기능을 향상시킨다.

플로우 매칭 디코더:

고품질 및 빠른 제로샷 TTS를 수행하기 위해, 우리는 플로우 매칭 생성 모델을 디코더로 사용하여 $p(x|h)$의 조건부 확률 분포를 모델링한다. 플로우 매칭 디코더는 연속 정규화 플로우(CNF)의 조건부 벡터 필드 $v_t(·|h)$를 모델링하여 표준 정규 분포에서 데이터 분포로의 조건부 매핑을 나타낸다. 디코더는 $L^p_{cfm}$이라는 플로우 매칭 손실을 사용하여 무작위 세그먼트에 대한 마스크를 적용하여 훈련된다. 자세한 내용은 3.2절에서 제공된다.

지속시간(duration) 예측기:

MAS가 사용되지 않는 추론 중 텍스트-토큰 지속 시간을 재현하기 위해, 우리는 [21]과 유사한 방식으로 훈련된 지속 시간 예측기를 사용한다. 지속 시간 예측기는 텍스트 인코더의 숨겨진 표현을 추가 화자 조건 없이 입력으로 사용하며, 이 표현은 이미 화자 정보를 포함하고 있다. 이는 텍스트 인코더 훈련에 영향을 미치지 않기 위해 분리된 입력을 사용하여 모델의 나머지 부분과 동시에 훈련된다. 지속 시간 예측기는 각 텍스트 토큰의 로그-스케일 지속 시간 log d̂를 추정하며, 지속 시간 예측기의 훈련 목표 $L_{dur}$는 훈련 중 MAS를 통해 얻은 로그-스케일 지속 시간 log d와의 평균 제곱 오차를 최소화하는 것이다.

P-Flow의 전체 훈련 손실은 다음과 같다:

$L = L^p_{enc} + L^p_{cfm} + L_{dur}$

제로샷 추론에서는 텍스트 인코더에 입력으로 사용할 참조 샘플에서 무작위 청크를 사용하며, 원하는 텍스트를 입력으로 사용하여 $h_c$를 얻는다. 우리는 음성 프롬프트에 해당하는 전사를 제공하지 않는다. 그런 다음, 지속 시간 예측기에서 예측된 d̂를 사용하여 $h_c$를 확장하고, 플로우 매칭 디코더를 사용하여 개인화된 음성을 생성한다.

3.2 플로우 매칭 디코더

플로우 매칭을 사용하여 멜-스펙트로그램 디코더 작업의 조건부 분포 $p(x|h)$을 모델링한다. 먼저 플로우 매칭의 개요를 제공한 후 샘플링 절차와 추가적인 질적 개선을 위한 가이드 관련 기술을 설명한다.

Figure 2: Conditional Flow Matching [23] can be supervised with linear conditional trajectories during training when mapping between the complex pdata and the sampling Gaussian, leading to simpler marginal trajectories during inference. Simpler trajectories require fewer function evaluations.


플로우 매칭 개요:

플로우 매칭 [23, 35, 24]은 데이터 밀도 $p_1(x)$와 더 간단한 샘플링 밀도 $p_0(x)$ (기본적으로 표준 정규 분포)를 연결하는 시간 종속 확률 경로에 맞추는 방법이다. 이는 연속 정규화 플로우와 밀접한 관련이 있지만, 확산 및 스코어 매칭 모델 [13, 16, 34]의 일반적인 설정과 유사한 방식으로 시뮬레이션 없는 효율적인 훈련이 가능하다. 우리는 [23]에서 명시된 조건부 플로우 매칭을 채택하여, 소스와 타겟 분포 간의 더 간단하고 종종 직선적인 궤적을 권장한다. 더 간단한 궤적은 추가 증류 없이 테스트 시 샘플링 단계를 줄이는 데 유리하다. 간단히 하기 위해, 이 개요에서는 조건부 변수 h를 무시한다.

Lipman et al. [23]을 따라, 우리는 플로우 $ϕ : [0, 1] × \mathbb{R}^d → \mathbb{R}^d$를 다음 ODE를 사용하여 두 밀도 함수 간의 매핑으로 정의한다:

$\frac{d}{dt} ϕ_t(x) = v_t(ϕ_t(x)); ϕ_0(x) = x$

여기서 $v_t(x)$는 시간 종속 벡터 필드로, 시간에 따른 확률 흐름의 궤적을 지정한다. $v_t(x)$는 또한 우리의 학습 가능한 구성 요소로, 앞으로는 $v_t(ϕ(x); θ)$로 표시한다. 분포에서 샘플링하려면, $t = 0$에서 샘플링 분포 $p_0$에서 초기 조건을 샘플링하고, Eq. (2)에서 ODE를 해결한다. 특히, [23]의 공식은 더 직선적인 궤적을 권장하여, 10개의 오일러 단계로 ODE 해를 저렴하게 근사할 수 있다.

실제로 $ϕ_t(x)$의 주변 흐름을 결정하는 것은 어렵다. 따라서 Lipman은 이를 다음과 같이 여러 조건부 흐름 $ϕ_t,x_1(x)$을 통해 주변화(marginalizing)하는 방식으로 공식화한다:

$ϕ_t,x_1(x) = σ_t(x_1)x + μ_t(x_1)$

여기서 $σ_t(x_1)$와 $μ_t(x_1)$는 시간 조건부 아핀 변환으로, 가우시안 분포 $p_1$과 $p_0$ 간의 변환을 매개변수화한다. 마지막으로, $q(x_1)$를 우리의 데이터에 대한 실제지만 아마도 비가우시안 분포로 정의한다. 우리는 $σ_{min}$(경험적으로 0.01로 설정됨)으로 약간의 백색 잡음을 추가하여 개별 샘플을 섭동하여 q의 혼합 가우시안 근사치로 $p_1$을 정의한다. 우리는 SDE 공식에서의 확률성에서 오는 복잡함 없이 궤적을 지정할 수 있다.

이를 활용하여, Lipman et al.은 간단한 선형 궤적을 권장하며, $ϕ_t$를 위한 다음 매개변수를 도출한다:

$μ_t(x) = tx_1, σ_t(x) = 1 - (1 - σ_{min})t$

벡터 필드를 훈련하는 것은 조건부 플로우 매칭 목표 함수 LCFM (θ)를 사용하여 수행된다:

$L_{CFM} (θ) = \mathbb{E}_{t∼U [0,1],x_1∼q(x_1),x_0∼p(x_0)} ∥v_t(ϕ_t,x_1 (x_0); θ) - \frac{d}{dt} ϕ_t,x_1 (x_0)∥^2$

Eq. (4)를 Eq. (3) 및 (5)에 대입하면 최종 CFM 목표가 도출된다:

$L_{CFM} (θ) = \mathbb{E}{t,q(x_1),p(x_0)} ∥v_t(ϕ_t,x_1(x_0); θ) - (x_1 - (1 - σ{min})x_0)∥^2$

 

마스크된 플로우 매칭 손실:

플로우 매칭 디코더는 텍스트 인코더의 출력 h로 제공된 하위 세그먼트 $x^p ∈ x$에 의해 제공되므로, $x^p$에 해당하는 출력 부분에 대한 손실을 다시 마스킹해야 할 필요가 있었다. 일반적인 $v_t(x_t; θ)$는 $v̂_θ(x_t, h, t)$로 매개변수화되어 조건부를 설명한다. 여기서 t는 연속적인 사인파 임베딩으로 표현된다. 이를 통해 마스크된 CFM 목표가 도출된다:

$L^p_{CFM} (θ) = \mathbb{E}{t,q(x_1),p(x_0)} ∥m^p · (v̂_θ(ϕ_t,x_1(x_0), h, t) - (x_1 - (1 - σ{min})x_0))∥^2$

 

샘플링:

조건부 플로우 매칭 손실은 조건부 벡터 필드를 주변화하여 샘플링 중에 사용되는 주변 벡터 필드를 달성한다. 선형적으로 보간된 조건부 궤적은 결과적으로 동일한 직선성을 보장하지는 않지만, 우리는 여전히 꽤 유사한 것을 얻는다. 본 연구에서는 첫 번째 오일러 방법을 사용하여 10단계로 ODE를 해결하는 것이 충분히 간단한 궤적을 제공하는 것을 발견했다. N 오일러 단계로 샘플링은 다음 재귀 관계를 사용하여 수행된다:

$x_0 ∼ N (0, I); x_{t+ \frac{1}{N}} = x_t + \frac{1}{N} v̂_θ(x_t, h, t)$

 

가이디드 샘플링:

발음 명확성을 더욱 향상시키기 위해, classifier-free guidance (CFG) 방법 [14]에서의 기술을 적용한다. 관련 연구에서, GLIDE [29]는 빈 텍스트 시퀀스에 대한 궤적을 빼는 방식으로 텍스트 조건부 샘플링 궤적을 증폭시킨다. 우리는 유사한 공식을 사용하여, 평균 특징 벡터에서 궤적을 멀리 유도한다. γ를 가이드 스케일로 한다. 우리의 가이드 증폭된 오일러 공식은 다음과 같다:

$x_{t+ \frac{1}{N}} = x_t + \frac{1}{N} (v̂_θ(x_t, h, t) + γ(v̂_θ(x_t, h, t) - v̂_θ(x_t, h̄, t))$

 

3.3 모델 세부 사항

고수준 모델 아키텍처는 그림 1에 나와 있다. 본 모델은 세 가지 주요 구성 요소로 구성된다: 프롬프트 기반 텍스트 인코더, 추론 중 음소 지속 시간을 복원하기 위한 지속 시간 예측기, 및 Wavenet 기반 플로우 매칭 디코더. 실험에서는 텍스트 인코더가 단지 3백만 개 파라미터의 소형 트랜스포머 구조를 포함하더라도 강력한 제로샷 결과를 보인다. 각 구성 요소에 대한 추가 아키텍처 세부 사항은 섹션 B에 제공된다.


주요 인용(우선순위 순으로)

[23] Lipman, Y., Chen, R. T. Q., Ben-Hamu, H., Nickel, M., & Le, M. (2022). Flow Matching for Generative Modeling. arXiv preprint arXiv:2210.02747.

[37] Wang, C., Chen, S., Wu, Y., Zhang, Z., Zhou, L., Liu, S., Chen, Z., Liu, Y., Wang, H., Li, J., et al. (2023). Neural Codec Language Models are Zero-Shot Text to Speech Synthesizers. arXiv preprint arXiv:2301.02111.

[24] Liu, X., Gong, C., & Liu, Q. (2022). Flow Straight and Fast: Learning to Generate and Transfer Data with Rectified Flow. arXiv preprint arXiv:2209.03003.


2024년 5월 28일 화요일

Google Colab에 생긴 프롬프트 기반 코드 생성

어느샌가 Colab에도 프롬프트 입력란이 생겼길래 써봤음.
프롬프트만 잘 쓰면 간단한 코드는 거의 의도된대로 만들어준다.
그냥 생각없이 써봤는데 생성 결과가 잘 나와서 놀랐음.
라이선스 체크까지 해주는 건 아니므로 업무적 사용 시 주의 필요

[원본 예제]



[AI 생성코드]




2024년 5월 27일 월요일

오늘은 메모리얼 데이(미국장 휴장일)

2024년 5월 27일은 메모리얼 데이로 미국증시 휴장


남북전쟁에서 전사한 군인들을 추모하는 날이었다가 제 1차 세계대전 이후로 전쟁 및 군사작전에서 사망한 모든 군인들을 기리는 날로 바뀜

매년 5월 마지막주 월요일로 지정

우리나라의 현충일하고 시기가 비슷하다.


휴장스인줄 모르고 설레발쳤다. 지난번 대통령의 날처럼 주요 일정은 미리미리 알아두자.

2024년 5월 21일 화요일

[EA FC24] 토츠 쇠붕이 SBC 출시!

 

Laliga TOTS Sørloth 완료

EA의 마지막 선물 쇠붕이 토츠버전 카드가 드디어 나왔다.
엊그제 레알전에서 4골을 몰아친 미친 득점력
게임에서도 무서울 것 같다.
뚝배기에 컴포저99에 Mostly 렝시에 금특에 스탯만 봐도 막강해 보임

재료값: 대략 6만코인대

83, 86짜리 깨면 되니까 대충 가지고있는걸로 금방 연성함

자야 해서 아직 못돌려봄

올시즌 득점왕까지 했는데 안내주면 섭하지..

인폼만 해도 꽤 좋았는데 기대가 됩니다.

2024년 5월 17일 금요일

glot.io 브라우저 기반 간단한 무료 온라인 코딩 도구

glot.io

https://glot.io/new/c


C언어 외에도 다양한 언어를 지원한다. 간만에 가보니 종류가 더 늘은 것 같다. 요새 핫한 Dart, Rust, Typescript 등도 있음.




편집기와 실행 화면. 그자리에서 컴파일된다. 입력 데이터도 별도로 지정가능


저장 기능(공유를 위한 public, 혼자 보기 위한 private 둘 다 지원)도 있고, 간단한 테스트나 공부하는 용도로 좋음





2024년 5월 10일 금요일

유로 트럭용 미친 스티어링 휠 컨트롤러 등장(HORI)

유튜브에서 유로트럭 시뮬레이터 영상 한 번 봤다고 갑자기 메인에 이런 게 뜸




호리에서 나온 드라이빙용 포스 피드백 트럭 컨트롤 시스템

깜빡이 넣는 펑션 스틱까지 있는 것이 놀랍다. 기어봉 앞에있는 대형트럭용 버튼들도.


Windows PC용이고 유로트럭2나 아메리칸트럭 시리즈에 대응해서 나온듯




2024년 5월 7일 화요일

분류성능평가지표 - F1 Score와 정확도, 정밀도, 재현도

F1 Score: 정밀도(Precision)와 재현도(Recall)의 조화평균

                  2 * Precision * Recall
F1 Score = ----------------------------
                    Precision + Recall


정확도(Accuracy): 전체 데이터 중 모델이 올바르게 분류한(TP+TN) 비율

          TP + TN
  ----------------------
  TP + FN + FP + TN


정밀도(Precision): Positive로 분류된 예측값(TP+FP) 중 실제로 맞춘 비율(TP)

      TP
  ---------
  TP + FP


재현도(Recall): Sensitivity라고도 불린다. 실제값 Positive 중 예측값이 Positive로 분류된 비율

      TP
  ---------
  TP + FN


2024년 5월 4일 토요일

축구 잡담 - 지로나 FC

라리가 34R 경기를 시청 중 이제야 알게 된 나만 모르고 있던 사실.


해설자 설명에 지로나도 카탈루냐 지역이라고 한다.

(바르샤에서 1시간~1시간 반 정도의 거리)


역시 나는 축알못이었음.


마침 지로나에서 뛰던 백승호의 EFL 챔피언십 데뷔골도 좀전에 터짐 ㅅㅅㅅ


아무튼 올시즌 지로나의 막강한 화력이 인상적이다.


ATM도 아니고 비야레알도 아님


2024년 5월 3일 금요일

C언어의 memcpy() src와 dst 순서가 헷갈린다면

메모리를 복사하는 memcpy()함수의 인자 순서는
memcpy(dst, src, size) 인데

아직도 종종 생각없이 쓰다가 혹시 실수했나 싶어서 레퍼런스를 찾아본다.
다행히도 여태 실수로 순서를 뒤집은 적은 없음.



혼동된다면 우변에서 좌변으로 값을 보내는 변수대입 시 기본문법으로 기억해야겠다.