概要
@KSRG_Miyabi氏の、「キズナアイとねこますの声を入れ替える機械学習をした」を、Windows 10のコンピュータで動かしてみました。
(注:私は人工知能プログラミングについて、マトモな知識を持っていません。場当たり的操作で何とか動かしただけです。手順に不適切な点があるかもしれません。)
環境
ハードウェア
種類 | 説明 |
---|---|
CPU | Core i7 8700K |
メモリ | 16GB |
GPU | NVIDIA GTX 1080 8GB |
ソフトウェア
種類 | バージョン |
---|---|
OS | Windows 10 Pro 64bit 10.0.18362 |
Python3 | 3.7.2 |
Chainer | 6.2.0 |
cupy-cuda101 | 6.2.0 |
numpy | 1.17.0+mkl |
scipy | 1.3.0 |
CUDA | 10.1.105_418.96 |
環境構築
Pythonを入れる
Microsoft StoreでPython3.7をインストールした。
https://www.microsoft.com/store/productId/9NJ46SX7X90P
numpyが動かなかったのでインストールし直す
import numpy
したときに怒られました。
OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
「Python3.5 + NumPy + SciPy をWindows10にインストールして動かす」を参考にして、numpy‑1.17.0+mkl‑cp37‑cp37m‑win_amd64.whl
をダウンロードしてpip install
しました。
scipyを入れる…はずだが
インストールし直さなくても、import scipy
できました。
Cupyを入れる
Cupyのdocを参考にして
- CUDA 10.1を入れる
-
pip uninstall cupy
で最初から入ってるやつを削除 -
pip install cupy-cuda101
でCUDA10.1用のcupyを入れる
Chainerを入れる…はずだが
インストールし直さなくても、import chainer
できました。
以上で、環境構築が完了しました。
動かす
コードをダウンロード
Deep_VoiceChangerから、@KSRG_Miyabi氏のコードを落としてきます。
音声を準備
適当に2種類用意します。私は「VOICEROID 東北きりたん」と、私の声を準備しました。
サンプリング周波数16kHzで書き出すのには、Audacityを使いました。「プロジェクトのサンプリング周波数」を16000にして書き出せばOKです。
きりたんを1_16.wav、私を2_16.wavとして、コードと同じディレクトリに保存しました。
プログラムに食わせて実行
一見すると、
python trainer.py -v 1_16.wav -w 2_16.wav
で動きそうですが、怒られます。
FileNotFoundError: [Errno 2] No such file or directory: '../src/KizunaAI_short.wav'
テスト用ファイル名のオプションを設定しないと、デフォルトでは../src/KizunaAI_short.wav
が使われるようです。-s -uオプションも使って、
python trainer.py -v 1_16.wav -w 2_16.wav -s 1_16.wav -u 2_16.wav
とすると、うまく動きます。
ひたすら待つ
1.6 iters/secくらいの速度?が出ました。終了までの予想時間は16時間。学習データが5分と3分程度と、非常に少ないのが原因ですかね…
実行結果
1回の「epoch」が完了する毎に、resuitsフォルダに色々と出力されます。
previewに入っているのが、テスト用の音声を変換したものです。
imageの中身はFFTした画像かと思います。
追記
音声の変換
320epochほど回した後、音声の変換を試してみました。
テスト用の音声「test.wav」を、トレーニング用の音声と同じく、16kHzのモノラルで作成します。
その後、convertor.pyを実行します。
> python convertor.py
enter gpu number(if you have no gpu, enter -1)...0
enter netA path...results\generator_ab.npz
enter netB path...results\generator_ba.npz
enter wave path...test.wav
enter batch size...20
途中から再開
ある時点での結果を引き継いで学習を再開するには、
python trainer.py -i 200000 -r results\snapshot.npz -v k.wav -w t.wav -s k.wav -u t.wav
などと実行すればOKです。
コメント
@retta0
@nezumi_tech(編集済み) 1
@retta0
@toshi1234567890a0
@nezumi_tech(編集済み) 0
@toshi1234567890a0
@toshi1234567890a0
@toshi1234567890a0
コメント失礼いたします。
素晴らしい記事をありがとうございます。
こちらを参考にtrainer.pyを実行後convertor.pyをそれぞれのパスを
C:\Users\n\Desktop\Deep_VoiceChanger-master1\Deep_VoiceChanger-master>python convertor.py
enter gpu number(if you have no gpu, enter -1)...0
enter netA path...\n\Desktop\Deep_VoiceChanger-master1\Deep_VoiceChanger-master\results\generator_ab.npz"
enter netB path..."C:\Users\n\Desktop\Deep_VoiceChanger-master1\Deep_VoiceChanger-master\results\generator_ba.npz"
enter wave path..."C:\Users\n\Desktop\Deep_VoiceChanger-master1\Deep_VoiceChanger-master\results\test.wav"
enter batch size...16
のように指定し実行しましたが
OSError: [Errno 22] Invalid argument: '"C:\Users\n\Desktop\Deep_VoiceChanger-master1\Deep_VoiceChanger-master\results\test.wav"'
というエラーが出てしまいます。何か解決方法がありましたらご教授いただければと思います。
何卒宜しくお願い致します。
@retta
エラー文で検索すると、以下の記事がヒットしました。
https://qiita.com/budourush/items/a21f7afc48d0bec050ab
Pythonでは
\t
が特殊な扱いを受けるようです(\n
で改行と同じ感じ)。ですから、
\test.wav
という文字列をそのまま入力するとエラーが発生します。場当たり的な解決法ですが、
\t
という文字列を入力しない、つまり「t」から始まらないファイル名を指定する、もしくはカレントディレクトリが
C:\Users\n\Desktop\Deep_VoiceChanger-master1\Deep_VoiceChanger-master
にあることを前提として、
enter wave path...test.wav
と入力すれば、カレントディレクトリ直下にtest.wavが生成されると思います。
返信ありがとうございます。
ご教授の通り実行したところ無事エラーなく実行できました。
この度は誠にありがとうございます。
質問をお願いいたします。
きりたん 1_16.wav、
私 2_16.wav
これらの音声は、それぞれ複数の音声がある場合、1ファイルにまとめるのでしょうか?
それから
python trainer.py -v 1_16.wav -w 2_16.wav -s 1_16.wav -u 2_16.wav
は、
python trainer.py -v 1_16.wav -w 2_16.wav -s 1_16t.wav -u 2_16t.wav
というように、後ろの2ファイルは、テスト用のファイルにしなくてもよいのでしょうか?
よろしくお願いいたします
@toshi1234567890a
1つのファイルにまとめます。
トレーニング用のファイルと全く異なるファイルを使用する必要があるかもしれません…その辺のことはよく分かっていません。
ありがとうございます
すみません、また質問させてください。
!python trainer.py -v a.wav -w b.wav -s a.wav -u b.wav
を実行してみましたら
以下のエラーが出ました
素人なので、エラー内容が良くわかりません
何か解決方法あれば、教えていただけると幸いです。
よろしくお願いいたします。
Traceback (most recent call last):
File "trainer.py", line 189, in
main()
File "trainer.py", line 167, in main
updater = Updater(train_iter_a, train_iter_b, opt_g_a, opt_g_b, opt_d_a, opt_d_b, device=args.gpu)
File "updater.py", line 34, in init
self.device = device
AttributeError: can't set attribute
すみません解決しました
chainer 7 だとエラーが出ます
version 6にすると動きました