[생성형 AI] 대화할 수 있는 마동석 AI 캐릭터 만들어보자2

신창호·2024년 6월 26일
0

생성형AI

목록 보기
3/3
post-thumbnail

TTS오픈소스 변경

  • 먼저 기존의 학습중이던 xTTS coqui 가 셧다운을 했다.
    • 관련링크 Coqui is shutting down
    • 물론 기존의 코드들은 그대로 github에 있다지만, 암묵적으로 업데이트나 관리가 애매해진다는 느낌이 들어 다른 기술을 사용해보고자했다.

새로알게된 OpenVoiceV2 와 meloTTS

OpenVoiceV2와 meloTTS는 둘 다 텍스트-음성 변환(TTS) 모델이고,
둘다 MyShell이라는 organization안에 들어가 있다.

OpenVoiceV2

  • 즉각적으로 목소리를 복제하는 TTS에 중심이 된 오픈소스로 음성파일 하나로 톤이나,음성 스타일 등을 복제하여, TTS에 반영해주는 오픈소스이다.
  • OpenVoiceV2는 v1버전의 모든 기능을 가지고 더 많은 다국어를 지원해주는 기능이 추가되었다.
    • 여기서 한국어가 추가되었다.
  • 이것만 듣고, 바로 내가원하는 목소리를 만들 수 있을 것 같아 테스트해보았지만, 아쉽게도 한국어는 성별정도만 달라질뿐, 음성/톤/스타일은 변경되질 않았다.
    • 영어나 일본어는 잘 적용된다고 하는데, 안해봐서 모르겠다..

      보이스 복제하는 과정에서 알게되었는데, meloTTS를 기반으로 복제하는 것을 알게 되었다.

MeloTTS

  • OpenVoice와 달리 고품질로 텍스트 음성변환(TTS)에 중점이 되어 있는 라이브러리이다.
    • 우리가 흔히 생각하는 AI 튜닝(딥러닝)하는 부분이라 생각하면 될 것 같다.
  • 음성복제는 지원하지않지만,자연스러운 소리를 지원해준다.
  • 이TTS는 VITS, VITS2, Bert-VITS2를 기반으로 한다고 한다.

아무튼 한국어가 지원된다기에, MeloTTS를 선택하여 학습시켜보고자 한다.

MeloTTS 세팅

먼저 엔비디아 GPU가 없으면, trainning(ai 튜닝)하기 어려워진다는 점 알고들어가야한다.
나도 어떻게든 GPU없이 가능하지않을까.. 이것 저것 삽질해봤지만, 전처리과정까지는 어찌 되어도 튜닝작업은 GPU없이 진행하기 어렵다.(한없이 오래걸리거나, 컴터가 못버티고 꺼졌음)

준비사항

  • Visual Studio
  • Python (단, 3.11버전 이상이면 안됨) -> 3.10버전으로 필요
  • git
  • (선택) 가상환경 conda -> 난 그냥 venv사용
  • NVIDIA GPU (하드웨어)
    • cuda 툴킷 (소프트웨어)
    • cuDNN(소프트웨어)


준비사항 준비하기

Visual Studio 설치

이정도는 알아서 해야된다 ㅎㅎ

Python 설치

이것도 간단하지만, 재밌게도 최신 Python으로 설치하면 meloTTS의 필요라이브러리에서 충돌하는 현상이 일어난다. 그래서 3.11버전 미만으로 설치를 해야 오류없이 진행할 수 있다.

git 설치

meloTTS의 코드 git clone하기 위해 필요!



내 그래픽카드 확인

  • 여러 방법이 있지만, 윈도우 키 + R 누르고 실행창에서 dxdiag 를 입력하여 디스플레이에서 내 그래픽카드를 확인할 수 있다.
  • NVIDA 그래픽카드가 있는데도 인식이 안되면 드라이버를 확인해보자

CUDA toolkit 설치

이건 NVIDIA에서 개발한 소프트웨어 개발도구 모음으로 기본적으로 GPU가 병렬연산을 수행할 수 있게 해준다. 그래서 고성능 컴퓨팅 연산이 가능하게되어 특히 딥러닝, 머신러닝, 과학적 계산, 이미지 처리, 비디오 처리 등의 분야에서 사용한다.

cuDNN 설치

GPU 가속화 라이브러리로 이걸 사용하여 GPU의 성능을 극대화하고 모델 학습 및 추론속도를 크게 향상 시킬수 있다. cuda에서 설치한 파일에 덮어씌우는 형태로 설치하면 된다.

설치확인

  • 제대로 설치되었는지 확인하기 위해 아래 명령어를 사용하면된다.

  • 명령어

  nvcc --version #CUDA 드라이버 확인
  nvidia-smi # NVIDIA GPU 확인
  • 파이썬 코드
	import torch
	print(torch.__version__) # 버전 확인 

	print(torch.cuda.is_available())  # True가 출력되어야 함
	print(torch.backends.cudnn.enabled)  # True가 출력되어야 함

나같은 경우에 pyTorch 버전이 PyTorch 2.3.1+cpu 으로 CPU 전용 버전이 였다. 그래서 삭제 후 다시 설치했다.

pip uninstall torch torchvision torchaudio # 삭제
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
# 설치 


가상환경 생성 및 실행

가상환경에 필요한 라이브러리 설치해 넣고 따로 관리할 수 있기 때문에 사용하면 좋다.

  • 가상환경 생성
python -m venv venv
  • 가상환경 실행
.\venv\Scripts\activate

라이브러리 설치

pip install -r requirements.txt 
  • 만약 위 명령어로 설치된 라이브러리가 에러가 뜨거나, 추후 전처리 및 train(튜닝)작업이 안된다면 botocore==1.34.88 을 추가해줘야한다.

  • 또한, Failed initializing MeCab 에러 가 떴다면 아래 명령어로 설치해줘야한다.

python -m unidic download


Training(튜닝)해보기

  • 공식문서 링크 : Training on Custom Dataset
  • 공식문서 과정을 따라 거치면 되는데, 대충 이해하기 쉽게 과정을 정리해봤다.

과정요약

  1. 해당 코드를 train할 수 있게 설치한다. -> melo 폴더 생성됨
  2. DataSet 준비 (실제 튜닝에 사용할 데이터를 정리한 내용)
  3. 전처리 과정 -> (우리가 준비한 데이터는 컴퓨터가 이해하지못하고, 옮바른 파일인지 검사도 해야된다. train할수 있는 지 확인하는 과정)
  4. 전처리가 끝난 파일들을 가지고 본격적인 train(튜닝)
  5. train(튜닝)이 끝난 모델로 음성 생성!

주의할 점

  • train과정에서 한국어 encoding과정에서 에러가 발생할 수 있다.
    • utils.py 파일을 열어 get_hparams 함수를 변경해주면 된다.
if init:
        try:
            with open(config_path, "r", encoding="utf-8") as f:
                data = f.read()
        except UnicodeDecodeError:
            with open(config_path, "r", encoding="cp949") as f:
                data = f.read()
        with open(config_save_path, "w", encoding="utf-8") as f:
            f.write(data)
    else:
        try:
            with open(config_save_path, "r", encoding="utf-8") as f:
                data = f.read()
        except UnicodeDecodeError:
            with open(config_save_path, "r", encoding="cp949") as f:
                data = f.read()
profile
한단계씩 올라가는 개발자

3개의 댓글

comment-user-thumbnail
2024년 8월 16일

안녕하세요! 혹시 개발이 완료되었을까요? 국가고시 응원 영상에 사용하고 싶어서 그런데 혹시 공유 가능하실까요??

1개의 답글
comment-user-thumbnail
2024년 12월 5일

안녕하세요! 현재 melotts 튜닝 작업을 진행 중에 궁금한 점이 있어 문의드립니다. 메일로 질문을 드려도 괜찮을까요?

답글 달기