티스토리 뷰

https://pytorch.org/hub

PyTorch Hub의 기세가 무섭습니다. 코드 구현체를 찾으려면 GitHub을 기웃거리면 되고 컨테이너를 찾으려면 Docker Hub로 가면 되듯이 얼마후면 딥러닝 모델 구현체를 찾기 위해서는 PyTorch Hub를 찾는 날이 올지도 모르겠습니다. 유명한 딥러닝 모델의 구현체들이 아래처럼 속속 등록되고 있는데요,

그중에 유독 눈에 띈 것은 Filter를 audio로 지정했을 때 나오는 Nvidia에서 구현한 Tacotron2, WaveGlow였습니다. 

요즘 관심있게 보고 있던 모델이었기 때문에 PyTorch Hub와 함께 묶어서 살펴보기 좋겠다는 생각이 들어서 아래 링크를 참고해서 테스트를 진행해봤습니다. 
https://pytorch.org/hub/nvidia_deeplearningexamples_waveglow/

 

waveglow

테스트 진행

일단 torch.hub로부터 미리 학습되어 있는 waveglow 모델을 가져옵니다. 

import torch
waveglow = torch.hub.load('nvidia/DeepLearningExamples', 'nvidia_waveglow')

load된 모델은 LJ Speech dataset(2.6GB)로 학습되어 있으며 sampling-rate는 22050라는 점을 참고해두면 좋습니다. 다음으로 필요한 최소한의 패키지를 미리 설치해줍니다. 테스트하는 환경이 jupyter notebook이라면 pip 앞에 !를 붙여주시면 됩니다.

pip install numpy scipy librosa unidecode inflect librosa

이 코드의 마지막에 inference한 오디오 파일을 저장 할 수 있도록 관련된 라이브러리를 import 합니다.

import numpy as np
from scipy.io.wavfile import write

inference를 위한 waveglow 모델을 준비 해줍니다. GPU가 없다면 cuda 부분을 제거해주면 되는데 Google Colab을 통한다면 GPU를 무료로 사용할 수 있기 때문에 Colab을 사용하시는 것을 권장합니다.

waveglow = waveglow.remove_weightnorm(waveglow)
waveglow = waveglow.to('cuda')
waveglow.eval()

torch.hub에서 미리 학습되어 있는 tacotron2 모델을 가져옵니다.

tacotron2 = torch.hub.load('nvidia/DeepLearningExamples', 'nvidia_tacotron2')
tacotron2 = tacotron2.to('cuda')
tacotron2.eval()

이제 inference 할 메시지를 입력합니다.

text = "hello world, I missed you"

메시지의 내용을 모델에 바로 적용할 수 있도록 pre-processing 해주고 tacotron2, waveglow를 체인처럼 순서대로 inference 해줍니다.

# preprocessing
sequence = np.array(tacotron2.text_to_sequence(text, ['english_cleaners']))[None, :]
sequence = torch.from_numpy(sequence).to(device='cuda', dtype=torch.int64)

# run the models
with torch.no_grad():
    _, mel, _, _ = tacotron2.infer(sequence)
    audio = waveglow.infer(mel)
audio_numpy = audio[0].data.cpu().numpy()
rate = 22050

끝으로 파일로 저장하고 오디오를 재생해봅시다.

write("audio.wav", rate, audio_numpy)

혹시 colab이나 jupyter를 이용했다면 아래와 같이 바로 확인도 가능합니다.

from IPython.display import Audio
Audio(audio_numpy, rate=rate)

자, 결과를 들어보시죠.

waveglow.wav
0.08MB

위에 모든 코드는 Colab에서 실행 가능합니다. 아래 링크를 통해 바로 확인해보실 수 있습니다.

https://colab.research.google.com/drive/1TQiwwAwxSNCy6lZECoT6g2rtuO2xsloe

 

마무리

pre-trained되어 있는 모델을 사용하는 것이라 성능이 좋지는 않지만 pytorch.hub의 상당한 가능성을 확인해볼 수 있었습니다. 위에 모든 예제를 진행하는데 5분이 채 걸리지 않았으니까요. 앞으로 pytorch.hub에 더 많은 모델이 등록될테고 개발은 더욱 쉬워지겠네요. 소수의 누군가가 코어를 개발하고 있다면 한편으로 그걸 누가 조립을 잘 해서 프로덕트로 만들어낼 수 있으냐의 문제도 예상됩니다. 하지만 모델 성능 자체가 중요시 되는 영역이라면 직접 훈련시키는게 불가피하겠습니다.

 

댓글
댓글쓰기 폼