danpapa blog

趣味のプログラミング等について

CodeBlockーKerasのモデルをC++で読み込む

Kerasのモデルで推論(C++)

 Keras とは?

keras.io

これです。機械学習を行うものです。「AI」とか「人工知能」と言われているものでしょうか。これを使って仕事でも問題解決に取り組んだりしています。まぁ、素人のdanpapaがやれることは限られていますがねw

 

 Pythonの処理速度

Keras+TensorFlowを動かすのに、Pythonという言語でプログラムを書いているんですが、処理速度は速いとは言えません。。。が凄く便利で人気のある言語のようです。で、処理速度ってどれくらい必要かというと、danpapaの書いてるプログラムでは、3000回以上/秒の推論を行わないと使い物にならない。。。

まぁ、モデル自体はそんなに複雑なものでは無いので、大した時間かからないのですが、ひたすら繰り返し処理を行っているので、Pythonでは700回/秒程度の処理速度しか出ませんでした。他のすべての処理も合わせると100回以下/秒という結果。これは無理ですw

 

ネット上をひたすら彷徨う

 よく見かけるのは、TensorFlowのモデルを作成し、C++からTensorFlowを操作する?というような内容。これにはTesorFlowをビルドして、libtensorflow_cc.soとかライブラリを作成して・・・長いので省略w ビルドまではやったけど、TensorFlowでモデル作成までは無理でした。難しすぎるw

で、次がKerasのモデルをTensorFlowのモデルに変換して・・・C++でというものでしたが、TensorFlowでの処理方法を理解できてなかったので無理。

ここまで1週間くらい、いろいろ試して挫折しての繰り返しwきつかった。

 

救世主現る

今まで彷徨っていたページの中に見落としていたものが2つもありましたw

github.com

github.com

世の中凄い人が沢山いるようで、danpapaは大変助かります。

さくっと中身を読んでみると、両方ともKerasのモデルをTensorFlowのモデルにはしないようです。期待できます。更に読んでみると「kerasify」の方はビルドしてライブラリ作成とか無さそうです。簡単そうなのでやってみました。

 

kerasifyを試す

まず、上のリンクからGitHubへ行ってダウンロードなりしてきます。

「README.md」の「Example」から下を実際やってみます。

  • まずはmake_model.pyを作ります。(そのままコピー)
  • Pythonでmake_model.pyを実行(kerasify.pyをimportするので同じ階層にでも置いといてください。)
  • CodeBlocksでConsoleプロジェクトを作成します。
  • 赤色:keras_model.h 青色:keras_model.ccをプロジェクトに追加

f:id:danpapa_hry:20190313203615p:plain

  • 赤色と青色を追加(コピーです)

f:id:danpapa_hry:20190313204730p:plain

 これで、「make_model.py」を実行したときに作成された「example.model」が読み込まれ、推論が行われます。感動するくらい簡単です。

 

処理速度は向上するのか?

では、実際danpapaが仕事で作ったモデルも試してみます。さすがに詳細は出せないのでご勘弁を。。。

 

結果発表!

なんと700回/秒 ⇒ 75000回/秒と大幅に処理速度が向上しました。

推論の精度もdanpapaの使用する範囲では問題なしです。この結果を見た瞬間、会社の事務所内で一人ガッツポーズを取ってましたw

 

あとこれ、推論にTensorFlowを使用していないみたいで、TensorFlowをインストールしてないWindows 32bitのパソコンでも推論が動作しました。会社内のPCは基本Windows 32bitなのですっごく有難いw