Path: blob/master/site/ko/hub/tutorials/spice.ipynb
25118 views
Copyright 2020 The TensorFlow Hub Authors.
Licensed under the Apache License, Version 2.0 (the "License");
SPICE를 사용한 피치 감지
이 colab에서는 TensorFlow Hub에서 다운로드한 SPICE 모델을 사용하는 방법을 보여줍니다.
오디오 입력 파일
이제 가장 어려운 부분입니다. 여러분의 노래를 녹음하세요! 😃
오디오 파일을 얻기 위한 4가지 방법이 있습니다.
Colab에서 직접 오디오를 녹음합니다.
컴퓨터에서 업로드합니다.
Google 드라이브에 저장된 파일을 사용합니다.
웹에서 파일을 다운로드합니다.
아래 네 가지 메서드 중 하나를 선택합니다.
오디오 데이터 준비하기
이제 오디오가 준비되었으니 예상 형식으로 변환한 다음 들어 보겠습니다!
SPICE 모델은 16kHz의 샘플링 속도와 단 하나의 채널(모노)로 오디오 파일을 입력 받아야 합니다.
이 부분에서 도움을 주기 위해 wav 파일을 모델의 예상 형식으로 변환하는 함수(convert_audio_for_model
)를 만들었습니다.
먼저 만들어 놓은 노래의 파형을 살펴보겠습니다.
보다 유익한 시각화 방법은 시간에 따른 주파수를 보여주는 스펙트로그램입니다.
여기서는 노래를 더 명확하게 나타내기 위해 로그 주파수 스케일을 사용합니다.
여기서 마지막 변환이 필요합니다. 오디오 샘플은 int16 형식이며 -1과 1 사이의 부동 소수점으로 정규화해야 합니다.
모델 실행하기
이제 쉬운 부분입니다. TensorFlow 허브로 모델을 로드하고 여기에 오디오를 입력합니다. SPICE는 피치와 불확실성의 두 가지 출력을 제공합니다.
TensorFlow 허브는 머신러닝 모델의 재사용 가능한 부분을 게시, 검색 및 소비하기 위한 라이브러리입니다. 이러한 라이브러리를 이용하면 머신러닝으로 문제를 해결하기가 쉬워집니다.
모델을 로드하기 위해 허브 모듈과 모델을 가리키는 URL만 있으면 됩니다.
참고: 여기서 흥미로운 점은 허브의 모든 모델 URL을 다운로드와 문서 읽기에 모두 사용할 수 있다는 것입니다. 따라서 브라우저에서 해당 링크를 가리키면 모델 사용 방법에 대한 설명서를 읽고 훈련 방법에 대해 자세히 알아볼 수 있습니다.
모델이 로드되고 데이터가 준비되면 결과를 얻기 위해 3개의 줄이 필요합니다.
신뢰도가 낮은(신뢰도 <0.9) 모든 피치 추정치를 제거하고 나머지 값을 플롯하여 결과를 이해하기 쉽게 만들겠습니다.
SPICE가 반환하는 피치 값은 0에서 1 사이의 범위에 있습니다. 절대 피치 값(Hz)으로 변환하겠습니다.
이제 예측의 성능이 얼마나 좋은지 살펴보겠습니다. 예측된 피치를 원래 스펙트로그램 위에 중첩시킵니다. 피치 예측이 더 잘 보이도록 스펙트로그램을 흑백으로 변경했습니다.
음표로 변환하기
이제 피치 값을 얻었으므로 이를 음표로 변환하겠습니다! 이 부분은 그 자체로 어렵습니다. 다음 두 가지를 고려해야 합니다.
나머지(노래가 없을 때)
각 음표의 크기(오프셋)
1: 노래가 없을 때를 나타내기 위해 출력에 0 추가
2: 음표 오프셋 추가
사람이 자유롭게 노래할 때 멜로디는 음표가 표현할 수 있는 절대 패치 값을 이동시킬 수 있습니다. 따라서 예측을 음표로 변환하려면 이 가능한 오프셋을 수정해야 합니다. 다음 코드가 이 부분을 계산합니다.
이제 일부 휴리스틱을 사용하여 가장 가능성이 높은 노래의 음표 시퀀스를 시도하고 추정할 수 있습니다. 위에서 계산된 이상적인 오프셋이 하나의 요소이지만, 양자화를 시작하기 위해 속도(8분의 1과 같이 수행되는 예상의 수)와 시간 오프셋도 알아야 합니다. 간단하게 하기 위해 서로 다른 속도와 시간 오프셋을 시도하고 양자화 오류를 측정하여 최종적으로 이 오류를 최소화하는 값을 사용할 것입니다.
이제 양자화된 음표를 악보로 작성해 보겠습니다!
이 작업을 위해 music21 및 Open Sheet Music Display의 두 가지 라이브러리를 사용합니다.
참고: 간단하게 하기 위해 여기서는 모든 음표의 지속 시간이 동일하다고 가정합니다(반음표).
음표를 MIDI 파일로 변환하고 들어보겠습니다.
이 파일을 만들기 위해 이전에 만든 스트림을 사용할 수 있습니다.
colab에서 노래를 들으려면 다시 wav로 변환해야 합니다. Timidity를 사용하면 간단히 해결됩니다.
마지막으로, 음표로부터 생성되고 예상된 피치로부터 MIDI를 통해 만들어져 모델에 의해 추론된 오디오를 들어봅니다!