torchaudio에서 transformations을 지원한다. 지금까지는 다 Librosa나 numpy 라이브러리를 사용해서 변환하였는데, torch에서도 제공해주는 것을 확인하였다.
또한 torchaudio는 leverages Pytorch's GPU Support이기 때문에 GPU를 사용하여 연산을 진행할 수 있다. (CPU에서 처리하는 것 보다 속도가 더 빠르다)
** torchaudio를 사용할때 꼭 soundfile 과 sox의 의존성을 잘 확인하자https://pytorch.org/audio/stable/backend.html#backend
torchaudio에서 제공해주는 transformation들은 아래와 같다.
- Resample
- Spectrogram
- GriffinLim
- ComputeDeltas
- ComplexNorm
- MelScale
- AmplitudeToDB
- MFCC
- MelSpectrogram
- MuLawEncoding
- MuLawDecoding
- TimeStretch
- FrequencyMasking
- TimeMasking
Resample : Resample waveform to a different sample rate
음원의 sample rate를 변경해주는 기능이다. 만약 내가 가지고 있는 음원이 22050인데 이것을 16000으로 다운샘플링 하고 싶을때 사용한다. 보통 음성인식이나 음성 합성에서 학습데이터로 음원의 sample rate를 16000으로 사용하는 경우가 많다. 그렇기 때문에 내가 가지고 있는 음원의 sample rate를 변경할때 이 기능을 사용하면 된다.
Spectrogram : Create a spectrogram from a waveform
Spectrogram은 파형(waveform : x축은 Time, y축은 Amplitude)과 스펙트럼(spectrum : x축은 Frequency, y축은 Amplitude)의 특징이 결합된 형태이다. x축은 시간(Time)을 나타내고 y축은 주파수(Frequency)를 나타낸다. z축은 진폭(Amplitude)을 나타낸다. 즉 음향신호를 주파수, 진폭(강도), 시간으로 분석하여 얻어진 그림이다.
** waveform : 파형 / 소리가 일으키는 파동 / 음파 (sound wave)
** Spectrum : 음향신호의 주파수, 진폭을 분석하여 보여줌 / 진폭, 주파수 도면으로써 복합파를 분석하여 그 복합파가 어떠한 단순파들의 합으로 이루어진것인지를 보여주는 방법중에 하나
** dB : 파형이 전달되는 힘 / 값이 클수록 더 큰 소리
** Fourier Transform : 음성 등 파형을 기본 주파수 (기본음)와 그 정배수의 각 주파수 (각 배음)으로 분해하는 것을 의미 / 즉 어떠한 파 중에서 어느 주파수 성분이 얼만큼 포함되어 있는지를 계산하는 방법 / 모든 파형은 푸리에 변환을 통해 기본파와 고주파의 합 (이산 푸리의 변환 : Discrete Fourier Transform; DFT, 고속 푸리의 변환 : Fast Fourier Transforml FFT)
MelSpectrogram : Create MEL Spectrogram from the power/amplitude scale to the decibel scale
spectrogram에 mel-filter를 적용해서 얻어진 값을 의미한다. 이것은 저음의 주파수 변화에 민감하고 고음 영역에서는 주파수의 변화가 덜 민감한 특징을 가지고 있어 사용자의 청각기관을 반영하고 있다고 할 수 있다. 그리고 spectrogram보다 크기가 작기도 하다.
** mel scale : mel 이라는 말 자체는 melody에서 나왔다. 사람의 음을 인지하는 threshold를 반영한 scale 변환 함수이다.
** eml filterbank : mel scale에서 linear한 구간을 N개로 나눈 것을 의미한다.
MFCC : Create the Mel-frequency cepstrum coefficients from a waveform
MFCC는 Log mel spectrogram에 Inverse Fourier Transform을 적용하여 주파수 도메인의 정보를 새로운 time 도메인으로 바꾼 것을 의미한다. MFCC는 very compressible representation하다.
TimeStretch : Stretch a spectrogram in time without modifying pitch for a give rate
특정 Time에 대한 spectrogram을 늘리는 것이다. 만약 ~ 10초의 음원이 있을때 4 ~ 6초 구간에 대해서 Stretch를 진행할 수 있다. 위 기법은 Data Augmentation에 사용된다.
FrequencyMasking : Apply masking to a spectrogram in the frequency domain
특정 Frequency를 Masking해서 지워버리는 것이다. 이것 역시 Data Augmentation에 사용되는 기법이다.
TimeMasking : apply maksing to a spectrogram in the time domain
특정 Time 정보를 Masking 해서 지워버리는 것이다. 이것 역시 Data Augmentation에 사용되는 기법이다.
'PYTHON > PYTORCH' 카테고리의 다른 글
[파이토치] torch.mm 함수 (0) | 2021.10.06 |
---|---|
[fairseq] 설치 시 오류 'enum'오류 (0) | 2021.09.09 |
[파이토치] Melspectrogram 추출하기 (0) | 2021.01.10 |
[파이토치] PILLOW_VERSION 오류 관련 (0) | 2020.05.08 |
[파이토치] nn.functional.avg_pool2d 관련 (0) | 2020.05.07 |