前回作成したbest_result.h5を組み込み機器へ転送しやすいnnpファイルへ変換する。
別のpythonプログラムで、一度best_result.h5を読み込みモデルを作成、速度計測のため一度推論を行い、最後にnnpファイルへ保存する。
contents = {
'networks': [
{'name': 'MyChain',
'batch_size': batch_size,
'outputs': {'yy': yy },
'names': {'xx': xx}}],
'executors': [
{'name': 'runtime',
'network': 'MyChain',
'data': ['xx'],
'output': ['yy']}]}
nnabla.utils.save.save(os.path.join('MyChain.nnp'), contents)
python3 predict.py -i <エフェクト前のwavファイル>
上記を実行すると、同じフォルダにpredicted.wavと、MyChain.nnpができる。
この規模の学習モデルの変換にかかった時間はおおよそ下記のとおり。
1回の推論でかかるおおよその時間:
960/48064バッチサイズ(中間層セル数16)で1秒強かかっている。
出力として使われるデータは、48064=30720
サンプリング周波数48khzとすると、1秒間48000サンプルということで、
本来は30720/48000=0.64秒で終わらないといけない。
CPUパワーのあるデスクトップPC (Core-i5 2500S)2.7Ghz 4コア(ターボブースト3.7Ghz)でこの結果なので、Raspberry pi、Jetso Nano では推論のさせ方を検討しないとリアルタイムで処理はできないことになる。
nnp作成時間:15分くらい時間がかかり、8.15MBのファイルが出来上がる。
※そもそもinput_timestepsから半分も捨てるのはもったいないのでは、ということで、
全部の長さを推論として使う設定、output_timesteps=960(input_timestepsと同値)にして
推論を行ったらどうなるか。
推論が始まりデータが落ち着くまでの間、スパイクノイズが960サンプルで観測される。
スライディングウインドウはこのデータの収れんされていない部分を削って消してくれる働きがあることが分かった。今回の480は削りすぎかもしれないが、学習データの内容によってチューニングできる部分になるだろう。
推測だが、いろいろいじっていると、学習時にTensorboardで観測されたグラフと形状が相似している印象を持った。