본문 바로가기

Project

[Project] 음악 스타일 변환 with GAN, Autoencoder🎵

제12회 BOAZ 컨퍼런스를 위해 진행한 프로젝트 정리글입니다. 
본 프로젝트는 이현(건국대학교, Team Leader), 정상형, 구교정(한양대학교)과 함께 진행했습니다.
발표 자료는 BOAZ_slide share, 코드는 Github, 발표 영상은 youtube를 봐주시면 감사하겠습니다.

좋아하는 음악을 색다른 스타일로 들어 보고 싶다!

누구나 각자 즐겨 듣는, 좋아하는 아티스트와 음악들이 있습니다. 레드벨벳의 Psycho를 어쿠스틱 스타일로 들어보면 어떨까요? 비틀즈의 Hey Jude를 재즈 스타일로 들을 수 있다면요! 실제로 유튜브에는 여러 아티스트들이 다양한 스타일의 커버곡들을 올리고 있습니다. 제이플라 등 커버 유튜버들의 조회수와 댓글을 보고 사람들의 니즈가 있다고 생각했고, 이를 딥러닝을 통해 구현해보면 재밌겠다는 게 프로젝트의 시작이었습니다. Generative 계열의 모델을 통해 음악 스타일 변환을 end-to-end로 구현하고자 했습니다. 

 


선행 연구

음성인식, 합성 등 음성 관련 연구는 많은 반면, 음악 관련된 딥러닝 연구는 많지 않았습니다. 다음과 같이 크게 task를 3가지로 나눠서 레퍼런스를 잡았습니다.

1. Audio source separation

META-LEARNING EXTRACTORS FOR MUSIC SOURCE SEPARATION(Samuel et al. 2020)

음악 데이터 전체를 인풋으로 주기 보다, 구성요소(드럼, 베이스, 보컬, 나머지)로 분리 한 뒤 각각 스타일 변환하는 게 좋을 것 같다는 아이디어에서 출발한 task입니다. 다음 논문 3가지[각주:1]를 레퍼런스 삼았고, meta-learning 논문의 공개된 pre-trained model을 이용해 source separation을 진행했고 결과가 괜찮았습니다. 다음은 '장범준 - 흔들리는 벚꽃 속에서' 인트로 부분을 separate 한 결과입니다.  

vocal
drum
bass
others

보컬, 드럼, 베이스는 괜찮게 들리지만, 멜로디 라인인 others 부분의 해상도가 떨어지고 vocal과 frequency가 상대적으로 가까워 간섭이 일어나는 것으로 들립니다.

2. Style transfer

프로젝트의 핵심 task, 대부분 이미지 도메인에서 우수한 성능을 보였던 CycleGAN을 이용하는 경우가 많았습니다. 핵심 아이디어는 음원 데이터를 푸리에 변환을 통해 frequency domain으로 넘긴 뒤, Mel, CQT 등 다양한 spectrogram을 활용한 image-to-image GAN입니다. 신기했던 점은 1차원 신호 정보인 음악을 frequency domain에서 이미지처럼 취급해 모델링했다는 점, phase 정보를 위해 CQT를 활용할 수 있다는 점 등이었습니다. 하지만 미디 데이터나 클래식 음원 데이터를 사용하는 등, 대중가요 음원을 인풋으로 삼고 싶은 저희 프로젝트 목표와는 차이가 있었습니다.

3. Audio reconstruction

대부분의 스타일 변환 논문이 frequency domain에서 진행되므로 이를 소리가 나는 waveform으로 복원하는 과정이 필요합니다. 1984년에 발표된 Griffin-Lim 알고리즘이 대표적으로 사용됩니다. 하지만 resolution 관점에서 좀 더 좋은 결과를 위해 WaveNet을 활용한 audio reconstruction을 시도했습니다. 

 


Data

가장 악기 구분이 두드러지고 대중음악이 많다고 판단되는 장르인 락과 재즈로 task 범위를 좁혔습니다. 스타일 변환 문제에서 한 도메인 안에서의 동질성과, 특징, 이것과 구분되는 다른 도메인의 특징 확보가 중요하다고 생각했기에, 해당 기준에 맞춰 휴리스틱 하게 데이터를 수집했습니다. 소스는 멜론과, 음원이 악기별로 분리되어있는  Musdb18[각주:2] 데이터 셋을 이용했습니다. 음원의 sample rate는 비용과 성능 사이에서 16000으로 정했고, 다음과 같은 간단한 전처리를 해주었습니다.

1. 음원의 시작과 끝 10초 제거 : 무음이 많고 음원 스타일에 영향을 적게 미칠 것으로 판단.

2. 3~4분 길이의 음원을 10초씩 랜덤 샘플링하여 input data로 사용 : 인풋 데이터 사이즈 조절을 위해.

3. 데시벨 평균이 30 미만인 부분 제거 : 무음값으로 판단.

4. 각 sample에 amplitude x 0.8, 1.2 / 1~2 초씩 time shift 통해 data agumentation.

 


Modeling

스타일 변환을 진행하는 인풋 데이터를 기준으로, 모델을 time-domain(waveform)과 frequency-domain(spectrogram)으로 나눠서 접근했습니다. 여러 모델을 시도했으나, 여기서는 frequency-domain 한 개, time-domain 두 개, 총 세 개 모델을 간단히 소개하겠습니다.

Frequency-domain

1. Spectrogram + CycleGAN

음원 data ➡ 푸리에 변환 및 전처리 Mel/CQT CycleGAN Griffin-Lim/WaveNet 스타일 변환된 음원

Spectrogram for each music style 

Spectrogram 데이터를 2D 이미지로 보고 CycleGAN으로 스타일 변환을 시도했습니다. frequency domain이므로 변환 후 다시 wave로 복원하는 작업이 필요합니다. UNet 기반의 CycleGAN을 사용했는데, mel과 cqt의 shape은 2의 지수승이 아니라 skip-connection 구조를 쓰기 어려웠습니다. 이미지처럼 resize를 하면 정보가 깨지는 문제가 있어, reflection padding으로 shape을 맞춰 주었습니다.

결과는 좋지 않았고 해상도가 깨지는 소리가 났습니다. 이는 푸리에 변환 과정에서 손실된 phase 정보를 복원 과정에서 완벽히 추정할 수 없기 때문이라고 판단했습니다. 또한 스타일이 크게 변하지 않았는데, 이는 CycleGAN에서 사용하는 cycle loss와 pixel-wise 한 L1 term 때문이라고 생각했습니다. 

한편, CycleGAN이 이미지 도메인에서 뛰어난 성능을 보였던 이유는 이미지는 구조적인 변화가 아닌 pixel-wise 한 특징을 잡아 변환하면 되기 때문입니다. 반면, spectrogram을 이용한 스타일 변환을 위해서는 이미지와 다르게 구조적인 변화가 필요하다고 판단했습니다. 다음 그림을 보면서 논의를 이어 나가겠습니다.

왼쪽 : rock 음악 spectrogram, 오른쪽 : jazz 음악 spectrogram 

위쪽 두 그림은 CycleGAN 논문에 나온 유명한 스타일 변환 예시입니다. 그림을 보면 이미지에서는 '말', '풍경' 등 구조적인 것들은 변하지 않고 '줄무늬' 라는 특징만 변화 시킵니다. 이와 달리 아래쪽에 락 음악 spectrogram과 재즈 음악 spectrogram을 보면, 이미지와 다르게 전체적인 구조의 변화가 필요해 보입니다. 위와 같은 문제 해결을 위해 다음과 같이 CycleGAN 대신 MelGAN, spectrogram 대신 waveform을 사용해 모델링을 시도했습니다.

 

✔ Additional think for spectrogram

Spectrogram에 채널 방향으로 전체 음원에 대한 메타 정보를 추가하면 어떨까, spectrogram에 이미지처럼 일반적인 convolution(n x n) 구조를 적용하는 것보다 (n x k)와 같이 특정 주파수나 시간대에 집중하는 필터를 주면 어떨까


Time-domain

(1) Waveform + MelGAN-VC(wavenet)

음원 data 1D waveform 2D waveform MelGAN-VC(WaveNet Generator) 스타일 변환된 음원

MelGAN-VC(Marco Pasini, 2019)

모델 인풋 a와 generator를 통과한 G(a) 사이의 관계를 유지시키는 게 MelGAN-VC의 기본 골자입니다. 이때, a와 G(a)를 직접 비교하는 것이 아니라, siamese net(S)을 추가해 이들의 latent vector인 S(a), S(G(a))를 비교함으로써 pixel-wise 한 loss 반영을 피하게 됩니다. 논문에 의하면 일반적인 GAN이 geometric 정보만을 보존하는 반면 위 방법을 통해 semantic 정보를 보존할 수 있다고 합니다.

TraVeL loss from MelGAN-VC(Marco Pasini, 2019)

기본적인 GAN adversiarial loss에 더해, TraVeL loss가 위와 같이 정의되어 generator 통과 전후의 구조적인 loss를 반영할 수 있게 해 줍니다. 

하지만 여기서 2가지 문제에 직면했습니다. MelGAN-VC는 2차원 데이터인 mel-spectrogram을 인풋으로 받아, 우리가 인풋으로 주고자 하는 1차원 waveform과 맞지 않았습니다. 또한 generator에 강력한 waveform 생성 모델인 WaveNet을 사용하고 싶었으나 리소스의 한계로 학습을 진행할 수 없었습니다. 이를 해결하기 위해 아래와 같은 2D Waveform을 고안했습니다.  

1차원 벡터인 waveform을 위 그림과 같이 일정 간격으로 concat 해서 2D waveform을 만들었습니다. 간격과 차원은 실험을 통해 튜닝했습니다. 이렇게 함으로써 input 데이터 차원이 맞지 않는 문제를 해결했습니다. 

또한 2D waveform에서 위와 같이 convolution filter를 적용하면 1차원 waveform에서는 WaveNet과 비슷한 dilation 효과를 얻을 수 있었습니다. 이를 통해 WaveNet 만큼 receptive field가 넓진 않지만 유사한 효과를 내는 generator를 만들 수 있었습니다. 결과는 frequency domain보다 좋았습니다. 하지만 스타일이 확실히 변하지 못했고 정확한 pitch를 잡아내지 못했습니다. 

✔ Additional think for using WaveNet for GAN

나이브하게 1차원 waveform 데이터와 WaveNet을 generator 사용한 GAN을 돌리면, WaveNet의 아웃풋이 argmax로 8bit 값 중 하나로 assign 된다. 원래 WaveNet은 cross-entropy를 통해 타겟 wave와 loss를 계산해 학습한다. 하지만, 우리 모델은 WaveNet 뒤에 Discriminator가 있으므로 학습 시 gradient가 D G(wavenet)까지 흘러야 하는데, argmax가 미분 불가라 일반적인 backpropagation이 불가능했다. 이를 해결하기 위해 다음과 같은 방법들을 시도했다.

1) 미분 가능한 근사 argmax 함수 사용한다.

2) WaveNet 끝단의 softmax, argmax layer를 버리고 tanh를 통해 WaveNet 아웃풋을 raw waveform으로 맞춰준 뒤, 이를 8bit mu-law companding, quantization, expand 시켜 D에 넣어준다. 

두 방법 모두 성공적으로 학습되었지만, WaveNet의 높은 학습 cost는 학부생이 감당하기 어려웠다..😂

 

(2) Waveform + Autoencoder 

A Universal Music Translation Network(Noam Mor el al, 2018) 이 논문은 기존의 음악 스타일 변환 시도들이 generative model을 사용한 것과 다르게 autoencoder 구조를 사용했습니다.

A Universal Music Translation Network(Noam Mor el al, 2018)

특정 악기 소리가 인풋으로 들어가면 원하는 악기의 디코더를 선택해 아웃풋을 출력하는 방식입니다. 여기서 영감을 얻어 디코더를 음악 스타일(장르)로 특정 지어 학습하면 우리 task에 적용해볼 수 있겠다고 생각했습니다. 

모델 아키텍처는 위와 같고, Encoder, Discriminator, Decoder로 이뤄져 있습니다. Encoder는 음원을 1차원 latent vector로 임베딩 합니다. 이때 dilated 1d conv를 사용했습니다. Discriminator는 음원의 스타일을 구분, 속이는 방향으로 학습합니다. 1 x 1 conv를 사용했습니다. Decoder는 Encoder에서 생성된 latent vector를 condition으로 받아 해당 디코더 스타일의 음원을 출력합니다. WaveNet을 사용했습니다. 정리하면 다음과 같은 과정을 거쳐 학습과 inference를 진행합니다.

 


최종 결과

time domain에서 melgan과 autoencoder는 앞선 모델들보다 좋은 결과를 보였지만 여전히 듣기 좋은 소리를 내지 못하고 음정, 박자 등 불안한 부분이 많습니다. 다음은 윤도현 밴드의 잊을게 인트로 부분을 jazz style로 변환한 결과입니다. (가장 결과가 좋았던 autoencoder만 올립니다 나머지는 여러분의 귀를 위해..😂)

original
epoch 20
epoch 40

초반에 일렉 기타 팜 뮤트 리듬을 비슷하게 따라가는 느낌이 들고 음정은 정확하진 않지만 높낮이를 맞추고 있습니다. 재즈 스타일이 피아노와 바이올린 소리로 편향된 점도 아쉬웠습니다.


한계점 & 느낀점

1. 이미지와 오디오 데이터의 차이 : 기존 높은 수준의 이미지 스타일 변환 연구 적용의 한계가 명확합니다. 이를 위해 음악 스타일을 결정하는 오디오 데이터만의 특성을 파악할 필요가 있어 보입니다.

2. WaveNet의 높은 cost : 네트워크가 무거워 인풋 데이터 해상도 높이기 어렵습니다. 또한 매우 긴 train/inference 시간으로 인해 애플리케이션 단에서의 활용도가 낮습니다. 향후 연구에서는 고해상도 wave를 위한 low cost 모델이 필요해 보입니다.

처음 해본 딥러닝 프로젝트인 만큼 주제 선정부터, 과정 하나하나 새롭고 도전적인 경험이었습니다. 프로젝트 시작 시 기대했던 것만큼의 결과는 아니라서 아쉬웠지만 다양한 시도를 해보면서 고민하고 생각하는 시간들이 즐거웠습니다.👍 부족하고 작은 이 프로젝트가 누군가에게 조금이나마 흥미를 불러일으키고 도움이 됐으면 좋겠습니다. 궁금하신 점이나 피드백을 댓글로 달아주시면 답변드리겠습니다. 감사합니다:)


Referece

Musdb18 Dataset

MUSIC SOURCE SEPARATION USING STACKED HOURGLASS NETWORK(Park et al, 2018 ISMR)

Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks

WaveNet: A Generative Model for Raw Audio(Deep Mind, 2016)

META-LEARNING EXTRACTORS FOR MUSIC SOURCE SEPARATION(Samuel et al. 2020)

MelGAN-VC: Voice Conversion and Audio Style Transfer on arbitrarily long samples using Spectrograms(Marco Pasini, 2020)

A Universal Music Translation Network(Noam Mor el al, 2018) 

모두의 연구소 풀잎스쿨

  1. Wave U-Net(Daniel Stolle, 2018), MUSIC SOURCE SEPARATION USING STACKED HOURGLASS NETWORK(Park et al, 2018 ISMR),  META-LEARNING EXTRACTORS FOR MUSIC SOURCE SEPARATION(Samuel et al. 2020)  [본문으로]
  2. Citation @misc{musdb18, author = {Rafii, Zafar and Liutkus, Antoine and Fabian-Robert St{\"o}ter and Mimilakis, Stylianos Ioannis and Bittner, Rachel}, title = {The {MUSDB18} corpus for music separation}, month = dec, year = 2017, doi = {10.5281/zenodo.1117372}, url = {https://doi.org/10.5281/zenodo.1117372} } [본문으로]

'Project' 카테고리의 다른 글

[Project] Music Style Transfer with Neural Networ  (0) 2020.05.13

태그