WIP: merge with frontend

This commit is contained in:
wataru 2022-08-23 03:57:54 +09:00
parent e6e33a8d02
commit 275c008a61
6 changed files with 182 additions and 20 deletions

View File

@ -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
View 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 "$@"

View File

@ -1,6 +1,5 @@
#!/bin/bash
## 005_expより複数話者対応。myvoiceのフォルダ階層を一つ深くする。
EXP_NAME=$1
echo $EXP_NAME

View File

@ -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
View 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

View File

@ -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 "$@"