GPT-SoVITS-WebUI
์๋์ ๋ฐ์ดํฐ๋ก ์์ฑ ๋ณํ ๋ฐ ์์ฑ ํฉ์ฑ์ ์ง์ํ๋ ๊ฐ๋ ฅํ WebUI.English | ไธญๆ็ฎไฝ | ๆฅๆฌ่ช | ํ๊ตญ์ด | Tรผrkรงe
๊ธฐ๋ฅ:
์ ๋ก์ท ํ ์คํธ ์์ฑ ๋ณํ (TTS): 5์ด์ ์์ฑ ์ํ์ ์ ๋ ฅํ๋ฉด ์ฆ์ ํ ์คํธ๋ฅผ ์์ฑ์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค.
์๋์ ๋ฐ์ดํฐ TTS: 1๋ถ์ ํ๋ จ ๋ฐ์ดํฐ๋ง์ผ๋ก ๋ชจ๋ธ์ ๋ฏธ์ธ ์กฐ์ ํ์ฌ ์์ฑ ์ ์ฌ๋์ ์ค์ ๊ฐ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๋ค๊ตญ์ด ์ง์: ํ๋ จ ๋ฐ์ดํฐ์ ๊ณผ ๋ค๋ฅธ ์ธ์ด์ ์ถ๋ก ์ ์ง์ํ๋ฉฐ, ํ์ฌ ์์ด, ์ผ๋ณธ์ด, ์ค๊ตญ์ด, ๊ด๋ฅ์ด, ํ๊ตญ์ด๋ฅผ ์ง์ํฉ๋๋ค.
WebUI ๋๊ตฌ: ์์ฑ ๋ฐ์ฃผ ๋ถ๋ฆฌ, ์๋ ํ๋ จ ๋ฐ์ดํฐ์ ๋ถํ , ์ค๊ตญ์ด ์๋ ์์ฑ ์ธ์(ASR) ๋ฐ ํ ์คํธ ์ฃผ์ ๋ฑ์ ๋๊ตฌ๋ฅผ ํตํฉํ์ฌ ์ด๋ณด์๊ฐ ํ๋ จ ๋ฐ์ดํฐ์ ๊ณผ GPT/SoVITS ๋ชจ๋ธ์ ์์ฑํ๋ ๋ฐ ๋์์ ์ค๋๋ค.
๋ฐ๋ชจ ๋น๋์ค๋ฅผ ํ์ธํ์ธ์! demo video
๋ณด์ง ๋ชปํ ๋ฐํ์์ ํจ์ท(few-shot) ํ์ธํ๋ ๋ฐ๋ชจ:
https://github.com/RVC-Boss/GPT-SoVITS/assets/129054828/05bee1fa-bdd8-4d85-9350-80c060ab47fb
์ฌ์ฉ์ ์ค๋ช ์: ็ฎไฝไธญๆ | English
์ค์น
ํ ์คํธ ํต๊ณผ ํ๊ฒฝ
- Python 3.9, PyTorch 2.0.1, CUDA 11
- Python 3.10.13, PyTorch 2.1.2, CUDA 12.3
- Python 3.9, Pytorch 2.2.2, macOS 14.4.1 (Apple Slilicon)
- Python 3.9, PyTorch 2.2.2, CPU ์ฅ์น
์ฐธ๊ณ : numba==0.56.4 ๋ python<3.11 ์ ํ์๋ก ํฉ๋๋ค.
Windows
Windows ์ฌ์ฉ์๋ผ๋ฉด (win>=10์์ ํ ์คํธ๋จ), ํตํฉ ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ํ ํ ์์ถ์ ํ๊ณ go-webui.bat ํ์ผ์ ๋๋ธ ํด๋ฆญํ๋ฉด GPT-SoVITS-WebUI๋ฅผ ์์ํ ์ ์์ต๋๋ค.
Linux
conda create -n GPTSoVits python=3.9
conda activate GPTSoVits
bash install.sh
macOS
์ฃผ์: Mac์์ GPU๋ก ํ๋ จ๋ ๋ชจ๋ธ์ ๋ค๋ฅธ OS์์ ํ๋ จ๋ ๋ชจ๋ธ์ ๋นํด ํ์ง์ด ๋ฎ์ต๋๋ค. ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ ๊น์ง MacOS์์ CPU๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ จ์ ์งํํฉ๋๋ค.
xcode-select --install
์ ์คํํ์ฌ Xcode ์ปค๋งจ๋๋ผ์ธ ๋๊ตฌ๋ฅผ ์ค์นํ์ธ์.brew install ffmpeg
๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ FFmpeg๋ฅผ ์ค์นํฉ๋๋ค.- ์์ ๋จ๊ณ๋ฅผ ์๋ฃํ ํ, ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ์ด ํ๋ก์ ํธ๋ฅผ ์ค์นํ์ธ์.
conda create -n GPTSoVits python=3.9
conda activate GPTSoVits
pip install -r requirements.txt
์๋ ์ค์น
FFmpeg ์ค์น
Conda ์ฌ์ฉ์
conda install ffmpeg
Ubuntu/Debian ์ฌ์ฉ์
sudo apt install ffmpeg
sudo apt install libsox-dev
conda install -c conda-forge 'ffmpeg<7'
Windows ์ฌ์ฉ์
ffmpeg.exe์ ffprobe.exe๋ฅผ GPT-SoVITS root ๋๋ ํ ๋ฆฌ์ ๋ฃ์ต๋๋ค.
MacOS ์ฌ์ฉ์
brew install ffmpeg
์์กด์ฑ ์ค์น
pip install -r requirements.txt
Docker์์ ์ฌ์ฉ
docker-compose.yaml ์ค์
์ด๋ฏธ์ง ํ๊ทธ: ์ฝ๋ ์ ์ฅ์๊ฐ ๋น ๋ฅด๊ฒ ์ ๋ฐ์ดํธ๋๊ณ ํจํค์ง๊ฐ ๋๋ฆฌ๊ฒ ๋น๋๋๊ณ ํ ์คํธ๋๋ฏ๋ก, ํ์ฌ ๋น๋๋ ์ต์ ๋์ปค ์ด๋ฏธ์ง๋ฅผ Docker Hub์์ ํ์ธํ๊ณ ํ์์ ๋ฐ๋ผ Dockerfile์ ์ฌ์ฉํ์ฌ ๋ก์ปฌ์์ ๋น๋ํ ์ ์์ต๋๋ค.
ํ๊ฒฝ ๋ณ์:
- is_half: ๋ฐ์ ๋ฐ/๋ฐฐ์ ๋ฐ ์ ์ด. "SSL ์ถ์ถ" ๋จ๊ณ์์ 4-cnhubert/5-wav32k ๋๋ ํ ๋ฆฌ์ ๋ด์ฉ์ ์ฌ๋ฐ๋ฅด๊ฒ ์์ฑํ ์ ์๋ ๊ฒฝ์ฐ, ์ผ๋ฐ์ ์ผ๋ก ์ด๊ฒ ๋๋ฌธ์ ๋๋ค. ์ค์ ์ํฉ์ ๋ฐ๋ผ True ๋๋ False๋ก ์กฐ์ ํ ์ ์์ต๋๋ค.
๋ณผ๋ฅจ ์ค์ , ์ปจํ ์ด๋ ๋ด์ ์ ํ๋ฆฌ์ผ์ด์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ๋ฅผ /workspace๋ก ์ค์ ํฉ๋๋ค. ๊ธฐ๋ณธ docker-compose.yaml์๋ ์ค์ ์์ ๊ฐ ๋์ด๋์ด ์์ผ๋ฏ๋ก ์ ๋ก๋/๋ค์ด๋ก๋๋ฅผ ์ฝ๊ฒ ํ ์ ์์ต๋๋ค.
shm_size: Windows์ Docker Desktop์ ๊ธฐ๋ณธ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋๋ฌด ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก ์ค์ ์ํฉ์ ๋ฐ๋ผ ์กฐ์ ํฉ๋๋ค.
deploy ์น์ ์ gpu ๊ด๋ จ ๋ด์ฉ์ ์์คํ ๋ฐ ์ค์ ์ํฉ์ ๋ฐ๋ผ ์กฐ์ ํฉ๋๋ค.
docker compose๋ก ์คํ
docker compose -f "docker-compose.yaml" up -d
docker ๋ช ๋ น์ผ๋ก ์คํ
์์ ๋์ผํ๊ฒ ์ค์ ์ํฉ์ ๋ง๊ฒ ๋งค๊ฐ๋ณ์๋ฅผ ์์ ํ ๋ค์ ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค:
docker run --rm -it --gpus=all --env=is_half=False --volume=G:\GPT-SoVITS-DockerTest\output:/workspace/output --volume=G:\GPT-SoVITS-DockerTest\logs:/workspace/logs --volume=G:\GPT-SoVITS-DockerTest\SoVITS_weights:/workspace/SoVITS_weights --workdir=/workspace -p 9880:9880 -p 9871:9871 -p 9872:9872 -p 9873:9873 -p 9874:9874 --shm-size="16G" -d breakstring/gpt-sovits:xxxxx
์ฌ์ ํ์ต๋ ๋ชจ๋ธ
GPT-SoVITS Models ์์ ์ฌ์ ํ์ต๋ ๋ชจ๋ธ์ ๋ค์ด๋ก๋ํ๊ณ ,
GPT_SoVITS/pretrained_models
๋๋ ํ ๋ฆฌ์ ๋ฐฐ์นํ์ธ์.G2PWModel_1.1.zip ์์ ๋ชจ๋ธ์ ๋ค์ด๋ก๋ํ๊ณ ์์ถ์ ํ์ด
G2PWModel
๋ก ์ด๋ฆ์ ๋ณ๊ฒฝํ ํ,GPT_SoVITS/text
๋๋ ํ ๋ฆฌ์ ๋ฐฐ์นํ์ธ์. (์ค๊ตญ์ด TTS ์ ์ฉ)UVR5 (๋ณด์ปฌ/๋ฐ์ฃผ ๋ถ๋ฆฌ & ์ํฅ ์ ๊ฑฐ ์ถ๊ฐ ๊ธฐ๋ฅ)์ ๊ฒฝ์ฐ, UVR5 Weights ์์ ๋ชจ๋ธ์ ๋ค์ด๋ก๋ํ๊ณ
tools/uvr5/uvr5_weights
๋๋ ํ ๋ฆฌ์ ๋ฐฐ์นํ์ธ์.์ค๊ตญ์ด ASR (์ถ๊ฐ ๊ธฐ๋ฅ)์ ๊ฒฝ์ฐ, Damo ASR Model, Damo VAD Model ๋ฐ Damo Punc Model ์์ ๋ชจ๋ธ์ ๋ค์ด๋ก๋ํ๊ณ ,
tools/asr/models
๋๋ ํ ๋ฆฌ์ ๋ฐฐ์นํ์ธ์.์์ด ๋๋ ์ผ๋ณธ์ด ASR (์ถ๊ฐ ๊ธฐ๋ฅ)์ ๊ฒฝ์ฐ, Faster Whisper Large V3 ์์ ๋ชจ๋ธ์ ๋ค์ด๋ก๋ํ๊ณ ,
tools/asr/models
๋๋ ํ ๋ฆฌ์ ๋ฐฐ์นํ์ธ์. ๋ํ, ๋ค๋ฅธ ๋ชจ๋ธ ์ ๋ ์ ์ ๋์คํฌ ์ฉ๋์ผ๋ก ๋น์ทํ ํจ๊ณผ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
๋ฐ์ดํฐ์ ํ์
ํ ์คํธ ์์ฑ ํฉ์ฑ(TTS) ์ฃผ์ .list ํ์ผ ํ์:
vocal_path|speaker_name|language|text
์ธ์ด ์ฌ์ :
- 'zh': ์ค๊ตญ์ด
- 'ja': ์ผ๋ณธ์ด
- 'en': ์์ด
์์:
D:\GPT-SoVITS\xxx/xxx.wav|xxx|en|I like playing Genshin.
๋ฏธ์ธ ์กฐ์ ๋ฐ ์ถ๋ก
WebUI ์ด๊ธฐ
ํตํฉ ํจํค์ง ์ฌ์ฉ์
go-webui.bat
์ ๋๋ธ ํด๋ฆญํ๊ฑฐ๋ go-webui.ps1
๋ฅผ ์ฌ์ฉํ์ญ์์ค.
V1์ผ๋ก ์ ํํ๋ ค๋ฉด, go-webui-v1.bat
์ ๋๋ธ ํด๋ฆญํ๊ฑฐ๋ go-webui-v1.ps1
๋ฅผ ์ฌ์ฉํ์ญ์์ค.
๊ธฐํ
python webui.py <์ธ์ด(์ต์
)>
V1์ผ๋ก ์ ํํ๋ ค๋ฉด,
python webui.py v1 <์ธ์ด(์ต์
)>
๋๋ WebUI์์ ์๋์ผ๋ก ๋ฒ์ ์ ์ ํํ์ญ์์ค.
๋ฏธ์ธ ์กฐ์
๊ฒฝ๋ก ์๋ ์ฑ์ฐ๊ธฐ๊ฐ ์ง์๋ฉ๋๋ค
1. ์ค๋์ค ๊ฒฝ๋ก๋ฅผ ์
๋ ฅํ์ญ์์ค.
2. ์ค๋์ค๋ฅผ ์์ ์ฒญํฌ๋ก ๋ถํ ํ์ญ์์ค.
3. ๋
ธ์ด์ฆ ์ ๊ฑฐ(์ต์
)
4. ASR ์ํ
5. ASR ์ ์ฌ๋ฅผ ๊ต์ ํ์ญ์์ค.
6. ๋ค์ ํญ์ผ๋ก ์ด๋ํ์ฌ ๋ชจ๋ธ์ ๋ฏธ์ธ ์กฐ์ ํ์ญ์์ค.
์ถ๋ก WebUI ์ด๊ธฐ
ํตํฉ ํจํค์ง ์ฌ์ฉ์
go-webui-v2.bat
์ ๋๋ธ ํด๋ฆญํ๊ฑฐ๋ go-webui-v2.ps1
๋ฅผ ์ฌ์ฉํ ๋ค์ 1-GPT-SoVITS-TTS/1C-inference
์์ ์ถ๋ก webui๋ฅผ ์ฝ๋๋ค.
๊ธฐํ
python GPT_SoVITS/inference_webui.py <์ธ์ด(์ต์
)>
๋๋
python webui.py
๊ทธ๋ฐ ๋ค์ 1-GPT-SoVITS-TTS/1C-inference
์์ ์ถ๋ก webui๋ฅผ ์ฝ๋๋ค.
V2 ๋ฆด๋ฆฌ์ค ๋ ธํธ
์๋ก์ด ๊ธฐ๋ฅ:
ํ๊ตญ์ด ๋ฐ ๊ด๋ฅ์ด ์ง์
์ต์ ํ๋ ํ ์คํธ ํ๋ก ํธ์๋
์ฌ์ ํ์ต ๋ชจ๋ธ์ด 2์ฒ ์๊ฐ์์ 5์ฒ ์๊ฐ์ผ๋ก ํ์ฅ
์ ํ์ง ์ฐธ์กฐ ์ค๋์ค์ ๋ํ ํฉ์ฑ ํ์ง ํฅ์
V1 ํ๊ฒฝ์์ V2๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด:
pip install -r requirements.txt
๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๋ถ ํจํค์ง ์ ๋ฐ์ดํธgithub์์ ์ต์ ์ฝ๋๋ฅผ ํด๋ก ํ์ญ์์ค.
huggingface์์ V2 ์ฌ์ ํ์ต ๋ชจ๋ธ์ ๋ค์ด๋ก๋ํ์ฌ
GPT_SoVITS\pretrained_models\gsv-v2final-pretrained
์ ๋ฃ์ผ์ญ์์ค.์ค๊ตญ์ด V2 ์ถ๊ฐ: G2PWModel_1.1.zip (G2PW ๋ชจ๋ธ์ ๋ค์ด๋ก๋ํ์ฌ ์์ถ์ ํ๊ณ
G2PWModel
๋ก ์ด๋ฆ์ ๋ณ๊ฒฝํ ๋ค์GPT_SoVITS/text
์ ๋ฐฐ์นํฉ๋๋ค.)
ํ ์ผ ๋ชฉ๋ก
์ต์ฐ์ ์์:
- ์ผ๋ณธ์ด ๋ฐ ์์ด ์ง์ญํ.
- ์ฌ์ฉ์ ๊ฐ์ด๋.
- ์ผ๋ณธ์ด ๋ฐ ์์ด ๋ฐ์ดํฐ์ ๋ฏธ์ธ ์กฐ์ ํ๋ จ.
๊ธฐ๋ฅ:
- ์ ๋ก์ท ์์ฑ ๋ณํ (5์ด) / ์๋์ ์์ฑ ๋ณํ (1๋ถ).
- TTS ์๋ ์ ์ด.
-
ํฅ์๋ TTS ๊ฐ์ ์ ์ด. - SoVITS ํ ํฐ ์ ๋ ฅ์ ๋จ์ด ํ๋ฅ ๋ถํฌ๋ก ๋ณ๊ฒฝํด ๋ณด์ธ์.
- ์์ด ๋ฐ ์ผ๋ณธ์ด ํ ์คํธ ํ๋ก ํธ ์๋ ๊ฐ์ .
- ์์ ํฌ๊ธฐ์ ํฐ ํฌ๊ธฐ์ TTS ๋ชจ๋ธ ๊ฐ๋ฐ.
- Colab ์คํฌ๋ฆฝํธ.
- ํ๋ จ ๋ฐ์ดํฐ์ ํ์ฅ (2k ์๊ฐ์์ 10k ์๊ฐ).
- ๋ ๋์ sovits ๊ธฐ๋ณธ ๋ชจ๋ธ (ํฅ์๋ ์ค๋์ค ํ์ง).
- ๋ชจ๋ธ ๋ธ๋ ๋ฉ.
(์ถ๊ฐ์ ์ธ) ๋ช ๋ น์ค์์ ์คํํ๋ ๋ฐฉ๋ฒ
๋ช ๋ น์ค์ ์ฌ์ฉํ์ฌ UVR5์ฉ WebUI ์ด๊ธฐ
python tools/uvr5/webui.py "<infer_device>" <is_half> <webui_port_uvr5>
๋ธ๋ผ์ฐ์ ๋ฅผ ์ด ์ ์๋ ๊ฒฝ์ฐ UVR ์ฒ๋ฆฌ๋ฅผ ์ํด ์๋ ํ์์ ๋ฐ๋ฅด์ญ์์ค. ์ด๋ ์ค๋์ค ์ฒ๋ฆฌ๋ฅผ ์ํด mdxnet์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
python mdxnet.py --model --input_root --output_vocal --output_ins --agg_level --format --device --is_half_precision
๋ช ๋ น์ค์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์ธํธ์ ์ค๋์ค ๋ถํ ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
python audio_slicer.py \
--input_path "<path_to_original_audio_file_or_directory>" \
--output_root "<directory_where_subdivided_audio_clips_will_be_saved>" \
--threshold <volume_threshold> \
--min_length <minimum_duration_of_each_subclip> \
--min_interval <shortest_time_gap_between_adjacent_subclips>
--hop_size <step_size_for_computing_volume_curve>
๋ช ๋ น์ค์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ธํธ ASR ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋๋ค(์ค๊ตญ์ด๋ง ํด๋น).
python tools/asr/funasr_asr.py -i <input> -o <output>
ASR ์ฒ๋ฆฌ๋ Faster_Whisper(์ค๊ตญ์ด๋ฅผ ์ ์ธํ ASR ๋งํน)๋ฅผ ํตํด ์ํ๋ฉ๋๋ค.
(์งํ๋ฅ ํ์์ค ์์, GPU ์ฑ๋ฅ์ผ๋ก ์ธํด ์๊ฐ ์ง์ฐ์ด ๋ฐ์ํ ์ ์์)
python ./tools/asr/fasterwhisper_asr.py -i <input> -o <output> -l <language> -p <precision>
์ฌ์ฉ์ ์ ์ ๋ชฉ๋ก ์ ์ฅ ๊ฒฝ๋ก๊ฐ ํ์ฑํ๋์์ต๋๋ค.
๊ฐ์ฌ์ ๋ง
๋ค์ ํ๋ก์ ํธ์ ๊ธฐ์ฌ์๋ค์๊ฒ ํน๋ณํ ๊ฐ์ฌ๋๋ฆฝ๋๋ค:
์ด๋ก ์ฐ๊ตฌ
์ฌ์ ํ์ต ๋ชจ๋ธ
์ถ๋ก ์ฉ ํ ์คํธ ํ๋ก ํธ์๋
WebUI ๋๊ตฌ
@Naozumi520 ๋๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๊ด๋ฅ์ด ํ์ต ์๋ฃ๋ฅผ ์ ๊ณตํด ์ฃผ์๊ณ , ๊ด๋ฅ์ด ๊ด๋ จ ์ง์์ ์ง๋ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.