🧬

오디오 AI의 공통 기반 기술 — Demucs, Mel-Band RoFormer, GPT-SoVITS가 공유하는 것들

STFT 스펙트로그램, Transformer 어텐션, 인코더-디코더, PyTorch — 오디오 AI의 공통 DNA

Demucs, Mel-Band RoFormer Karaoke, GPT-SoVITS — 이 세 모델을 분석하면서 공통 패턴이 보였다. 목적은 다르지만 뼈대가 같다.

공통점 1: STFT — 소리를 그림으로 바꾼다

STFT(Short-Time Fourier Transform)는 오디오 파형을 시간 × 주파수 2D 행렬로 변환한다. 이게 오디오 AI의 출발점이다.

파형(waveform)은 시간 축만 있다 — x축이 시간, y축이 진폭. 사람이 봐도 "어디가 드럼이고 어디가 보컬인지" 구분이 안 된다.

STFT를 걸면 스펙트로그램이 나온다 — x축이 시간, y축이 주파수, 값이 강도. 이러면 "440Hz 부근에 보컬이 있고, 100Hz 이하에 베이스가 있다"가 눈에 보인다.

import torch
import torchaudio

wav, sr = torchaudio.load("song.mp3")
# STFT: 파형 → 복소 스펙트로그램
spec = torch.stft(wav, n_fft=2048, hop_length=441, return_complex=True)
# spec.shape = [channels, freq_bins, time_frames]
# freq_bins = n_fft/2 + 1 = 1025 (0~22050Hz를 1025개 구간으로)
# time_frames = 오디오 길이 / hop_length

세 모델 전부 이 변환을 거친다:

모델 n_fft hop_length 추가 변환
Demucs 4096 + 시간 도메인 병렬 경로
Mel-Band RoFormer 2048 441 + 멜 밴드 60개로 재분해
GPT-SoVITS 멜 스펙트로그램 (지각적 스케일)

왜 다들 STFT를 쓰나? 주파수 분해 없이는 "이 소리가 어떤 악기/음성인지" 판단할 근거가 없다. CNN이 이미지의 엣지를 보듯, 오디오 모델은 주파수 패턴을 본다.

공통점 2: Transformer — 먼 거리의 관계를 잡는다

세 모델 전부 Transformer의 Self-Attention을 핵심에 둔다.

왜 CNN만으로는 안 되나? CNN의 수용 영역(receptive field)은 커널 크기에 제한된다. 3×3 커널이면 인접한 시간·주파수만 본다. 근데 오디오에서는:

  • 드럼 어택이 3초 전 패턴과 연결된다 (리듬)

  • 보컬의 하모닉스가 기본 주파수의 2배, 3배, 4배에 분포한다 (먼 주파수 간 관계)

  • 코러스가 30초 후에 반복된다

Self-Attention은 시퀀스 내 모든 위치 간 관계를 직접 계산한다. 거리 제한이 없다.

각 모델의 Transformer 사용 방식:

Demucs htdemucs:

  • Cross-Domain Transformer — 시간 도메인 경로와 주파수 도메인 경로가 서로 정보를 교환

  • Self-Attention + Cross-Attention

Mel-Band RoFormer:

  • 시간 축 Transformer → 주파수 축 Transformer 교대 실행 (6레이어)

  • RoPE(Rotary Position Embedding)로 위치 정보 인코딩

  • 각 밴드 내 시간 관계 + 각 시간 프레임 내 밴드 간 관계를 별도로 처리

GPT-SoVITS:

  • GPT — 자기회귀 Transformer. 이전 토큰에서 다음 토큰을 예측

  • 텍스트(음소) → 오디오 토큰 시퀀스 생성

공통점 3: 인코더-디코더 — 분해하고 복원한다

세 모델 전부 입력을 압축(인코딩)하고, 처리한 뒤, 원래 형태로 복원(디코딩)하는 구조다.

Demucs:

오디오 → [인코더] → 잠재 표현 → [Transformer] → [디코더] → 4개 스템
        (시간 경로: 1D CNN)    (Cross-Domain)  (1D CNN)
        (주파수 경로: 2D CNN)                   (2D CNN)

Mel-Band RoFormer:

STFT → [멜 밴드 분해 + 선형 레이어] → [시간/주파수 Transformer ×6] → [마스크 추정] → ISTFT
       인코딩                          처리                          디코딩

GPT-SoVITS:

참조 음성 → [인코더] → 화자 임베딩
텍스트 → [GPT] → 오디오 토큰 → [VITS 디코더] → 합성 음성

패턴이 같다: 고차원 입력 → 저차원 잠재 공간으로 압축 → 의미 있는 처리 → 원래 차원으로 복원.

공통점 4: PyTorch + GPU 가속 + 사전 훈련 모델

셋 다:

  • PyTorch로 구현 (TensorFlow 아님)

  • CUDA/MPS GPU 가속 지원 (CPU 폴백 가능하지만 느림)

  • HuggingFace/GitHub에서 사전 훈련된 체크포인트를 다운로드해서 추론만 함

  • 일반 사용자는 훈련 없이 바로 사용

이 구조 덕분에 pip install + 모델 다운로드 + 3줄 코드로 실행할 수 있다.

공통점 5: 오디오를 "분해"한다

방향은 다르지만 본질은 같다 — 복잡한 오디오 신호를 의미 있는 구성 요소로 분해한다.

모델 입력 분해 결과
Demucs 완성곡 보컬 / 드럼 / 베이스 / 기타
Mel-Band RoFormer 완성곡 리드 보컬 / 카라오케 반주
GPT-SoVITS 음성 음소 / 운율 / 화자 특성 → 재합성

Demucs와 RoFormer는 물리적 분해(소리 자체를 나눔), GPT-SoVITS는 의미적 분해(소리의 구성 요소를 이해하고 재조합).

공통점 6: 마스킹 vs 생성

분리 모델(Demucs, RoFormer)의 핵심 메커니즘은 마스킹이다:

원본 스펙트로그램 × 마스크 = 특정 소스의 스펙트로그램

모델이 학습하는 건 "어떤 주파수·시간 영역이 보컬인가"를 나타내는 마스크다. 소리를 새로 만드는 게 아니라, 원본에서 골라내는 것.

합성 모델(GPT-SoVITS)은 생성이다 — 텍스트에서 오디오 토큰을 하나씩 만들어낸다.

근데 둘 다 결국 "주파수 도메인에서 어떤 값을 출력하느냐"의 문제다. 마스크를 출력하든, 새 스펙트로그램을 출력하든, 작업 공간은 같다.

이 공통점을 알면 뭐가 좋은가

새로운 오디오 AI 모델이 나와도 구조를 바로 파악할 수 있다:

  1. 입력을 어떻게 표현하나? → STFT? 멜 스펙트로그램? raw waveform?
  2. 어텐션을 어디에 쓰나? → 시간 축? 주파수 축? 둘 다?
  3. 인코더-디코더 구조인가? → 뭘 압축하고 뭘 복원하나?
  4. 마스킹인가 생성인가? → 분리인가 합성인가?

이 4가지 질문으로 대부분의 오디오 AI 모델을 분류할 수 있다.

핵심 개념

1

STFT로 오디오 파형을 시간 × 주파수 스펙트로그램으로 변환 — 오디오 AI의 출발점

2

Transformer Self-Attention으로 장거리 시간·주파수 의존성 포착

3

인코더-디코더 구조로 고차원 입력을 잠재 공간으로 압축 → 처리 → 복원

4

분리 모델은 마스킹(원본×마스크), 합성 모델은 생성(새 토큰 출력)

사용 사례

새로운 오디오 AI 모델 이해 — STFT/Transformer/인코더-디코더/마스킹 4가지로 분류 오디오 AI 파이프라인 설계 — 공통 기반 위에 목적별 구성 요소 선택 모델 성능 비교 — 같은 기반 위에서 아키텍처 차이가 만드는 품질 차이 이해