2019.09.15kerasで作った学習済みモデルによる推論をwebサービスにしようとしたときの備忘録です。結果的に、webサービス化に失敗したので、検討している方の参考になればと思います。推論サーバに学習済みモデルを追加/削除する推論サーバに画像を渡し、登録済みモデルを用いて推論をするでした。できなかったこと学習済みモデルを複数登録した場合、1つだけ削除したいケースがあると思います。学習済みモデルをGPUメモリ上に複数展開した場合、そのうち1つだけ削除する(つまり、GPUメモリ上から削除する)ことができませんでした。一つ、マルチスレッドでの学習済みモデルのGPUメモリ展開ができませんでした。途中まで実装したコード途中まで実装した結果を載せます。色々な制約があるため、加工したソースを載せます。そのままでは動きませんので、ご注意を。WebAPIflaskを使ったシンプルな実装です。APIはset_modelとpredictのみで、学習済みモデルにIDを付与して識別します。検討段階の実装のため、学習済みモデル及び推論対象の画像はファイルパスを渡し、サーバ側で読み込みをしていました。学習済みモデルの管理はKerasModelManagerというクラスを作成し、そこで行っています。本来はset_modelにDELETEメソッドも追加したかったのですが、複数モデルインポートしている状態で1つのモデルを削除することができなかったので、実装していません。Flaskで学ぶWebアプリケーションのしくみとつくり方ソシムAmazonの商品レビュー・口コミを見る学習済みモデル管理クラス学習済みモデルを管理するクラスであるKerasModelManagerは、学習済みモデルのIDと学習済みモデルを保持するKerasModelクラスのインスタンスを保持するdictをclass変数に持ちます。class変数にすることで、KerasModelManagerのインスタンスが複数生成されても、モデルを一意に管理できます。学習済みモデルをインポートするset_model関数は、セマフォを使った排他処理になっています。これはマルチスレッドでの学習済みモデルのインポートが不可能なためです。モデルをインポートした後、ダミー画像の推論をしています。理由は不明ですが、この処理がないとマルチスレッドでの推論が正常に動作しませんでした。vae.predict(image)学習済みモデルクラス学習済みモデルクラスのKerasModelですが、グローバル変数にTensorFlowのグラフを宣言し、学習済みモデルのインポート及び学習済みモデルを使った推論時にwith構文で使用します。しないと複数アクセス時に排他制御がうまくいかず、エラーが発生します。self.model.predict(img)PythonとKerasによるディープラーニングマイナビ出版Amazonの商品レビュー・口コミを見るまとめkerasの推論をWebサービスで実現しようとした際の備忘録でした。kerasはモデルの構築および学習に使うのが効果的であって、推論、特にパフォーマンスを求められる推論には向いていないことがあらためてわかりました。kerasでの推論サーバの実装がうまくいかなかったので、kerasをOpenVINOに変換して実装した例を別の記事で紹介しようと思います。【2019.09.22追記】kerasをOpenVINOに変換するためにはまず.pbファイルに変換する必要がありました。.pbファイルへ変換した際のコードなどを記事にまとめたので紹介します。kerasで作った学習済みモデルを.pbファイルに変換するkerasで作った学習済みモデルをpbファイルに変換したので備忘録です。shell】.zipが解凍できない.zipファイルが解凍できないケースを発見したのでメモ。C#、python、PowerShellのプログラムで.zipを解凍できません。前回の投稿に引き続きGo言語の入門をしていきます。今回は、変数宣言についてまとめます。worldした記事はこちら。実行する...ソフトウェア著作権フリーな画像を探す方法ブログ記事や仕事の資料作成など、画像があった方がわかりやすいことありますよね。手元にイメージ通りの画像があることは少ないです。近年は宅配等で商業利用できるレベルまで自立制御が高度化しており、注目されています。同時に、悪用されるケースも目立ってきており、悪い面も目立ってきています。コメントをキャンセルメールアドレスが公開されることはありません。※サイト上に表示された文字を入力してください。ヒゲメガネメーカー勤務のリーマンエンジニア。いろんなことを記事にします。リーマンエンジニアのブログ.ホーム検索トップサイドバ。