ホーム » TensorFlow.js » TensorFlow.js : チュートリアル : TensorFlow SavedModel を TensorFlow.js にインポートする

TensorFlow.js : チュートリアル : TensorFlow SavedModel を TensorFlow.js にインポートする


TensorFlow.js : チュートリアル : TensorFlow SavedModel を TensorFlow.js にインポートする (翻訳/解説)

作成 : (株)クラスキャット セールスインフォメーション
日時 : 04/12/2018

* 本ページは、TensorFlow.js サイトの Tutorials – How to import a TensorFlow SavedModel into TensorFlow.js を翻訳した上で適宜、補足説明したものです:

* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

TensorFlow.js コンバータは事前訓練された TensorFlow SavedModel をブラウザにロードして TensorFlow.js を通して推論を実行するためのオープンソース・ライブラリです。

貴方のモデルをインポートする 2-段階プロセスです :

  1. TensorFlow SavedModel を web friendly フォーマットに変換するために python pip パッケージ。貴方が変換されたモデルを既に持つか、既にホストされたモデル (e.g. MobileNet) を使用している場合には、このステップはスキップしてください。
  2. ロードして推論を実行するための Javascript API (訳注: リンク切れ、おそらくは こちら)。

 

Step 1: SavedModel を web-friendly フォーマットに変換する

TensorFlow.js pip パッケージをインストールします :

  $ pip install tensorflowjs

pip パッケージにより提供されるコンバータ・スクリプトを実行します :

使用方法:

$ tensorflowjs_converter \
    --input_format=tf_saved_model \
    --output_node_names='MobilenetV1/Predictions/Reshape_1' \
    --saved_model_tags=serve
    /mobilenet/saved_model \
    /mobilenet/web_model
位置変数 説明
input_path セーブされたモデル・ディレクトリの完全パス。
output_dir 総ての出力生成物のためのパス。
オプション 説明
–input_format 入力モデルのフォーマット。SavedModel のためには tf_saved_model を使用します。
–output_node_names 出力ノードの名前、カンマで区切られます。
–saved_model_tags ロードする MetaGraphDef のタグ、カンマ区切り形式。デフォルトは serve です。

 

Web-friendly フォーマット

上の変換スクリプトは 3 タイプのファイルを生成します :

  • web_model.pb (the dataflow graph)
  • weights_manifest.json (weight manifest file)
  • group1-shard\*of\* (collection of binary weight files)

例えば、ここに変換されて次の位置でサービス提供されている MobileNet があります。

  https://storage.cloud.google.com/tfjs-models/savedmodel/mobilenet_v1_1.0_224/optimized_model.pb
  https://storage.cloud.google.com/tfjs-models/savedmodel/mobilenet_v1_1.0_224/weights_manifest.json
  https://storage.cloud.google.com/tfjs-models/savedmodel/mobilenet_v1_1.0_224/group1-shard1of5
  ...
  https://storage.cloud.google.com/tfjs-models/savedmodel/mobilenet_v1_1.0_224/group1-shard5of5

 

Step 2: ブラウザ内でロードして実行する

  1. tfjs-converter npm パッケージをインストールします。
    yarn add @tensorflow/tfjs-converter or npm install @tensorflow/tfjs-converter
    
  2. FrozenModel クラス をインスタンス化して推論を実行します。
    import * as tfc from '@tensorflow/tfjs-core';
    import {loadFrozenModel} from '@tensorflow/tfjs-converter';
    
    const MODEL_URL = 'https://.../mobilenet/web_model.pb';
    const WEIGHTS_URL = 'https://.../mobilenet/weights_manifest.json';
    
    const model = await loadFrozenModel(MODEL_URL, WEIGHTS_URL);
    const cat = document.getElementById('cat');
    model.execute({input: tfc.fromPixels(cat)});
    

私達の動作する MobileNet デモ を確かめてください。

貴方のサーバがモデル・ファイルにアクセスするための credentials をリクエストする場合は、オプションの RequestOption param を提供できます。

const model = await loadFrozenModel(MODEL_URL, WEIGHTS_URL,
    {credentials: 'include'});

詳細は fetch() ドキュメント を見てください。

 

サポートされる演算

現在のところ TensorFlow.js は TensorFlow Ops の限定的なセットをサポートするだけです。完全なリスト を見てください。もし貴方のモデルがサポートされていない ops を使用しているのであれば、tensorflowjs_converter スクリプトは失敗して貴方のモデル内のサポートされていない ops のリストを生成します。

 

FAQ

  1. コンバータはどの TensorFlow モデルを現在サポートしていますか?

    画像ベースのモデル (MobileNet, SqueezeNet, 貴方がテストすれば更に追加します) が最もサポートされています。制御フロー ops (e.g. RNNs) を伴うモデルはまだサポートされていません。tensorflowjs_converter スクリプトは貴方が持つモデルを検証してモデル内でサポートされていない ops のリストを示します。どの ops が現在サポートされているかのためには このリスト を見てください。

  2. 巨大な重みを持つモデルは動作しますか?

    ブラウザが 100-500MB モデルのロードをサポートする一方で、ページ・ロード時間、推論時間そしてユーザ経験は素晴らしいものではないでしょう。エッジデバイス (e.g. 電話) のためにデザインされたモデルを使用することを推奨します。これらのモデルは通常は 30 MB よりも小さいです。

  3. モデルと重みファイルはブラウザ内にキャッシュされますか?

    はい、私達は重みを 4 MB チャンクのファイルに分割し、これはブラウザにそれらを自動的にキャッシュすることを可能にします。モデル・アーキテクチャが 4 MB 未満 (殆どのモデルがそうです) である場合、それもまたキャッシュされるでしょう。

  4. それは量子化を伴うモデルをサポートしますか?

    まだです。量子化サポートをまもなく追加することを計画しています。

  5. 推論のための predict() メソッドの最初の呼び出しは、続く呼び出しよりも何故非常に遅いのでしょう?

    最初の呼び出し時はまたモデルのための WebGL シェーダー・プログラムのコンパイル時間も含みます。最初の呼び出し後にはシェーダー・プログラムはキャッシュされ、これは続く呼び出しを遥かに高速にします。モデル・ローディングの完了のすぐ後に、predict メソッドを総てゼロの入力で呼び出すことによりキャッシュをウォームアップすることができます。

 

開発

TensorFlow.js コンバータをソースからビルドするには、プロジェクトを clone して dev 環境を準備する必要があります :

$ git clone https://github.com/tensorflow/tfjs-converter.git
$ cd tfjs-converter
$ yarn # Installs dependencies.

開発のために Visual Studio Code を使用することを推奨します。TSLint VSCode エクステンション と npm clang-format 1.2.2 またそれ以上を自動フォーマッティングのための Clang-Format VSCode と共に確実にインストールしてください。

pull リクエストを提出する前に、コードが総てのテストをパスして lint エラーがないことを確認してください :

$ yarn test
$ yarn lint

テストのサブセットを and/or 特定のブラウザ上で実行するには :

$ yarn test --browsers=Chrome --grep='execute'
 
> ...
> Chrome 64.0.3282 (Linux 0.0.0): Executed 39 of 39 SUCCESS (0.129 secs / 0 secs)

テストを一度実行して karma プロセスを抜けるためには (Windows 上で有用です) :

$ yarn test --single-run
 

以上




AI導入支援 #2 ウェビナー

スモールスタートを可能としたAI導入支援   Vol.2
[無料 WEB セミナー] [詳細]
「画像認識 AI PoC スターターパック」の紹介
既に AI 技術を実ビジネスで活用し、成果を上げている日本企業も多く存在しており、競争優位なビジネスを展開しております。
しかしながら AI を導入したくとも PoC (概念実証) だけでも高額な費用がかかり取組めていない企業も少なくないようです。A I導入時には欠かせない PoC を手軽にしかも短期間で認知度を確認可能とするサービの紹介と共に、AI 技術の特性と具体的な導入プロセスに加え運用時のポイントについても解説いたします。
日時:2021年10月13日(水)
会場:WEBセミナー
共催:クラスキャット、日本FLOW(株)
後援:働き方改革推進コンソーシアム
参加費: 無料 (事前登録制)
人工知能開発支援
◆ クラスキャットは 人工知能研究開発支援 サービスを提供しています :
  • テクニカルコンサルティングサービス
  • 実証実験 (プロトタイプ構築)
  • アプリケーションへの実装
  • 人工知能研修サービス
◆ お問合せ先 ◆
(株)クラスキャット
セールス・インフォメーション
E-Mail:sales-info@classcat.com