長いタイトルですね(汗)
Deep Learningの開発に際して「Pythonのプログラミングや学習までをLenuxで行い,推論をWindowsアプリで行いたい」ケースは多いと思います.
幾つかやり方はあると思うのですが,今回は以下の3通りを試します.
- WindowsにPython版tensorflowをセットアップ & Lenuxからcheckpointを移植
- WindowsにPython版tensorflowをセットアップ & Lenuxからpbファイルを移植
- Windowsにtensorflow c++ APIをセットアップ & Lenuxからpbファイルを移植
長くなるので,3回に分けて投稿します.
結論から申し上げておくと,3. には失敗しました.
これが一番やりたいんですが...
0. 環境
使用したPC環境です.
今回,Windows側にはGPU環境を導入しませんでした.
また別の機械にトライしようと思います.
Lenux
1. 学習済みネットワークの作成
今回書いたソースです*1.
↓で,学習済みネットワークを出力しています.
train.py
# output model saver.save(sess, "./model")
出力される↓↓↓↓の4つを,Windows側に移植します.
- chekpoint
- model.data-00000-of-00001
- model.index
- model.meta
2. Windows側のセットアップ
pythonのセットアップ
公式サイト*2からインストーラをダウンロードしてインストールします.
「Add Python 3.7 to PATH」をチェックして,「Install Now」します.
tensorflowのセットアップ
pipでも入れられる様になったみたいですが,wheelを作ってくれている方がいらっしゃる*3ので,今回はそれを使います.
使用中のCPUがAVX2に対応しているかのチェックは,ここ*4を参考にしました.
pythonと一緒にpipも入っているので,↓でインストールします.
pip install tensorflow-1.14.0-cp37-cp37m-win_amd64.whl
コード内で使用しているライブラリもインストールしておきます.
pip install numpy matplotlib pillow
3. 推論処理の実行
上記の4つのファイルを実行ディレクトリに置き,推論を実行します.
学習時と同じ構造のネットワークを構築し,保存しておいたパラメタを適用しています.
apply_model.py
model = model.Model(IMG_SIZE, 0) output = model.inference(x, 1.0) saver = tf.train.Saver() sess = tf.Session() init_op = tf.global_variables_initializer() sess.run(init_op) model_path = tf.train.latest_checkpoint("./") saver.restore(sess, model_path)
こんな感じで結果が出ます.
これは簡単ですね.
※ 画像認識の精度は低いですが,今回は「Windowsでの推論結果がLenuxでの推論結果と一致する」ことに主眼をおいています.