ブラウザで TensorFlow を使用するにはどうすればいいですか?

ブラウザで TensorFlow を使用するにはどうすればいいですか?

[[341102]]

[51CTO.com クイック翻訳] TensorFlow を使用すると、少量のトレーニング データで単純なニューラル ネットワークをトレーニングできますが、膨大なトレーニング データ セットを持つディープ ニューラル ネットワークでは、加速のために CUDA 対応の NVIDIA GPU、Google TPU、または FPGA を使用する必要があります。最近まで、代替策としては CPU クラスターで数週間かけてトレーニングする必要がありました。

TensorFlow 2.0 で導入されたイノベーションの 1 つは、JavaScript 実装である TensorFlow.js です。これによってトレーニングや推論が高速化されるとは思っていませんでしたが、実際に高速化され、WebGL API を介してすべての GPU (CUDA 対応のものだけでなく) がサポートされます。

TensorFlow.js の紹介

TensorFlow.js は、JavaScript で機械学習モデルを開発およびトレーニングし、ブラウザーまたは Node.js にデプロイするためのライブラリです。既存のモデルを使用したり、Python TensorFlow モデルを変換したり、転移学習を使用して独自のデータで既存のモデルを再トレーニングしたり、モデルをゼロから開発したりすることができます。

TensorFlow.js バックエンド

TensorFlow.js は実行のために複数のバックエンドをサポートしていますが、一度にアクティブになるバックエンドは 1 つだけです。 TensorFlow.js Node.js 環境は、バックエンドとして Python/C TensorFlow インストールの使用をサポートしており、これにより、CUDA などのマシンで利用可能なハードウェア アクセラレーション テクノロジを使用できます。 Node.js 用の JavaScript ベースのバックエンドもありますが、機能は制限されています。

ブラウザでは、TensorFlow.js にはさまざまな機能を備えた複数のバックエンドがあります。 WebGL バックエンドは、ストレージ用の WebGL テクスチャと実行用の WebGL シェーダーを使用して GPU サポートを提供し、通常の CPU バックエンドよりも最大 100 倍高速です。 WebGL は CUDA を必要としないため、利用可能な GPU を最大限に活用できます。

ブラウザベースの WebAssembly (WASM) TensorFlow.js バックエンドは、XNNPACK ライブラリを使用して、ニューラル ネットワーク オペレーターの CPU 実装を最適化します。 WASM バックエンドは、通常、JavaScript CPU バックエンドよりもはるかに高速です (10 倍から 30 倍高速) が、非常に小さなモデルを除いて、通常、WebGL バックエンドよりも低速です。結果は異なる可能性がありますので、ご自身のモデルに合わせて、ご自身のハードウェアで WASM バックエンドと WebGL バックエンドの両方をテストしてください。

TensorFlow.js モデルとレイヤー

TensorFlow.js は、ニューラル ネットワーク モデルを構築するための 2 つの API をサポートしています。 1 つは Layers API で、これは実質的に TensorFlow 2 の Keras API と同じです。もう 1 つは、実際にテンソルを直接操作する Core API です。

Keras と同様に、TensorFlow.js Layers API には、モデルを作成するための 2 つの方法 (シーケンシャルと関数) があります。シーケンシャル API はレイヤーの線形スタックであり、レイヤー リスト (以下を参照) または model.add() メソッドを介して実装されます。

  1. 定数モデル = tf.sequential({
  2.  
  3. レイヤー:
  4.  
  5. tf.layers.dense({inputShape: [784], 単位: 32, アクティベーション: 'relu' }),
  6.  
  7. tf.layers.dense({単位: 10, アクティベーション: 'softmax' }),
  8.  
  9. ]
  10.  
  11. });

機能 API は tf.model() API を使用して任意の有向非巡回グラフ (DAG) ネットワークを作成します。

  1. //レイヤーを接続し任意グラフを作成します
  2.  
  3. // apply() メソッドを介して。
  4.  
  5. 定数入力 = tf.input({形状: [784]});
  6.  
  7. const dense1 = tf.layers.dense({units: 32, activation: 'relu' }).apply(input);
  8.  
  9. const dense2 = tf.layers.dense({units: 10, activation: 'softmax' }).apply(dense1);
  10.  
  11. const model = tf.model({入力: input, 出力: dense2});

Core API では、同じ目的を達成するために異なるコードを使用できますが、レイヤー間には単純で直感的な接続はありません。次のモデルは基本的なテンソル演算のように見えますが、前の 2 つの式と同じネットワークを作成します。以下の model() 関数では relu() と softmax() が使用されていることに注意してください。どちらもニューラル ネットワーク操作です。

  1. // 2 つの密なレイヤー重みバイアス
  2.  
  3. 定数w1 = tf.variable(tf.randomNormal([784, 32]));
  4.  
  5. b1 = tf.variable(tf.randomNormal([32]));
  6.  
  7. 定数w2 = tf.variable(tf.randomNormal([32, 10]));
  8.  
  9. 定数b2 = tf.variable(tf.randomNormal([10]));
  10.  
  11. 関数モデル(x) {
  12.  
  13. x.matMul(w1) .add (b1).relu().matMul(w2) .add (b2).softmax()を返します
  14.  
  15. }

事前に構築された TensorFlow.js モデル

リポジトリには、NPM (Node.js で使用) および unpkg (ブラウザーで使用) でホストされた、ビルド済みの TensorFlow.js モデルが 12 個以上文書化されています。これらのモデルは、提供されたまま使用することも、転移学習に使用することもできます。少しの努力で、他のモデルの構成要素として使用することもできます。

これらのモデルの中には、手のジェスチャーなど、デバイスのカメラをリアルタイムで使用するものもあります。

図 1. 手のポーズは手のひらを検出し、手の骨格の指を追跡できます。

次のリストでは、インデックスを簡単に作成できるように、事前にパッケージ化された TensorFlow.js モデルのほとんどを紹介します。

  • 画像分類
  • 物体検出
  • 体のセグメンテーション
  • 姿勢推定
  • テキストの毒性検出
  • ユニバーサルセンテンスエンコーダー
  • 音声コマンド認識
  • KNN分類器
  • シンプルな顔検出
  • セマンティックセグメンテーション
  • 顔のランドマーク検出
  • 手のジェスチャー検出
  • 自然言語による質問応答
  • ml5.js の紹介

ml5.js は、主にニューヨーク大学で開発された、オープンソースでユーザーフレンドリーな高レベルの TensorFlow.js インターフェースです。 ml5.js は、人間のポーズの検出、テキストの生成、別のスタイルでの画像のスタイル設定、音楽の作曲、ピッチの検出、一般的な英語の単語の関係などを行うための事前トレーニング済みモデルにブラウザで即座にアクセスできるようにします。 TensorFlow.js は主にデータ サイエンティストや開発者を対象としていますが、ml5.js は一般の人々が機械学習をより幅広く理解できるように設計されています。

ml5.js のほとんどの例は TensorFlow.js モデルに依存しています。これらは Web ページとしてパッケージ化されており、そのまま実行することも、たとえば別の画像を使用するために編集することもできます。

図 2. PoseNet は、ブラウザ内の画像またはビデオ ソースからリアルタイムの姿勢推定を実行できます。

Python TensorFlow モデルを JavaScript に変換する

TensorFlow.js リポジトリの一部には、保存された TensorFlow および Keras モデル用のコンバーターが含まれています。 SavedModel (TensorFlow のデフォルト形式)、HDF5 (Keras のデフォルト形式)、TensorFlow Hub の 3 つの形式をサポートしています。このコンバーターは、標準リポジトリから保存されたモデル、自分でトレーニングしたモデル、他の場所で見つけたモデルで使用できます。

変換には実際には 2 つのステップがあります。最初のステップは、既存のモデルを model.json およびバイナリ重みファイルに変換することです。 2 番目のステップは、API を使用してモデルを TensorFlow.js にロードすることです。変換された TensorFlow および TensorFlow Hub モデルの場合は tf.loadGraphModel を使用し、変換された Keras モデルの場合は tf.loadLayersModel を使用します。

転移学習の使用

TensorFlow.js は、TensorFlow とほぼ同じ方法で転移学習をサポートします。ドキュメントには、独自の画像に合わせて MobileNet をカスタマイズする例や、独自のサウンド クラスに合わせて音声コマンド認識モデルをカスタマイズする例がいくつか記載されています。基本的に、これらの各コードラボで行ったことは、トレーニング済みのモデルの上に小さなカスタム分類子を追加してトレーニングすることでした。

一般的に、TensorFlow.js は基本的に TensorFlow でできることをすべて実行できます。ただし、TensorFlow.js が対象とする環境 (ゲーム用の一般的な GPU) では、TensorFlow ディープラーニング トレーニングでよく使用される大規模な Nvidia サーバー GPU よりも GPU メモリが少ないことが一般的であるため、ブラウザーで実行するにはモデルのサイズを縮小する必要がある場合があります。変換ユーティリティはこの部分を自動的に実行できますが、トレーニングのためにレイヤーを手動で削除し、バッチ サイズを縮小する必要があります。

原題: ブラウザで TensorFlow を使用する方法、著者: Martin Heller

[51CTOによる翻訳。パートナーサイトに転載する場合は、元の翻訳者と出典を51CTO.comとして明記してください]

<<:  人工ニューラルネットワーク分類器に基づくドメイン適応(DA)技術

>>:  第4世代ロボットが発売。Lingdong TechnologyのAMR分野における粘り強さと革新

ブログ    
ブログ    

推薦する

...

MITとワトソン研究所のチームが、ジェスチャーを見るだけで音楽を完璧に再現する最新のAIを発表

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

Microsoft と Meta が提携し、Bing 検索を Meta AI チャットボットに統合

9月28日早朝、Meta Connect 2023において、MetaはMeta AIという新しいチャ...

トレンドにおける危険とチャンス: 生成 AI の黄金期をどう捉えるか?

ChatGPTは今年9月末に音声チャットと画像認識機能を追加しました。テキスト駆動型と比較して、C...

人工知能開発の動向

ケビン・ケリー氏は「人工知能は人類社会を混乱させる次のものだ」と語った。 2020年は、全世界が前例...

機械学習と古典的なアルゴリズムの概念をわかりやすい言葉で説明しました。初心者必読

データ分野では、多くの人が機械学習について語っていますが、それが何であるかを明確に説明できる人はごく...

機械学習アルゴリズムが NDA の法的分析テストで 20 人の弁護士に勝利

ロボット工学と人工知能の発展により、多くの仕事が機械に置き換えられるでしょう。機械は、一部のタスク、...

...

NeRF を放棄し始めていますか?ガウススプラッティングが自動運転のシナリオで人気があるのはなぜですか?

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

人工知能がヘルスケア業界にもたらす変化

AIが医療業界を変える[[397937]] AIとロボットはすでにいくつかの医療機関で活用されていま...

GPT-4は97回の対話で世界の諸問題を探り、P≠NPという結論を導き出した。

科学研究の分野で働く人なら、P/NP 問題についてはある程度聞いたことがあるでしょう。この問題は、ク...

...

...

90 年代以降の技術オタクと彼の代替検索エンジン Magi

最近、Magiという検索エンジンが注目を集めています。この検索エンジンは、私たちが持っている一般的な...

戦争におけるAI:ウクライナはロシア軍兵士を「調査」するために顔認識を使用しているが、これは単なる子供の遊びだ

現代人は時間の概念が曖昧です。よく考えなければ、プーチン大統領が2月24日にウクライナに宣戦布告して...