オッサンはDesktopが好き

自作PCや機械学習、自転車のことを脈絡無く書きます

Lenux + tensorflowで作ったDeep Learningの学習済みネットワークを,Windowsに移植して推論する (1)

長いタイトルですね(汗)
Deep Learningの開発に際して「Pythonのプログラミングや学習までをLenuxで行い,推論をWindowsアプリで行いたい」ケースは多いと思います.
幾つかやり方はあると思うのですが,今回は以下の3通りを試します.

  1. WindowsPython版tensorflowをセットアップ & Lenuxからcheckpointを移植
  2. WindowsPython版tensorflowをセットアップ & Lenuxからpbファイルを移植
  3. Windowsにtensorflow c++ APIをセットアップ & Lenuxからpbファイルを移植

長くなるので,3回に分けて投稿します.
結論から申し上げておくと,3. には失敗しました.
これが一番やりたいんですが...

0. 環境

使用したPC環境です.
今回,Windows側にはGPU環境を導入しませんでした.
また別の機械にトライしようと思います.

Lenux

WIndows

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からインストーラをダウンロードしてインストールします.

f:id:changlikesdesktop:20200401061947p:plain:w400 f:id:changlikesdesktop:20200401062158p:plain:w400

「Add Python 3.7 to PATH」をチェックして,「Install Now」します. f:id:changlikesdesktop:20200401062422p:plain:w400

tensorflowのセットアップ

pipでも入れられる様になったみたいですが,wheelを作ってくれている方がいらっしゃる*3ので,今回はそれを使います.

f:id:changlikesdesktop:20200401065642p:plain:w400 f:id:changlikesdesktop:20200401065658p:plain:w400 f:id:changlikesdesktop:20200401065713p:plain:w400 f:id:changlikesdesktop:20200401065728p:plain:w400

使用中の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)

こんな感じで結果が出ます.

f:id:changlikesdesktop:20200401065411p:plain:w400

これは簡単ですね.
※ 画像認識の精度は低いですが,今回は「Windowsでの推論結果がLenuxでの推論結果と一致する」ことに主眼をおいています.