mirror of
https://github.com/w-okada/voice-changer.git
synced 2025-02-02 16:23:58 +03:00
WIP: merge with frontend
This commit is contained in:
parent
e6e33a8d02
commit
275c008a61
25
README.md
25
README.md
@ -1,3 +1,7 @@
|
||||
Voice Changer AI Trainer and Player Container
|
||||
----
|
||||
|
||||
[MMVC](https://github.com/isletennos/MMVC_Trainer)のトレーニングと実行を簡単にするためのDockerコンテナです。
|
||||
|
||||
# 使用方法
|
||||
## 前提
|
||||
@ -31,11 +35,22 @@ Sun Sep 15 22:40:52 2019
|
||||
```
|
||||
こんな感じの出力が出ればOKです。
|
||||
|
||||
ボイスチェンジ時にはGPUは必須ではありません。あればより高速にぼいちぇんできるかもしれません。
|
||||
ボイスチェンジ時にはGPUは必須ではありません。あればより高速にボイスチェンジできるかもしれません。
|
||||
|
||||
## トレーニングデータの準備
|
||||
### Data作成(自分の声)
|
||||
|
||||
[MMVC](https://github.com/isletennos/MMVC_Trainer)のドキュメントに従って、ITAコーパスなどの台本データ(textデータ)を入手し、でwavデータを作成してください。textデータとwavデータは、dataset/00_myvoiceフォルダの下においてください。
|
||||
|
||||
wavデータの作成は、こちらの[voice-recorder](https://github.com/w-okada/voice-recorder)アプリケーションを使用しても作成できます。
|
||||
wavのサンプリングレートやファイル名など、MMVCに適したデータを作成するように作られているので、いくらか手間が省けるかと思います。
|
||||
|
||||
### Data作成(なりたい声)
|
||||
[MMVC](https://github.com/isletennos/MMVC_Trainer)のドキュメントに従って、公式サポートされている声データ(.zip形式)を取得してください。データはzip形式のまま、datasetフォルダにおいてください。
|
||||
|
||||
|
||||
### Datasetの中身
|
||||
上記Data作成を実施すると、次のようなフォルダ構成になると思います。ご確認ください。
|
||||
```
|
||||
$ ls dataset -l
|
||||
合計 1656692
|
||||
@ -61,10 +76,16 @@ $ EXP_NAME=001_exp
|
||||
# テスト用フォルダ作成
|
||||
$ sh template.sh $EXP_NAME
|
||||
|
||||
$ docker run -it --gpus all --shm-size=2g \
|
||||
|
||||
docker run -v .:/go/src/app:ro [container id]
|
||||
USER_ID=$(id -u)
|
||||
GROUP_ID=$(id -g)
|
||||
$ USER_ID=$(id -u) docker run -it --gpus all --shm-size=2g \
|
||||
-v `pwd`/exp/${EXP_NAME}/dataset:/MMVC_Trainer/dataset \
|
||||
-v `pwd`/exp/${EXP_NAME}/logs:/MMVC_Trainer/logs \
|
||||
-v `pwd`/exp/${EXP_NAME}/filelists:/MMVC_Trainer/filelists \
|
||||
-e LOCAL_UID=$(id -u $USER) \
|
||||
-e LOCAL_GID=$(id -g $USER) \
|
||||
-p 6008:6006 mmvc_trainer_docker
|
||||
```
|
||||
|
||||
|
13
start.sh
Normal file
13
start.sh
Normal file
@ -0,0 +1,13 @@
|
||||
#!/bin/bash
|
||||
|
||||
EXP_NAME=$1
|
||||
shift
|
||||
|
||||
docker run -it --gpus all --shm-size=2g \
|
||||
-v `pwd`/exp/${EXP_NAME}/dataset:/MMVC_Trainer/dataset \
|
||||
-v `pwd`/exp/${EXP_NAME}/logs:/MMVC_Trainer/logs \
|
||||
-v `pwd`/exp/${EXP_NAME}/filelists:/MMVC_Trainer/filelists \
|
||||
-v `pwd`/exp/${EXP_NAME}/filelists:/voice-changer-internal/voice-change-service/filelists
|
||||
-e LOCAL_UID=$(id -u $USER) \
|
||||
-e LOCAL_GID=$(id -g $USER) \
|
||||
-p 6008:6006 mmvc_trainer_docker "$@"
|
@ -1,6 +1,5 @@
|
||||
#!/bin/bash
|
||||
|
||||
## 005_expより複数話者対応。myvoiceのフォルダ階層を一つ深くする。
|
||||
EXP_NAME=$1
|
||||
|
||||
echo $EXP_NAME
|
||||
|
@ -36,7 +36,7 @@ RUN cythonize -3 -i core.pyx \
|
||||
|
||||
FROM debian:bullseye-slim
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y python3-pip espeak\
|
||||
&& apt-get install -y python3-pip espeak gosu\
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
@ -46,11 +46,20 @@ COPY --from=base /MMVC_Trainer /MMVC_Trainer
|
||||
COPY fine_model/G_180000.pth /MMVC_Trainer/fine_model/G_180000.pth
|
||||
COPY fine_model/D_180000.pth /MMVC_Trainer/fine_model/D_180000.pth
|
||||
|
||||
# RUN groupadd -g 61000 docker
|
||||
# RUN useradd -g 61000 -l -m -s /bin/false -u 61000 docker
|
||||
# USER docker
|
||||
|
||||
WORKDIR /MMVC_Trainer
|
||||
ADD /setup.sh /MMVC_Trainer/
|
||||
ADD /exec.sh /MMVC_Trainer/
|
||||
RUN chmod 0777 . -R
|
||||
# RUN chmod 0777 exec.sh
|
||||
# RUN chmod 0666 train_ms.py
|
||||
RUN chmod 0777 /usr/local/lib/python3.9/dist-packages/pyopenjtalk
|
||||
|
||||
# ENTRYPOINT ["/bin/bash", "setup.sh"]
|
||||
# CMD [ "8", "false"]
|
||||
ENTRYPOINT ["/bin/bash", "setup.sh"]
|
||||
CMD [ "-h"]
|
||||
|
||||
# FROM ubuntu:focal-20220531 as base
|
||||
|
||||
|
122
trainer/exec.sh
Normal file
122
trainer/exec.sh
Normal file
@ -0,0 +1,122 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 参考:https://programwiz.org/2022/03/22/how-to-write-shell-script-for-option-parsing/
|
||||
|
||||
set -eu
|
||||
|
||||
echo "------"
|
||||
echo "$@"
|
||||
echo "------"
|
||||
|
||||
usage() {
|
||||
echo "
|
||||
usage:
|
||||
For training
|
||||
$0 [-t] [-b batch_size] [-r]
|
||||
-t: flag for training mode
|
||||
-b: batch_size.
|
||||
-r: flag for resuming training.
|
||||
For changing voice
|
||||
$0 [-v] [-c config] [-m model]
|
||||
-v: flag for voice change mode
|
||||
-c: config
|
||||
-m: model name
|
||||
For help
|
||||
$0 [-h]
|
||||
-h: show this help
|
||||
" >&2
|
||||
}
|
||||
warn () {
|
||||
echo "! ! ! $1 ! ! !"
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
training_flag=false
|
||||
batch_size=10
|
||||
resume_flag=false
|
||||
|
||||
voice_change_flag=false
|
||||
config=
|
||||
model=
|
||||
|
||||
# オプション解析
|
||||
while getopts tb:rvc:m:h OPT; do
|
||||
case $OPT in
|
||||
t)
|
||||
training_flag=true
|
||||
;;
|
||||
b)
|
||||
batch_size="$OPTARG"
|
||||
;;
|
||||
r)
|
||||
resume_flag=true
|
||||
;;
|
||||
v)
|
||||
voice_change_flag=true
|
||||
;;
|
||||
c)
|
||||
config="$OPTARG"
|
||||
;;
|
||||
m)
|
||||
model="$OPTARG"
|
||||
;;
|
||||
h | \?)
|
||||
usage && exit 1
|
||||
;;
|
||||
|
||||
esac
|
||||
done
|
||||
|
||||
|
||||
## コマンドライン引数から、オプション引数分を削除
|
||||
# shift $((OPTIND - 1))
|
||||
|
||||
# モード解析
|
||||
if $training_flag && $voice_change_flag; then
|
||||
warn "-t(トレーニングモード) と -v(ボイチェンモード)は同時に指定できません。"
|
||||
exit 1
|
||||
elif $training_flag; then
|
||||
echo "■■■ ト レ ー ニ ン グ モ ー ド ■■■"
|
||||
elif $voice_change_flag; then
|
||||
echo "■■■ ボ イ チ ェ ン モ ー ド ■■■"
|
||||
else
|
||||
warn "-t(トレーニングモード) と -v(ボイチェンモード)のいずれかを指定してください。"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
|
||||
if $training_flag; then
|
||||
|
||||
|
||||
python3 create_dataset_jtalk.py -f train_config -s 24000 -m dataset/multi_speaker_correspondence.txt
|
||||
# date_tag=`date +%Y%m%d%H%M%S`
|
||||
sed -ie 's/80000/8000/' train_ms.py
|
||||
sed -ie "s/\"batch_size\": 10/\"batch_size\": $batch_size/" configs/train_config.json
|
||||
|
||||
python3 -m tensorboard.main --logdir logs --port 6006 --host 0.0.0.0 &
|
||||
|
||||
if ${resume_flag}; then
|
||||
echo "トレーニング再開。バッチサイズ: ${batch_size}。"
|
||||
python3 train_ms.py -c configs/train_config.json -m vc
|
||||
else
|
||||
echo "トレーニング開始。バッチサイズ: ${batch_size}。"
|
||||
python3 train_ms.py -c configs/train_config.json -m vc -fg fine_model/G_180000.pth -fd fine_model/D_180000.pth
|
||||
fi
|
||||
fi
|
||||
|
||||
# if $voice_change_flag; then
|
||||
# if [[ -z "$config" ]]; then
|
||||
# warn "コンフィグファイル(-c)を指定してください"
|
||||
# fi
|
||||
# if [[ -z "$model" ]]; then
|
||||
# warn "モデルファイル(-m)を指定してください"
|
||||
# fi
|
||||
|
||||
# cp -r /resources/* .
|
||||
# if [[ -e ./setting.json ]]; then
|
||||
# cp ./setting.json ../frontend/dist/assets/setting.json
|
||||
# fi
|
||||
# python3 serverSIO.py 8080 $config $model
|
||||
# fi
|
@ -1,20 +1,18 @@
|
||||
#!/bin/bash
|
||||
|
||||
BATCH_SIZE=$1
|
||||
RESUME=$2
|
||||
echo batch:${BATCH_SIZE}
|
||||
echo resume:${RESUME}
|
||||
# 参考:https://programwiz.org/2022/03/22/how-to-write-shell-script-for-option-parsing/
|
||||
|
||||
python3 create_dataset_jtalk.py -f train_config -s 24000 -m dataset/multi_speaker_correspondence.txt
|
||||
set -eu
|
||||
|
||||
sed -ie 's/80000/8000/' train_ms.py
|
||||
sed -ie "s/\"batch_size\": 10/\"batch_size\": $BATCH_SIZE/" configs/train_config.json
|
||||
# 実行ユーザ作成
|
||||
USER_ID=${LOCAL_UID:-9001}
|
||||
GROUP_ID=${LOCAL_GID:-9001}
|
||||
|
||||
echo ""
|
||||
echo "アプリケーション開始... (内部ユーザー [UID : $USER_ID, GID: $GROUP_ID])"
|
||||
useradd -u $USER_ID -o -m user
|
||||
groupmod -g $GROUP_ID user
|
||||
|
||||
# cd monotonic_align/ \
|
||||
# && cythonize -3 -i core.pyx \
|
||||
# && mv core.cpython-39-x86_64-linux-gnu.so monotonic_align/ \
|
||||
# && cd -
|
||||
|
||||
python3 -m tensorboard.main --logdir logs --port 6006 --host 0.0.0.0 &
|
||||
python3 train_ms.py -c configs/train_config.json -m 20220306_24000 -fg fine_model/G_180000.pth -fd fine_model/D_180000.pth
|
||||
#su user
|
||||
echo "parameter: $@"
|
||||
exec /usr/sbin/gosu user /bin/bash exec.sh "$@"
|
||||
|
Loading…
Reference in New Issue
Block a user