대외활동/포스텍 인공지능연구원 연구인턴 & 연장

[ 포스텍 인공지능연구원 연구인턴 ] Acoustic Feature, MelGAN 논문 정리 및 코드 실습

hae-koos 2022. 6. 2. 17:25
728x90
반응형

Acoustic Feature

  • Audio File Structure
    • Channel : Mono(1) / Stereo(2)
    • Length : 60s, 1m, 1h …
    • Sampling Rate : 1초당 샘플의 빈도수
                                  (44.1kHz - 1초에 샘플 수가 44,100개 들어있다.)
    • Bit Depth : 음의 강도를 얼마나 세분화하여 표현할 것인지
                         (24 bit - 2^24개의 높낮이를 표현할 수 있다.)
    • Bit Rate : 오디오로 전송되는 데이터의 양
                       (CHANNEL # x SAMPLING RATE x BIT DEPTH)

 

import matplotlib.pyplot as plt
from scipy.io import wavfile as wav
fs, data = wav.read('./3sec.wav')

print(fs)              # 22050
print(len(data))       # 66150
print(data.shape)      # (66150,)

data[:30]              
# array([ 3,  7,  0,  5,  7,  4,  3,  7,  5,  5,  2,  3, -1, 
# 0,  4,  2, -2, -1,  1,  1,  1, -2, -2,  1,  2, -4, -4,  0, -2, -3], 
# dtype=int16)
# 보통 학습을 위해 0과 1 사이의 값으로 정규화하여 사용한다.

plt.plot(data)

 

 

→ 3초 길이의 음성 & 22,050 Sampling Rate = 66,150개 샘플 존재

 

Acoustic Feature를 어떻게 뽑을까 ?

 

 

Sliding Window 방식으로 시그널을 잘라 Fast Fourier Transform 활용하여
Acoustic Feature 확인 Fourier Transform이란,
신호를 다양한 주파수를 갖는 주기함수들의 합으로 분해하여 표현하는 것으로
Time Domain의 신호를 Frequency Domain의 신호로 바꿔 확인할 수 있게 만드는 연산이다.

퓨리에 변환을 수행하면 시간 정보를 잃게 되는데 이를 보존하기 위해
상기 방식처럼 FFT를 적용하고 시간축을 따라 스펙트럼을 나열하면
시간 변화에 따른 스펙트럼이 나오고 이를 스펙트로그램이라 정의한다.

 

 

  • 고전 음성 분석법 : WORLD Vocoder → 음성을 세 가지 component로 분석한다
    Pitch Contour (f0) / Harmonic Spectral Envelope (Sp) / Aperiodic Spectral Envelope (Ap)
    • f0 : 음성의 주 높낮이 윤곽 (time-domain analysis)
    • Sp : 주기가 있는 피크의 윤곽 (freq-domain analysis)
    • Ap : 주기가 없는 피크의 윤곽 (freq-domain analysis)
import numpy as np
from scipy.io import wavfile as wav
fs, data = wav.read('./3sec.wav')
data = data.astype(np.float64)

_f0, t = pw.dio(data, fs) # raw pitch extractor
f0 = pw.stonemask(data, _f0, t, fs) # pitch refinement
sp = pw.cheaptrick(data, f0, t, fs) # extract smoothed spectrogram
ap = pw.d4c(data, f0, t, fs) # extract aperiodicity

y = pw.synthesize(f0, sp, ap, fs) # synthesize an utterance

wav.write(rate=22050, data=y, filename='3sec_synthesized.wav')

 

  • Mel Scale : 주파수를 인간이 인지하는 단계로 나타낸 것
    사람의 청각기관은 저음 주파수 변화에는 민감하나, 고음 주파수 변화에는 둔감하다.
    이러한 특징을 반영한 scaling 방법으로 육안으로 볼 때는 큰 차이가 없어도
    음성 합성 시에는 Mel Scale 적용 여부가 최종 결과물에 영향을 준다.
  • MFCC (Mel-Frequency Cepstral Coefficient)
    음성데이터를 특징 벡터화 시켜주는 알고리즘이다.

 

  • Mel Spectrogram에 로그를 씌우고 역 퓨리에 변환
    → Cepstrum 로그를 씌우는 것이 음성의 공명 주파수를 분석함에 도움을 준다고 한다..

Acoustic Feature 관련된 내용 정리는 끝냈고, 본격적으로 논문 관련 내용으로 넘어가자.

MelGAN

MelGAN은 Mel Spectrogram을 인풋으로 하여 Waveform을 생성하는 GAN 기반 Vocoder다.

  1. 이전 신호처리 기반 Vocoder보다 성능이 좋다.
  2. 이전 뉴럴넷 기반 Vocoder보다 파라미터가 적다.
  3. 성능도 개선되었고, 추론 속도까지 빠르다.

 

 

Mel-spectrogram은 실제 신호보다 resolution이 낮아서 Upsampling 과정이 필요하다.
(Mel_bin이 보통 80개정도 & Freq 범위 자체도 좁음)
이를 위해, Transposed Convolution이 활용되었고,

Dilated Convolution을 활용함으로써 적은 파라미터로도

넓은 시야를 갖는 레이어를 형성했다.

 

 

Discriminator 파트나 Loss는 일반적인 GAN의 구조를 따랐다.

추후 다룰 CycleGAN을 활용한 음성 합성에도 결국

Vocoder는 MelGAN 기반의 Vocoder를 사용한다. 즉, 차별점은 Conversion 파트에 있다.

그 방법론에 대한 고안이 해당 모델 개선의 포인트다.

728x90
반응형