심심풀이/AI 음성2024. 1. 3. 15:56

인공지능 기술의 발전과 더불어 이미지, 음성, 영상 등을 학습하고 생성하는 기술이 나날이 발전하고 새로워지고 있습니다.

유튜브에서 단순히 유명인의 목소리로 노래를 부르는 영상만이 아니라 여기서 더 나아가 자연스럽게 대화하는 챗봇까지 만들어지는 걸 보면 기술의 발전이 정말 빠르다고 느낍니다.

애니메이션을 개인적으로 즐겨보는 저로서도 제가 평소에 좋아하는 캐릭터의 목소리로 TTS를 만들어보면 재미있지 않을까하는 생각이 들어서 웹서핑을 좀 하다보니 생각보다 일반인도 만들기 편한 환경이 이미 github 등에서 구축되어 배포되어 있었습니다.

그래서 이번에는 EasyBertVits2라는 코드를 바탕으로 손쉽게 자신이 원하는 캐릭터의 TTS를 만드는 작업과정을 정리해보려 합니다.

1. EasyBertVits2란

1.1 개론

TTS는 Text to Speech의 약자로 이용자가 텍스트의 형식으로 입력값을 주면 이를 적정 언어 모델을 거쳐 음성화시켜주는 기술입니다. 이 언어 모델, 혹은 엔진을 만들 때 필요한 것이 BertVits2와 같은 학습 코드입니다.

이러한 학습 코드를 구현하는 데 있어서는 전문적인 지식과 또 기본 모델을 준비하는데 필요한 방대한 컴퓨팅 파워가 필요하기에 일반인의 입장에서는 대개 웹에 공개된 코드와 베이스 모델을 사용하게 됩니다.

구글링을 하다보면 마이크로소프트 사의 VALL-E라던지 Stable Diffusion에서 착안한 Diff-SVC, VITS 등의 다양한 코드들이 존재합니다. 각 방식별로 필요한 학습 데이터의 양, 소요 시간, 모델의 품질 등에서 다양한 장단점이 존재합니다.

5초 내외의 짧은 학습 데이터로 음성 모델을 만들어준다고 홍보하는 Vall-E (X)

하지만 이번에 사용할 방식을 선택할 때 가장 중요하게 생각한 것은 편의성이었습니다. 이미지를 생성하는 stable-diffusion과는 다르게 음성 학습 코드는 그래픽 인터페이스가 구현된 경우가 상당히 적었고 따라서 여러 코드 파일들을 열어서 그 안의 파라미터를 수정하는 과정을 거치는 경우가 굉장히 많아 오류 발생이 잦을 수 밖에 없는 구조였습니다.

그렇기 때문에 어느 정도 이용자들이 원래 기본 코드 위에 편의성을 위해 추가적인 수정 작업을 거친 방식이 주 선택 대상이었고 Vall-E (X)와 EasyBertVits2가 그 대상으로 추려졌습니다.

1.2 Vall-E (X) 테스트

먼저 Vall-E (X)의 경우는 github에서 배포중인 코드를 다운받으면 별 조정 없이 바로 실행할 수 있다는 장점이 있습니다.

https://github.com/Plachtaa/VALL-E-X

설치할 폴더에서 프롬프트를 열고 git clone 명령어로 간단히 다운로드 받을 수 있고 부수적인 필수 모듈들도 requirements.txt 폴더에 정리되어 있어 pip install로 간편하게 설치할 수 있습니다. 그 다음에는 launch.py를 프롬프트에서 실행시키기만 하니 정말 간단하죠.

Vall-E (X)의 그래픽 인터페이스

익숙한 gradio 기반의 인터페이스이기에 사용하는데 어려움은 없습니다. 처음인만큼 Infer from audio 메뉴창에서 그대로 학습을 해보겠습니다.

준비할 것은 5초 내외의 음성 데이터(영어, 일본어, 중국어 지원)와 그 대본입니다. 먼저 Uploaded audio prompt 위치에 음성 파일을 올리고 그 대본을 Transcript에 입력해주시면 됩니다. 그 이후 언어에 맞게 language를 선택해주시면 되고 accent의 경우는 언어 설정이 가능하지만 왜곡이 다소 생기기에 no-accent로 둡니다.

그 다음 TTS의 text를 상단의 박스에 입력하시면 됩니다. 저 같은 경우는 '오늘 날씨가 좋으니 밖에 나가볼까' 정도의 문장을 입력했습니다.

학습 준비를 마쳤으면 먼저 우측 상단의 generate!을 누릅니다. 그러면 모델을 학습함과 동시에 TTS 작업을 수행합니다. 30초 정도 기다리면 하단에 생성된 음성이 재생할 수 있게 나옵니다.

마찬가지로 우측 하단의 Make prompt를 누르면 학습된 모델 파일이 .npz 확장자로 생성이 됩니다. 원하시면 우측 버튼을 클릭하여 다운로드할 수 있습니다. 이 파일은 추후에 이 목소리로 다른 문장을 음성으로 만들고 싶을 때 프리셋처럼 사용할 수 있게 도와줍니다(Infer from prompt 등의 기능 사용).

하지만 아래 샘플을 들어보면 알 수 있듯 그렇게 학습된 데이터의 퀄리티가 좋지는 않습니다. 1(원본)과 11(output)을 비교해보면 그 질의 차이가 확연히 느껴집니다. (우측 파일 음성이 좌측에 비해 많이 크니까 유의바랍니다.)

옛날 보컬로이드에서 흔히 들을 수 있는 기계음이 강하게 느껴집니다. 아무래도 6초의 데이터를 30초라는 짧은 시간 동안 학습하기에 결과물에는 한계가 보이는 모습입니다.

 

 

EasyBertVits2를 이용해 애니메이션 캐릭터의 TTS 만들기-설치

EasyBertVits2를 이용해 애니메이션 캐릭터의 TTS 만들기-개론 및 Vall-E (X) 인공지능 기술의 발전과 더불어 이미지, 음성, 영상 등을 학습하고 생성하는 기술이 나날이 발전하고 새로워지고 있습니다.

joonnotes.tistory.com

Posted by 돌멩이와 쥐