ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Tacotron 무지성 구현 - 8/N
    Tacotron 1 2021. 11. 5. 00:29

    오랜만에 포스팅하네요.

     

    tacotron1과 끝장을 보고 왔습니다.

     

    이런저런 수정을 많이 거치면서 그동안 포스팅했던 코드를 다시 살펴봤습니다.

    정말 가관이더라고요

     

    천천히 수정할 예정이지만 그래도 나름 완성해본 코드를 github에 올려두었습니다.

    https://github.com/choiHkk/Tacotron/

     

    GitHub - choiHkk/Tacotron

    Contribute to choiHkk/Tacotron development by creating an account on GitHub.

    github.com

    제가 아직 git 사용을 잘 못해서 pre-trained 모델 업로드를 못 했는데 나중에 올릴 수 있으면 올려두겠습니다.

     

    일단 spectrogram 생성은 아래와 같습니다.

    원래 teacher forcing이란게 정답을 알려주면서 하는 것이기 때문에

    학습 중간중간에는 아무리 멍청해도 spectrogram은 잘 생성하더라고요.

    근데 inference에서는 잘 생성하지 못해서 특정 step이후로 teacher forcing ratio를 

    줄이는 방향으로 400k까지 학습했더니 어느 정도는 말을 합니다.

    (100k 이후로 어느정도 말을 하기 시작했습니다.)

    하지만 퀄리티는 최악이고 학습 기간도 7일 정도 걸렸네요.

     

    아래의 Mel-Spectrogram, Alignment 그래프는 teacher forcing ratio가 1.0인 상태에서 학습한 결과물입니다.

     

    Mel-Spectrogram

    0 step ~ 32kstep 구간의 spectrogram, 해당 step 이후로는 spectrogram의 변화가 거의 보이지 않지만 모델은 약 30k step 이후로도 쭉 학습을 진행하기 때문에 spectrogram이 잘 만들어진다고 해서 학습이 끝난 상태는 아니다.

     

    Alignment

    위의 spectrogram gif와 동일한 구간의 alignment graph, teacher forcing을 사용하기 때문에 약 20k step 이후로는 alignment가 잘 생성되지만 실제로 inference를 진행하게 되면 최악의 결과를 볼 수 있다.

     

    sample_400k.wav
    0.14MB

    "희생을 감수하라고 하는 것은 가혹해 보인다."

    라는 문구를 편집 없이 그대로 넣어서 출력한 음성입니다.

    학습 종료 직전 teacher forcing ratio가 0으로 설정되어 학습이 진행됐기 때문에

    mel-spectrogram 결과가 엉망입니다.

    그 뿐만 아니라 mel-spectrogram을 inverse해서 강제로 linear-spectrogram으로 만든 다음,

    그 출력 그대로 griffin-lim으로 복원한 음성이기 때문에 음성의 품질은 최악입니다.

     

    아래는 해당 음성의 alignment, spectrogram입니다.

    inference alignment
    inference spectrogram

     

    teacher forcing ratio를 1.0부터 0.0까지

    상당히 많은 step 동안 학습한 결과 치고는 퀄리티가 좋지 않습니다. 

     

    언뜻 보면 alignment가 잘 만들어진 것 같지만 매우 흐리고,

    spectrogram 또한 0~1500hz(또는 0~3000hz) 사이 부분만 잘 생성되고

    나머지는 거의 생성되지 못했습니다.

     

    그래도 음성이 나오고 말을 할 수 있다는 것에 의의를 둠과 동시에

    과거의 유물은 사용하지 않는 이유가 있긴 있다는 것을 깨달았습니다.(tacotron)

     

    다음 포스팅은 앞 포스팅 중 decoder 관련된 부분이 많이 수정되어야 하기 때문에

    해당 부분을 수정 한 다음 transformer TTS로 넘어가 볼까 합니다.

     

    tacotron2를 하지 않는 이유는 모델이 너무 무겁고 

    일반적인 pc에서는 정상적으로 학습할 수 있다 하더라도

    학습되는 시간이 정~말 오래 걸리기 때문에 pass 하려고 합니다.

     

    그래도 결과물을 가져올 수 있다면 따로 포스팅해보도록 노력하겠습니다.

     

    감사합니다.

    'Tacotron 1' 카테고리의 다른 글

    Tacotron 무지성 구현 - 7/N  (0) 2021.08.05
    Tacotron 무지성 구현 - 6/N  (0) 2021.08.02
    Tacotron 무지성 구현 - 5/N  (0) 2021.07.30
    Tacotron 무지성 구현 - 4/N  (0) 2021.07.29
    Tacotron 무지성 구현 - 3/N  (0) 2021.07.27

    댓글

Designed by Tistory.