ブラウザで 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分野における粘り強さと革新

ブログ    

推薦する

プログラマーは「自殺」している。人工知能が進化し続ける中、人間は何をすべきか?

中国、日本、韓国の囲碁名人数十人がこのゲームに挑み、アルファ碁は1敗もせずに60連勝した。その後、世...

AI兵器の時代:イランの科学者は本当にAI兵器によって暗殺されたのか?

[[375636]] 2020年11月下旬、イランのトップ核科学者モフセン・ファクリザデ氏がテヘラ...

テスラはどのようにしてPyTorchを使って自動運転を実現し、世界に挑戦したのでしょうか?

[[313367]]テスラのエンジニアたちは、データの拡大に伴ってエンジニアの数を増やすことなく、...

...

バイナリ検索アルゴリズムと時間計算量について簡単に説明し、バイナリ検索アルゴリズムを実装する

[[432404]]バイナリ検索は、バイナリ検索アルゴリズムとも呼ばれ、シンプルで理解しやすい高速検...

...

日常生活における人工知能の12の例

以下の記事では、私たちの日常生活に登場する人工知能の12の例を確認することができます。人工知能 (A...

たった2時間で7元以下で3Dロボットが作れます

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

MITはロボットの構造を自動設計できるコンピュータシステムを発明し、25年で最高の成果を達成した。

研究者にとって、適切な形状を選択することは、ロボットが特定の地形を移動できる能力にとって非常に重要で...

スクリーンはあなたの運命を変えることはできません! AI教育で裸で泳いでいるのは誰ですか? 16社が摘発される

[[252632]]はじめに:最近、「このスクリーンはあなたの運命を変えるかもしれない」という記事が...

重要なポイントを強調します。最大2億元の支援、AIイノベーション開発パイロットゾーンの5つの重点政策を理解する

[[344168]] 2019年8月、科学技術部は「国家新世代人工知能イノベーション開発パイロットゾ...

PHPソートアルゴリズムの完全実装

PHP を学習しているときに、PHP のソート問題に遭遇することがあります。ここでは、PHP のソー...

速報です! OpenAIがByteDanceアカウントを禁止!コンテンツ生成のための GPT の不正使用に関する内部告発

ノアが編集海外メディアのザ・ヴァージは北京時間今朝未明、生成AIをめぐる熾烈な競争の中で、バイトダン...

AIをやりたいのですが、開発ツールはどのように選べばいいですか?この入門ガイドはあなたのためのものです

[[207302]]現代の人工知能は企業に多くの利益をもたらすと同時に、機械の認知能力も大幅に向上さ...

物理学と機械学習が出会うとき: 物理学の知識に基づく機械学習のレビュー

物理学情報に基づく機械学習(PIML)とは、物理学(高度に抽象的な自然現象や歴史上の人間の行動)に関...