MusicVAE 구현하기

김우빈·2022년 8월 3일
0
post-thumbnail

VAE(Variational AutoEncoder)란?

<출저: https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=http%3A%2F%2Fcfile10.uf.tistory.com%2Fimage%2F99E5F2425BDC9A230A586B>

Variational AutoEncoder(변분추론 인코더)

입력데이터 X를 잘 설명하는 특징(feature)을 추출하여 Latent vector(잠재백터) Z에 담은후에, 이 Latent vector(잠재백터) Z를 통하여, X와 유사하나 완전 새로운 데이터를 생성하는것을 목표로합니다.

이때 각 특징(feature)이 가우시안 분포를 따른다고 가정하고, Latent vector(잠재백터)Z는 각 특징(feature)의 평균과 분산값을 나타냅니다.

VAE를 이용해 음악을 작곡한다고 가정한다면, 악기1,악기2,악기3의 속도, 피치의 평균 과 분산등의 정보등을 (feature)를 Latent vector(잠재백터) Z에 담고, 그 Latent vector(잠재백터) Z를 이용해 음악을 작곡 해 나가는 것 입니다.

Latent vector란?(잠재백터)

Latent vector(잠재백터)는 독립적인 잠재 변수들의 쌍을 Latent vector(잠재백터)라고 부르며, GAN(적대적 생성신경망)등의 컴퓨터비전 분야에서도 사용합니다.

입력 음원(midi데이터) X를 Variational AutoEncoder(변분추론 인코더)에 통과시켜, Latent vector(잠재백터) Z를 다시 Decoder에 통과시켜 입력 음원(midi데이터) X와 비슷하지만 새로운 데이터를 찾아내는 구조입니다.

어떻게 돌아갈까

Variational AutoEncoder(변분추론 인코더)는 입력 음원(midi데이터) X가 들어오면 그 데이터의 다양한 특징을 찾아 각각의 확률 변수가 되는 확률 분표를 만들게 됩니다. 이런 확률 분포를 잘 찾아, 값이 높은 부분을 이용해 실제 있을법한 음원(midi데이터)를 만들어 냅니다.

구현을 위한 패키지 설치

erorr note| dependency 이슈: magenta 2.1.0버전 설치하면됨.

!pip install magenta==2.1.0

전처리 계획

  • midi데이터를 학습하기위해, 백터화 해야함.

  • magenta의 convert_directory 이용하여 디렉터리 채로 전처리

  • zip파일로 다운받고 zipfile 라이브러리로 압축해제 후, 백터화

  • 백터화하여 TFrecord로 저장

데이터URL: https://storage.googleapis.com/magentadata/datasets/groove/groove-v1.0.0-midionly.zip

TFrecord란

TFRecord 파일은 tensorflow의 학습 데이터등을 저장하기 위한 이진 데이터 포맷으로, 구글의 Protocol Buffer 포맷으로 데이터를 파일에 직렬화하여 저장합니다.

필요성

이미지 데이터와같은 데이터는 메타데이터와 레이블이 별도의 파일로 저장되어 있기때문에, 각각 읽어들여야해서 코드가 복잡해집니다.TFrecord파일을 이용하면 훨씬 간단하게 해결 할 수 있습니다.

miidi 포멧으로 읽어서 매번 디코딩을 진행하면 학습단계에서 데이터를 읽을때 성능저하가 발생합니다. 이를 해결하기위해 TFrecord파일을 사용할 수 있습니다.

전체적인 소스코드는 github에서 보실수 있습니다!

github 링크

https://github.com/oobinkim/MusicVAE_Groove

profile
DeepLearning, MLOps

0개의 댓글