목소리가 TTS 아니냐는 의혹이 있었는데
톤이랑 말투랑 그런게 이상해서 그렇지 TTS는 아니고 사람 소리였습니다.
하지만 요즘은 이런 특이한 말투도 AI로 재현이 가능한지 궁금해서
주말에 최신 GPU가지고 실험좀 해봤는데 결국 이상한 TTS를 만드는데 성공했습니다.
요즘 TTS들은

요즘은 TTS들은
- Diffusion model로 음성을 생성하기도 하고
- 음성을 압축한 후 그걸 토큰으로 바꾼 후 트랜스포머에 집어넣어서 다음 음성을 예측하기도 하고
- 그걸 개조해서 경량형 TTS를 만드는 사람들도 있습니다.
하지만 이런건 쓸데가 없고 목표는 내 목소리를 똑같이 따라하는 TTS를 만드는 것이기 때문에
voice cloning 모델을 주로 찾아봤습니다.

구글이 연구한 AudioLM 모델도 음성을 토큰으로 바꿔서 트랜스포머에 집어넣어서 다음 음성을 예측하는 모델인데
톤과 음질을 학습시킬 수 있는 부분이 있어서 상당히 뛰어난 퀄리티로 보이스 복제가 가능하고 합니다.
예측한 결과를 들어보면 굉장히 자연스럽습니다.
그럼 이제 커서를 켜서 AudioLM 모델 만들어달라고 하고 학습 돌리면 되겠지만
조그만한 TTS 만드는 데도 8만 시간 분량의 음성을 학습 돌려야 하는데 직접 할 수는 없을 것 같기 때문에
이미 만들어진 모델을 파인튜닝 하는 식으로 하는게
시간과 돈이 없으면 가장 좋은 방법일 것 같습니다.
GPT-SoVITS
GPT-SoVITS 모델이 평가가 좋던데 다운받아서 파인튜닝해 보도록 합시다.

기여자들 목록을 보면 애니프사 출신들이 많아서 상당히 신뢰가 가는 것 같습니다.
어떤 모델이냐면
- 음성을 입력하면 특징을 추출해주고
- 텍스트와 함께 토큰으로 바꾼 후
- GPT에 넣어서 다음 토큰을 예측하는 모델이라고 합니다.
요즘 스타일의 모델인데 그래서 퀄리티 좋게 목소리 복제가 가능한가 봅니다.
사용법

일단 GPT-SoVITS 검색하면 나오는 깃헙 들어가서 Releases 메뉴 들어가서 최근 배포판을 다운로드해봅시다.
윈도우 버전만 보이는데 그래서 구글 Colab 버전도 어딘가에 있는 것 같습니다.

압축풀면 일단 go-web.bat 파일을 누르면 브라우저에서 UI 실행이 가능한데
중국 애니프사들이 만들어서 중국어라서 한국어로 바꾸고 싶으면

go-webui.bat 파일을 우클릭해서 메모장이나 에디터로 열어서 ko-KR로 바꾸도록 합시다.

파인튜닝 안하고 그냥 추론을 바로 해봐도 되는데 워낙 말투가 특이해서 그런가 파인튜닝하는게 결과가 더 좋았습니다.
그래서 튜닝하려면 총 1분~30분 분량의 내 음성 파일들을 아무 폴더에 넣어두고
"오디오 자동분리 입력 경로" 여기에 경로를 복사해서 집어넣어줍니다.
그리고 큰 버튼을 누르면 이제 음성을 잘게 잘라줍니다.
ASR

그 다음에 내 음성에 자막을 달아서 라벨링도 해줘야합니다.
빨간 부분 잘 선택하고 큰 버튼 누르면 되겠습니다.
그 다음에 오디오 주석 WebUI 버튼을 누르면 오디오에 자막이 잘 달렸나 확인가능합니다.

자동자막이 잘 되어 있는지 하나하나 확인하고 수정할 수 있습니다.
Save File, Submit Text 버튼 눌러야 저장되고
Next Index누르면 다음페이지로 이동가능합니다.
GPT, SoVITS 학습 1
다음 탭으로 넘어가면 이거가지고 데이터셋 만드는 부분이 있습니다.
"1A-훈련 데이터셋 포맷팅 도구" 탭 들어가면 되는데
이름 짓고 아까 라벨링할 때 만들어진 .list파일 경로도 잘 있나 확인하고

경로 잘 썼으면 밑에 "원클릭 포맷팅" 버튼을 눌러봅시다.
GPT, SoVITS 학습 2

다음에 "1B-미세 조정 훈련" 부분이 파인튜닝 하는 부분입니다.
Sovits 모델 학습버튼 누르고
완료되면 GPT모델 학습버튼 누르면 되겠습니다.
참고로 배치사이즈는 GPU VRAM이 6기가 이하면 1로 설정해서 돌리라는 말이 있습니다.

진행상황은 터미널창 보면 되는데 GPU가 운동 많이 되는거 볼 수 있습니다.

그 다음에는 "1C-추론" 탭으로 들어가면 본격적으로 추론이 가능합니다.
GPT 모델, SoVITS 모델을 방금 생성한 .ckpt 파일로 설정한 후에
추론용 WebUI를 오픈해봅시다.
추론

아까 생성한 .ckpt 파일을 잘 고르고 (기본 ckpt 파일도 선택 가능)
좌측엔 3초~10초 정도로 내 목소리로 녹음한 "레퍼런스 오디오 파일"을 올려주고
가운데엔 그 레퍼런스 오디오 파일의 자막을 달아주고
우측에서 레퍼런스 오디오 파일의 언어를 선택 하면 됩니다.
레퍼런스 오디오 파일에 따라서 퀄리티가 많이 달라지기 때문에 여러가지 버전 올려서 실험해보셔야 합니다.

그럼 하단에 원하는 문자 입력하고 언어 선택하고 생성을 누르면 그걸로 본인 목소리로 읽어줍니다.
영상에서 샘플 들어보면 매우 자연스럽습니다.
응용
응용을 하자면 다른나라 언어로 말하는 것도 쉽게 가능하고
ASMR 같은 것도 만들 수 있지 않을까 싶습니다.
하지만 중간중간 기계음 들리거나 이상한 부분들은 항상 출현하기 때문에
이것도 랜덤뽑기 할 바엔 그냥 녹음하는게 시간이 덜 걸리지 않을까요.
아무튼 내가가진 톤이랑 말투도 TTS로 복제하고 싶으면 GPU로 직접 돌려보면 재밌으니까 집에가서 돌려봅시다.
남의 목소리로 학습돌리면 뭔가 문제되지 않을까요.
