7

この記事は最終更新日から1年以上が経過しています。

@nezumi_tech

【動いた報告】「キズナアイとねこますの声を入れ替える機械学習」をWindows 10で動かしてみた

概要

@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です。
image.png

きりたんを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した画像かと思います。image.png

追記

音声の変換

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

これで、3つのwavファイルが生成されました。
image.png

途中から再開

ある時点での結果を引き継いで学習を再開するには、

python trainer.py -i 200000 -r results\snapshot.npz -v k.wav -w t.wav -s k.wav -u t.wav

などと実行すればOKです。

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
nezumi_tech
この記事は以下の記事からリンクされています

コメント

コメント失礼いたします。
素晴らしい記事をありがとうございます。
こちらを参考に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"'
というエラーが出てしまいます。何か解決方法がありましたらご教授いただければと思います。
何卒宜しくお願い致します。

0

@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

返信ありがとうございます。
ご教授の通り実行したところ無事エラーなく実行できました。
この度は誠にありがとうございます。

0

質問をお願いいたします。

きりたん 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ファイルは、テスト用のファイルにしなくてもよいのでしょうか?

よろしくお願いいたします

0

@toshi1234567890a

複数の音声がある場合、1ファイルにまとめるのでしょうか?

1つのファイルにまとめます。

後ろの2ファイルは、テスト用のファイルにしなくてもよいのでしょうか?

トレーニング用のファイルと全く異なるファイルを使用する必要があるかもしれません…その辺のことはよく分かっていません。

0

ありがとうございます

0

すみません、また質問させてください。

!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

0

すみません解決しました

chainer 7 だとエラーが出ます

version 6にすると動きました

0
あなたもコメントしてみませんか :)
ユーザー登録
すでにアカウントを持っている方はログイン
記事投稿イベント開催中
BitriseでCI/CDを実現したモバイルアプリ開発の成果を共有しよう!
~
こんなことまで!?ブラウザでできること選手権
~