Node-RED フロー内で深層学習を活用する

学習の目的

この入門チュートリアルでは、Node-RED フロー内で画像、動画、音声、またはテキスト・データを処理するために、Model Asset Exchange の深層学習モデルを使用する方法を説明します。

前提条件

Model Asset Exchange についてご存知ない場合は、この入門記事を読んでください。Model Asset Exchange の概要をわかりやすく説明しています。

このチュートリアルに取り組むには、事前構成済みのデモ用 Docker イメージを使用できます。あるいは、ローカルにインストールされた Node.js と Node-RED を使用することもできます。

事前構成済みのデモ用 Docker イメージを使用する場合

max-node-red-demo GitHub リポジトリー内の「Getting Started」セクションで説明している手順に従って、 事前構成済みの Docker イメージをダウンロードし、実行します。

ローカルにインストールされた Node.js と Node-RED を使用する場合

Node.js または Node-RED の最新バージョンがインストールされていることを確認してください。それぞれの最新バージョンは以下の場所からダウンロードできます。

このチュートリアルをテストするために使用したのは、Node.js バージョン 10.16、Node-RED バージョン 0.20.8、および最新バージョンの Chrome ブラウザーです。

所要時間

このチュートリアルの所要時間は約 30 分です。

手順

このチュートリアルは、以下のステップで構成されています。

max-node-red-demo Docker イメージを使用する場合、「セットアップ」と「Model Asset Exchange ノードをインポートする」のステップはすでに完了しています。事前構成済み Docker イメージを使用してチュートリアルに取り組む場合は、これらのセクションで手順を確認してください (ただし、手順には従わないでください)。

チュートリアルのセットアップ

  1. ターミナル・ウィンドウを開き、Node-RED node-red を起動します。表示された URL (例: http://127.0.0.1:1880) に、ブラウザーでアクセスして Node-RED エディターを開きます。

  2. メニューから「Manage palette (パレットの管理)」を選択します。

    パレットにアクセスするメニュー項目のスクリーンショット

  3. User Settings (ユーザー設定)」の「Palette (パレット)」タブで、「Install (インストール)」を選択します。

  4. node-red-contrib-browser-utils モジュールがまだインストールされていない場合は、このモジュールを検索してインストールします。
  5. 設定ウィンドウを閉じます。

    前提条件モジュールをインポートする画面のスクリーンショット

  6. input (入力)」カテゴリー内に「camera (カメラ)」ノードと「file inject (ファイル注入)」ノードがリストアップされていることを確認します。このチュートリアルの以降の手順で、これらのノードを使用します。

    ライト - カメラ - アクションを示す画面のスクリーンショット

Model Asset Exchange ノードをインポートする

Model Asset Exchange のノードは npm 上で公開されます。

  1. メニューから「Manage palette (パレットの管理)」を選択します。
  2. User Settings (ユーザー設定)」の「Palette (パレット)」タブで、「Install (インストール)」を選択します。
  3. node-red-contrib-model-asset-exchange モジュールを検索してインストールします。
  4. 設定ウィンドウを閉じます。

    Model Asset eXchange」カテゴリー内に複数のノードが表示されているはずです。

    MAX ノードが表示されるパレットを示す画面のスクリーンショット

    各 Model Asset Exchange ノードは深層学習マイクロサービスのエンドポイントを使用します。これらのマイクロサービスは、ローカル環境内でもクラウド内でも実行できます。

    深層学習マイクロサービスの関数を公開するノードの図

チュートリアルが複雑にならないよう、Model Asset Exchange ノードには、デモとしてホストされているマイクロサービス・インスタンスを関連付けます。

ローカル環境内で独自のマイクロサービス・インスタンスを実行する方法については、チュートリアル「Model Asset Exchange 入門を参照してください。クラウド内の Kubernetes 上で独自のマイクロサービス・インスタンスをデプロイする方法については、チュートリアル「深層学習モデルを Red Hat OpenShift 上にデプロイするを参照してください。

画像キャプション・ジェネレーター・ノードを調べる

説明のために、画像キャプション・ジェネレーター・ノードを使用します。このノードで画像を分析し、キャプションを生成します。他のノードを使用して手順に従うのでもかまいません。このチュートリアルで説明する手順とコンセプトは、すべてのノードに適用されます。

  1. image caption generator (画像キャプション・ジェネレーター)」ノードをワークスペース上にドラッグし、表示される情報を確認します。このノードには 1 つの入力と 1 つの出力 (マイクロサービスのレスポンス) があります。

  2. ノードをダブルクリックして、編集を開始します。ノードのプロパティーとして、「Service (サービス)」と「Method (メソッド)」の 2 つがリストアップされます。

    画像キャプション・ジェネレーター・ノードのデフォルト構成を示す画面のスクリーンショット

  3. ノードの「Service (サービス)」プロパティーを編集して、このノードを画像キャプション・ジェネレーター・マイクロサービスのインスタンスに関連付けます。

  4. Host (ホスト)」にはデフォルトで、画像キャプション・ジェネレーター・マイクロサービスのデモとしてホストされているインスタンスの URL があらかじめ取り込まれています。この URL にアクセスして、サービスの機能を調べることができます。「Add (追加)」をクリックして、このデモ用インスタンスにノードを関連付けます。

    画像キャプション・ジェネレーター・ノードのサービス構成を示す画面のスクリーンショット

    本番環境のワークロードには、デモとしてホストされているマイクロサービス・インスタンスを決して使用しないでください。独自の (ローカルまたはクラウド) マイクロサービス・インスタンスを使用するには、その URL を入力します (Docker Hub から入手した事前ビルド済みの Docker コンテナーを使用してローカル・マシン上でサービスを実行する場合は、http://127.0.0.1:5000 などの URL になります)。

  5. Model Asset Exchange マイクロサービスでは複数のエンドポイントを公開しています。これらのエンドポイントは、「Method (メソッド)」プロパティーのドロップダウン・リストに表示されます。デフォルトでは、ノードの入力を分析する「predict」メソッドが選択されています。

    画像キャプション・ジェネレーター・ノードのオプションを示す画面のスクリーンショット

    一部のメソッドは、オプションの入力パラメーター (しきい値など) を受け入れます (画像キャプション・ジェネレーターにはオプションの入力パラメーターはありません)。また、一部のメソッドの出力はカスタマイズできます。詳細については、ノードのヘルプを参照してください。

  6. メソッドのドロップダウン・リストから「metadata (メタデータ)」を選択します。このメソッドは、マイクロサービスに関する情報を取得します。

    画像キャプション・ジェネレーター・ノードの構成を示す画面のスクリーンショット

  7. ノードのプロパティー・ウィンドウを閉じます。

  8. inject (注入)入力 ノードをワークスペース上にドラッグし、その出力を 画像キャプション・ジェネレーター ・ノードの入力に接続します。

    このノードの名前は自動的に「timestamp」に変更されます (このノードは、フローを実行するためだけに使用します。このマイクロサービスの metadata メソッドに入力は必要ありません)。

  9. debug (デバッグ)」出力ノードをワークスペース上にドラッグし、その入力を 画像キャプション・ジェネレーター ・ノードの出力に接続します。

    完全したフローは、以下の図に示すようになっているはずです。

    マイクロサービスのメタデータを取得するフローを示す画面のスクリーンショット

  10. フローをデプロイします。

  11. メニューから「View (表示)」 > 「Debug messages (デバッグ・メッセージ)」の順に選択して、デバッグ出力ビューを開きます。

  12. inject (注入)」ノードのボタンをクリックしてメッセージをフロー内に注入し、デバッグ出力を調べます。セットアップが正しければ、以下のような出力になっているはずです。

    id: "max-image-caption-generator"
    name: "MAX Image Caption Generator"
    description: "im2txt TensorFlow model trained on MSCOCO"
    type: "Image-to-Text Translation"
    source: "https://developer.ibm.com/exchanges/models/all/max-image-caption-generator/"
    license: "Apache 2.0"
    

これで、ノードが指定のサービスに接続できることを確認できました。次は、画像キャプションを生成するようにフローを変更します。

画像キャプションを生成する

画像キャプション・ジェネレーターの predict メソッドは、提供された入力画像を分析して、その画像の内容についての簡単な説明を生成します。

  1. 画像キャプション・ジェネレーター ・ノードをダブルクリックして、そのプロパティーの編集を開始します。
  2. 選択されている「Method (メソッド)」を「metadata」から「predict」に変更します。
  3. inject (注入)」ノードを「file inject (ファイル注入)」ノード (または、Chrome と Firefox でのみサポートされている「camera (カメラ)」ノード) で置き換えて、その出力を 画像キャプション・ジェネレーター ・ノードの入力に接続します。

    ファイル・ノードの構成

  4. フローをデプロイします。

  5. file inject (ファイル注入)」ノード (または「camera (カメラ)」) ノードのボタンをクリックし、画像を選択します (または写真を撮ります)。続いてデバッグ出力を調べて、その画像を説明するキャプションが含まれていることを確認します。

     a man sitting on a bench with a dog .
    

    完全なマイクロサービス JSON レスポンスには、メッセージ・オブジェクトからアクセスできます。

  6. debug (デバッグ)」ノードのプロパティーを開き、出力を「complete msg object (完全なメッセージ・オブジェクト)」に変更します。

  7. フローを再デプロイして再実行します。
  8. 出力を調べます。メッセージの details に含まれる predictions 配列に、生成されたキャプションが格納されています。

     {
      "payload": "a man sitting on a bench with a dog .",
      "_msgid": "e8f93edc.7eddd",
      "statusCode": 200,
      ...
      "details": {
         "status": "ok",
         "predictions": [
             {
                 "index": "0",
                 "caption": "a man sitting on a bench with a dog .",
                 "probability": 0.00033009440665662435
             },
             {
                 "index": "1",
                 "caption": "a teddy bear sitting on a bench in a park",
                 "probability": 0.00009953154282018676
             }
         ]
      },
      "topic": "max-image-caption-generator"
     }
    

他のモデル・ノードを調べる

node-red-contrib-model-asset-exchange モジュールに含まれるいくつかの初級フローをワークスペースにインポートできます。

  1. メニューから「Import (インポート)」 > 「Examples (サンプル)」 > 「model asset exchange」 > 「getting started (初級)」を選択します。

    Model Asset Exchange のサンプル・フローをインポートするためのメニュー項目を示す画面のスクリーンショット

  2. フローのいずれかを選択して、ワークスペースにインポートします。

  3. 事前構成済みのフローを調べ、デプロイし、実行します。

フロー内で複数の深層学習ノードを使用する

これまで調べてきた基本的なフローでは、1 つの深層学習ノードだけを使用しています。さらに高度な使用方法のシナリオを見ていきましょう。

  1. メニューから「Import (インポート)」 > 「Examples (サンプル)」 > 「model asset exchange」 > 「beyond the basics (中級以上)」 > 「using-multiple-models (複数のモデルの使用)」の順に選択します。

    高度な Advanced Model Asset Exchange フローを示す画面のスクリーンショット

    このシナリオでは、入力 (画像ファイルまたはカメラを使用して撮った写真) をオブジェクト検出ノードで処理します。このノードは、入力を画像キャプション・ジェネレーター・ノードに渡すように構成されています。画像キャプション・ジェネレーター・ノードが渡された画像のキャプションを生成し、デバッグ・ノードがそのキャプションを画像の説明として表示します。オブジェクト検出ノードは、注釈付きの入力画像を生成するようにも構成されています。このノードが生成する画像には、識別されたオブジェクトとそのオブジェクトを囲む境界ボックス、そしてオブジェクト・ラベルが含まれます。

    2 つの関数ノード (Extract Input Image DataExtract Bounding Box Image Data) が、ノードの出力を画像キャプション・ジェネレーター・ノードの入力と画像プレビュー・ノードの入力にマッピングします。

  2. object-detector (オブジェクト検出器)」ノードを開き、ノードの出力構成を確認します。ノードのヘルプで、生成される出力と他のノードがその出力にアクセスする方法を説明しています。

    オブジェクト検出器の出力構成設定を示す画面のスクリーンショット

  3. フローをデプロイして実行します。画像キャプションがデバッグ・ウィンドウ内に表示され、注釈付きの画像のプレビューがキャンバス上に表示されるはずです。

    高度な Advanced Model Asset Exchange フローの出力を示す画面のスクリーンショット

    注釈付きの画像が表示されない場合、その入力から検出されたオブジェクトはなかったことを意味します。

まとめ

このチュートリアルでは、Model Asset Exchange から入手できる画像キャプション・ジェネレーター・マイクロサービスを使用して、Node-RED フロー内で画像キャプションを生成する方法を説明しました。具体的には、以下の方法を説明しました。

  • node-red-contrib-model-asset-exchange モジュールをパレットにインポートする
  • Model Asst eXchange カテゴリーに含まれるノードを使用してフローを作成する
  • フローをデプロイして実行し、生成された出力を調べる
  • サンプル・フローをインポートする
  • ノードの出力方法をカスタマイズする