チュートリアル: TensorFlow Lite を使用してサンプルイメージ分類推論を実行する - AWS IoT Greengrass

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

チュートリアル: TensorFlow Lite を使用してサンプルイメージ分類推論を実行する

このチュートリアルでは、TensorFlow Lite イメージ分類推論コンポーネントを使用して、Greengrass コアデバイスでサンプルイメージ分類推論を実行する方法を示します。このコンポーネントには、次のコンポーネントの従属関係が含まれます:

  • TensorFlow Lite イメージ分類モデルストアコンポーネント

  • TensorFlow Lite ランタイムコンポーネント

このコンポーネントをデプロイすると、事前トレーニング済みの MobileNet v1 モデルがダウンロードされ、TensorFlow Lite ランタイムとその依存関係がインストールされます。このコンポーネントは推論結果を ml/tflite/image-classification トピックにパブリッシュします。これらの推論結果を確認するには、AWS IoT コンソールの AWS IoT MQTT クライアントを使用してこのトピックをサブスクライブします。

このチュートリアルでは、サンプル推論コンポーネントをデプロイして、AWS IoT Greengrass によって提供されるサンプル画像にイメージ分類を実行します。このチュートリアルを完了すると、チュートリアル: TensorFlow Lite を使用してカメラからの画像に対してサンプル画像分類推論を実行する を完了することができます。これには、サンプル推論コンポーネントを修正して、Greengrass コアデバイスのカメラからローカルで画像にイメージ分類を実行する方法を説明します。

Greengrass デバイスでの機械学習の詳細については、「機械学習の推論を実行する」を参照してください。

前提条件

このチュートリアルを完了するには、以下が必要です。

  • Linux Greengrass コアデバイス。アカウントをお持ちでない場合は、「チュートリアル: AWS IoT Greengrass V2 の開始方法」を参照してください。コアデバイスは、次の要件を満たしている必要があります。

    • Amazon Linux 2 または Ubuntu 18.04 を実行している Greengrass コアデバイスの場合は、GNU C ライブラリ (glibc) バージョン 2.27 以降がデバイスにインストールされている必要があります。

    • Raspberry Pi などの Armv7l デバイスでは、OpenCV-Python の依存関係がデバイスにインストールされています。次のコマンドを実行して依存関係をインストールします。

      sudo apt-get install libopenjp2-7 libilmbase23 libopenexr-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libgtk-3-0 libwebp-dev
    • Raspberry Pi OS Bullseye を実行する Raspberry Pi デバイスでは、次の要件を満たす必要があります。

      • NumPy 1.22.4 以降がデバイスにインストールされている。Raspberry Pi OS Bullseye には以前のバージョンの が含まれているため NumPy、次のコマンドを実行して NumPy デバイスでアップグレードできます。

        pip3 install --upgrade numpy
      • デバイスで、レガシーカメラスタックが有効になっていること。Raspberry Pi OS Bullseye には、デフォルトで新しいカメラスタックが含まれており有効化されていますが、これには互換性がないるため、レガシーカメラスタックを有効にしておく必要があります。

        レガシーカメラスタックを有効にするには
        1. 次のコマンドを実行して、Raspberry Pi 設定ツールを開きます。

          sudo raspi-config
        2. [Interface Options] (インターフェイスオプション) を選択します。

        3. [Legacy camera] (レガシーカメラ) を選択して、レガシーカメラスタックを有効にします。

        4. Raspberry Pi を再起動します。

ステップ 1: デフォルトの通知トピックへサブスクライブ

このステップでは、 TensorFlow Lite イメージ分類コンポーネントによって発行された AWS IoT MQTT メッセージを監視するようにAWS IoT、コンソールで MQTT クライアントを設定します。デフォルトでは、コンポーネントは推論結果を ml/tflite/image-classification トピックにパブリッシュします。コンポーネントを Greengrass コアデバイスにデプロイする前に、このトピックにサブスクライブして、コンポーネントが初めて実行されたときの推論結果を確認します。

デフォルトの通知トピックへサブスクライブするには
  1. AWS IoT コンソールのナビゲーションメニューで、[Test, MQTT test client] (テスト、MQTT テストクライアント) を選択します。

  2. Subscribe to a topic (トピックへサブスクライブ) 内の[Topic name] (トピック名) ボックスで、ml/tflite/image-classification と入力します。

  3. [サブスクライブ] を選択します。

ステップ 2: TensorFlow Lite イメージ分類コンポーネントをデプロイする

このステップでは、 TensorFlow Lite イメージ分類コンポーネントをコアデバイスにデプロイします。

  1. AWS IoT Greengrass コンソールのナビゲーションメニューで、[Components] (コンポーネント) を選択します。

  2. [Components] (コンポーネント) ページの [Public components] (公開コンポーネント) タブで、[aws.greengrass.TensorFlowLiteImageClassification] を選択します。

  3. [aws.greengrass.TensorFlowLiteImageClassification] ページで、[Deploy] (デプロイ) を選択します。

  4. [Add to deployment] (デプロイに追加) から、次のいずれかを選択します。

    1. ターゲットデバイスにある既存のデプロイにこのコンポーネントをマージするには、[Add to existing deployment] (既存のデプロイに追加) をクリックし、修正するデプロイを選択します。

    2. ターゲットデバイスに新しいデプロイを作成するには、[Create new deployment] (新しいデプロイの作成) を選択します。デバイスに既存のデプロイがある場合は、このステップを選択すると既存のデプロイが置き換えられます。

  5. [Specify device state] (ターゲットを指定) ページで、次を実行します。

    1. [Deployment information] (デプロイ情報) で、デプロイの名前を入力または変更して、わかりやすくします。

    2. [Deployment targets] (デプロイターゲット) でデプロイのターゲットを選択し、[Next] (次へ) を選択します。既存のデプロイを修正する場合は、デプロイターゲットを変更できません。

  6. [Select components] (コンポーネントを選択) ページの [Public components] (パブリックコンポーネント) 内で、aws.greengrass.TensorFlowLiteImageClassification コンポーネントが選択されていることを確認して、[Next] (次) を選択します。

  7. [Configure components] (コンポーネント設定) ページで、デフォルト設定のままにして、[Next] (次へ) を選択します。

  8. [Configure advanced settings] (詳細設定) ページはデフォルト設定のままにし、[Next] (次へ) を選択します。

  9. [Review] (レビュー) ページで、[Deploy] (デプロイ) を選択します。

  1. TensorFlow Lite イメージ分類コンポーネントのデプロイ設定を定義する deployment.json ファイルを作成します。このファイルは次のようになります:

    { "targetArn":"targetArn", "components": { "aws.greengrass.TensorFlowLiteImageClassification": { "componentVersion": 2.1.0, "configurationUpdate": { } } } }
    • [targetArn] フィールドで targetArn をデプロイメントの対象となるモノまたはモノのグループの Amazon リソースネーム (ARN) に置き換えます。形式は以下のとおりです:

      • モノ: arn:aws:iot:region:account-id:thing/thingName

      • モノのグループ: arn:aws:iot:region:account-id:thinggroup/thingGroupName

    • このチュートリアルでは、コンポーネントバージョン 2.1.0 を使用します。aws.greengrass.TensorFlowLiteObjectDetection コンポーネントオブジェクトで 2.1.0 を置き換えて、別のバージョンの TensorFlow Lite オブジェクト検出コンポーネントを使用します。

  2. 次のコマンドを実行して、デバイスに TensorFlow Lite イメージ分類コンポーネントをデプロイします。

    aws greengrassv2 create-deployment \ --cli-input-json file://path/to/deployment.json

デプロイには数分かかる場合があります。次のステップでは、コンポーネントログをチェックして、デプロイが正常に完了したことを確認し、推論結果を表示します。

ステップ 3: 推論結果の確認

コンポーネントをデプロイした後、Greengrass コアデバイスのコンポーネントログと、AWS IoT コンソールの AWS IoT MQTT クライアントで推論結果を確認できます。コンポーネントが推論結果をパブリッシュするトピックへサブスクライブするには、「ステップ 1: デフォルトの通知トピックへサブスクライブ」を参照してください。

  • AWS IoT MQTT クライアント - 推論コンポーネントがデフォルトの通知トピックにパブリッシュした結果を確認するには、次のステップを実行します:

    1. AWS IoT コンソールのナビゲーションメニューで、[Test, MQTT test client] (テスト、MQTT テストクライアント) を選択します。

    2. [Subscriptions] (サブスクリプション) 内で、ml/tflite/image-classification を選択します。

      次の例に示すようなメッセージが表示されます。

      { "timestamp": "2021-01-01 00:00:00.000000", "inference-type": "image-classification", "inference-description": "Top 5 predictions with score 0.3 or above ", "inference-results": [ { "Label": "cougar, puma, catamount, mountain lion, painter, panther, Felis concolor", "Score": "0.5882352941176471" }, { "Label": "Persian cat", "Score": "0.5882352941176471" }, { "Label": "tiger cat", "Score": "0.5882352941176471" }, { "Label": "dalmatian, coach dog, carriage dog", "Score": "0.5607843137254902" }, { "Label": "malamute, malemute, Alaskan malamute", "Score": "0.5450980392156862" } ] }
  • コンポーネントログ - コンポーネントログで推論結果を確認するには、Greengrass コアデバイスで次のコマンドを実行します。

    sudo tail -f /greengrass/v2/logs/aws.greengrass.TensorFlowLiteImageClassification.log

    次の例のような結果が表示されます。

    2021-01-01 00:00:00.000000 [INFO] (Copier) aws.greengrass.TensorFlowLiteImageClassification: stdout. Publishing results to the IoT core.... {scriptName=services.aws.greengrass.TensorFlowLiteImageClassification.lifecycle.Run.script, serviceName=aws.greengrass.TensorFlowLiteImageClassification, currentState=RUNNING} 2021-01-01 00:00:00.000000 [INFO] (Copier) aws.greengrass.TensorFlowLiteImageClassification: stdout. {"timestamp": "2021-01-01 00:00:00.000000", "inference-type": "image-classification", "inference-description": "Top 5 predictions with score 0.3 or above ", "inference-results": [{"Label": "cougar, puma, catamount, mountain lion, painter, panther, Felis concolor", "Score": "0.5882352941176471"}, {"Label": "Persian cat", "Score": "0.5882352941176471"}, {"Label": "tiger cat", "Score": "0.5882352941176471"}, {"Label": "dalmatian, coach dog, carriage dog", "Score": "0.5607843137254902"}, {"Label": "malamute, malemute, Alaskan malamute", "Score": "0.5450980392156862"}]}. {scriptName=services.aws.greengrass.TensorFlowLiteImageClassification.lifecycle.Run.script, serviceName=aws.greengrass.TensorFlowLiteImageClassification, currentState=RUNNING}

コンポーネントログまたは MQTT クライアントで推論結果が確認できない場合、デプロイが失敗しているか、コアデバイスに到達していません。これは、コアデバイスがインターネットに接続されていない、あるいはコンポーネントを実行するために適切な権限がない場合に発生します。コアデバイスで次のコマンドを実行して、AWS IoT Greengrass Core ソフトウェアのログファイルを確認します。このファイルは、Greengrass コアデバイスのデプロイサービスからのログが含まれます。

sudo tail -f /greengrass/v2/logs/greengrass.log

詳細については、「機械学習の推論に対するトラブルシューティング」を参照してください。

次のステップ

サポートされたカメラインターフェースを備えた Greengrass コアデバイスをお持ちの場合、チュートリアル: TensorFlow Lite を使用してカメラからの画像に対してサンプル画像分類推論を実行する を完了できます。これは、サンプル推論コンポーネントを修正して、カメラの画像にイメージ分類を実行する方法を説明します。

サンプルの TensorFlow Lite イメージ分類推論コンポーネントの設定をさらに調べるには、以下を試してください。

  • InferenceInterval 設定パラメータを修正して推論コードの実行頻度を変更します。

  • 推論コンポーネントコンフィギュレーションの ImageNameImageDirectory 設定パラメータを修正して、推論に使用するカスタムイメージを指定します。

パブリックコンポーネントの設定のカスタマイズ、またはカスタム機械学習コンポーネントの作成に関する情報については、「機械学習コンポーネントのカスタマイズ」を参照してください。