Amazon Web Services ブログ

Amazon Lookout for Visionを用いたGPU非搭載エッジデバイスでの異常箇所の特定

コンピュータビジョンを使用した自動欠陥検出は、品質の向上と検査コストの削減に役立ちます。欠陥検出には、欠陥の存在の識別、欠陥のタイプの分類、および欠陥の所在の特定が含まれます。多くの製造プロセスでは、低レイテンシ、限られたコンピューティングリソース、および限られたネットワーク環境下での欠陥検出が必要です。

Amazon Lookout for Vision は、機械学習 (ML) サービスで、コンピュータービジョンを使用して製品の欠陥を特定し、機械学習の専門知識を必要とせずに製造ラインの品質検査プロセスを自動化します。Lookout for Visionには、セマンティックセグメンテーションMLモデルを使用して異常の場所とタイプを提供する機能が含まれています。これらのカスタマイズされた ML モデルは、クラウド API を使用して AWS クラウドにデプロイするか、AWS IoT Greengrass を使用してカスタムエッジハードウェアにデプロイできます。Lookout for Visionは、NVIDIA GPUアクセラレータの有無にかかわらず、Linuxを実行しているx86コンピューティングプラットフォームと、NVIDIA Jetsonベースのエッジアプライアンスで推論をサポートするようになりました。この柔軟性により、既存または新規のハードウェアで欠陥検出を実現できます。

この投稿では、エッジデバイスで実行されている Lookout for Vision ML モデルを使用して、欠陥部品を検出する方法を示します。エッジアプライアンスはAmazon Elastic Compute Cloud(Amazon EC2)インスタンスを使用してシミュレートしています。新しいセマンティックセグメンテーションモデルをトレーニングし、AWS IoT Greengrass コンポーネントとしてエクスポートし、Python サンプルコードを使用して CPU 専用モードで推論を実行する方法を説明します。

ソリューションの概要

この投稿では、手足や目、その他のパーツの欠落など、正常な画像と欠陥のある画像で構成されたおもちゃのエイリアンの写真のセットを使用します。欠陥のあるエイリアンを特定するために、クラウドでLookout for Visionモデルをトレーニングします。モデルをターゲット X86 CPU 用にコンパイルし、トレーニング済みの Lookout for Vision モデルを AWS IoT Greengrass コンポーネントとしてパッケージ化し、AWS IoT Greengrass コンソールを使用して GPU なしの EC2 インスタンスにモデルをデプロイします。最後に、EC2 (C5a.2xl) インスタンスで実行される Python ベースのサンプルアプリケーションをデモンストレーションします。このアプリケーションは、エッジデバイスファイルシステムからおもちゃのエイリアンのイメージを入力し、gRPC インターフェイスを使用して Lookout for Vision モデルで推論を実行し、推論データを AWS クラウドの MQTT トピックに送信します。スクリプトは、異常画像の欠陥箇所に欠陥の種類を示す色をつけた画像を出力します。

次の図は、ソリューションのアーキテクチャを示しています。ピクセルレベルで検出する欠陥タイプごとに、領域をマークした異常画像がトレーニングデータで10枚、テストデータに10枚、合計で20枚の画像が必要であることに注意します。この投稿では、おもちゃの欠けている手足を検索します。

このソリューションには次のワークフローがあります。

  1. トレーニングデータセットとテストデータセットを Amazon Simple Storage Service (Amazon S3) にアップロードします。
  2. 新しいLookout for Vision UIを使用して欠陥タイプを追加し、それらの異常がトレーニング画像とテスト画像のどこに存在するかをマークします。
  3. クラウドで Lookout for Vision モデルをトレーニングします。
  4. AWS IoT Greengrass コンソールを使用して、モデルをターゲットアーキテクチャ (X86) にコンパイルし、モデルを EC2 (C5a.2xl) インスタンスにデプロイします。
  5. ローカルディスクから入力イメージをロードします。
  6. gRPC インターフェイスを介してデプロイされたモデルで推論を実行し、元のイメージにオーバーレイされた異常マスクのイメージを取得します。
  7. 推論結果を Edge インスタンスで実行されている MQTT クライアントに送信します。
  8. AWS クラウドの AWS IoT Core のトピック上のMQTT メッセージを受信して、さらなるモニタリングと視覚化を行います。

ステップ 5、6、および 7 は、サンプル Python アプリケーションと連携します。

前提条件

開始する前に、次の前提条件を完了してください。この投稿では、EC2 c5.2xl インスタンスを使用し、そのインスタンスに AWS IoT Greengrass V2 をインストールして新機能を試します。NVIDIA Jetson で実行する場合は、下記の投稿の手順に従ってください。

  1. AWS アカウントを作成します。
  2. AWS IoT Greengrass をインストールできる EC2 インスタンスを起動し、今回Amazon Lookout for visionに新しく追加あれえた CPU の推論モードを使用します。また、Ubuntu 20.04 を実行している 8 ギガバイト以上の RAM を搭載した Intel X86 64 ビットマシン (ここでは c5a.2xl を使用しますが、x86 プラットフォームで 8 ギガバイトを超えるRAMを搭載するインスタンスではすべて動作するはずです) を使用することもできます。
  3. AWS IoT Greengrass V2 をインストールします。
    git clone https://github.com/aws-samples/amazon-lookout-for-vision.git
    cd edge
    # be sure to edit the installation script to match your region, also adjust any device names and groups!
    vi install_greengrass.sh
  4. 必要なシステムと Python 3 の依存関係をインストールします (Ubuntu 20.04)。
    # install Ubuntu dependencies on the EC2 instance
    ./install-ec2-ubuntu-deps.sh
    pip3 install -r requirements.txt
    # Replace ENDPOINT variable in sample-client-file-mqtt.py with the value on the AWS console AWS IoT->Things->l4JetsonXavierNX->Interact. 
    # Under HTTPS. It will be of type <name>-ats.iot.<region>.amazon.com 
    

データセットのアップロードとモデルのトレーニング

おもちゃのエイリアンのデータセットを使用してデモンストレーションをおこないます。データセットには正常画像と異常画像が含まれています。以下に、データセットのサンプル画像をいくつか示します。

次の画像は、普通のおもちゃのエイリアンを示しています。

次の画像は、足を失ったおもちゃのエイリアンを示しています。

次の画像は、頭を失ったおもちゃのエイリアンを示しています。

この投稿では、欠損した手足を探します。新しいユーザーインターフェイスを使用して、トレーニングおよびテストデータの欠陥の周囲にマスクを描画します。これにより、セマンティックセグメンテーションモデルに、このタイプの欠陥を特定する方法を教えます。

  1. まず、Amazon S3 経由またはコンピューターからデータセットをアップロードします。
  2. それらをnormal (正常)とanomaly (異常)というタイトルのフォルダに分類します。
  3. データセットを作成するときは、Automatically attach labels to images based on the folder name (日本語コンソールの場合 “フォルダ名に基づいてイメージに自動的にラベルをアタッチ”) を選択します。これにより、後で異常な画像を整理し、欠陥のあるラベルを付ける領域を描画できます。
  4. normalanomalyの両方を後でテストするために、いくつかの画像(訳註:それぞれ10枚以上)を控えるようにしてください。
  5. すべての画像がデータセットに追加されたら、Add anomaly labelsを選択し、missing_limbsのラベルを追加してContinueを押します。
  6. Start labeling (ラベルを追加) を選択して、データのラベル付けを開始します。
  7. 処理を高速化するために、複数の画像を選択し、それらをnormalまたはanomalyに分類できます(訳註:今回は自動ラベリング機能を使っているため、ここで正常/異常ラベルをつける必要はありません)。異常を分類するだけでなく、異常の場所を表示させたい場合は、異常がどこにあるかをマスクする必要があります。
  8. マスクする画像を選択します。
  9. 描画ツールを使用して、被写体の一部が欠落している領域を表示するか、欠陥の上にマスクを描きます。
  10. これらの変更を保持するには、Submit and closeを選択します。
  11. すべての画像に対してこのプロセスを繰り返します。
  12. 完了したら、Saveを選択して変更を保存します。これで、モデルをトレーニングする準備が整いました。
  13. Train modelを選択します。

これらの手順を完了したら、ProjectModelページに移動して、トレーニング済みモデルのパフォーマンスを確認できます。モデルをトレーニングした後は、いつでもターゲットエッジデバイスにモデルをエクスポートするプロセスを開始できます。

修正した画像でモデルを再トレーニングする

トレーニングしたモデルのパフォーマンスを確認した際、モデルが検出した異常が正しくない場合があります。その場合、モデルが異常をよりよく学習できるようにモデルを再トレーニングすることができます。たとえば、次のイメージは異常として識別されますが、missing_limbs タグは表示されません。

エディターを開いてこれを修正しましょう。

このような画像を見つけたら、同じような手順をおこなってください。異常の箇所が間違っている場合は、消しゴムツールを使用して間違ったラベルを削除できます。

これで、モデルを再度トレーニングして、精度を向上させることができます。

AWS IoT Greengrass コンポーネントとしてモデルをコンパイルしてパッケージ化する

このセクションでは、toy alien モデルをターゲットエッジデバイスにコンパイルし、そのモデルを AWS IoT Greengrass コンポーネントとしてパッケージ化する手順を説明します。

  1. Lookout for Vision コンソールで、プロジェクトを選択します。
  2. ナビゲーションペインで、Edge model packages (エッジモデルのパッケージ) を選択します。
  3. Create model packaging job (モデルパッケージングジョブを作成)を選択します。
  4. Job name (ジョブ名)に、名前を入力します。(この場合は aliensblogcpux86)
  5. Job description (ジョブの説明)に、オプションの説明を入力します。
  6. Browse models (モデルの選択) を選択します。
  7. モデルバージョン(前のセクションで作成したおもちゃのエイリアンのモデル)を選択します。
  8. Choose (選択)を選択します。
  9. Amazon EC2 または X86-64 デバイスで実行している場合は、Target platform (ターゲットプラットフォーム) を選択し、LinuxX86、および CPU を選択します。
    CPU を使用している場合、NVIDIA GPUを搭載していないかわからない 場合は、コンパイラオプションを空のままにすることができます。AVX512 をサポートする Intel ベースのプラットフォームを使用している場合、これらのコンパイラオプションを追加してパフォーマンスを最適化できます:{"mcpu":"skylake-avx512"}
  10. Component nameComponent description (オプション)、Component version、および Component locationの詳細を入力します。Lookout for Vision は、この Amazon S3 の場所にコンポーネントのレシピとアーティファクトを保存します。
  11. Create model packaging job (モデルパッケージングジョブの作成)を選択します。ジョブ名とステータスが In progressと表示されているのがわかります。モデルのパッケージ化ジョブが完了するまでに数分かかる場合があります。モデルのパッケージ化ジョブが完了すると、ステータスは Successと表示されます。
  12. Continue deployment in Greengrass (Greengrassでのデプロイを続行)を選択して、コンポーネントをターゲットのエッジデバイスに展開します。

AWS IoT Greengrass コンポーネントとモデルアーティファクトが 同一のAWS アカウントに作成されました。

モデルをデプロイする

続行する前に、アカウントのターゲットデバイスに AWS IoT Greengrass V2 がインストールされていることを確認してください。手順については、AWS IoT Greengrass Core ソフトウェアをインストールします を参照してください。

このセクションでは、AWS IoT Greengrass コンソールを使用してモデルをエッジデバイスにデプロイする手順を説明します。

  1. AWS IoT Greengrass コンソールで、エッジデバイスに移動します。
  2. Deploy (デプロイ)を選択して、デプロイ手順を開始します。新しいデプロイを作成に進みます。
  3. Core device (デプロイは単一デバイス向けであるため) を選択し、Target name に名前を入力します。ターゲット名は、AWS IoT Greengrass V2 のインストールプロセスでコアデバイスに名前を付けるために使用した名前と同じです。
  4. コンポーネントを選択します。この例では、コンポーネント名は aliensblogcpux86 で、toy alienモデルが含まれています。
  5. Next を選択します。
  6. コンポーネントを設定します (オプション)。
  7. Next を選択します。
  8. Deployment policies (デプロイポリシー) を展開します。
  9. Component update policy (コンポーネントの更新ポリシー) で、Notify components (コンポーネントに通知する) を選択します。これにより、すでにデプロイされているコンポーネント (コンポーネントの以前のバージョン) は、更新の準備ができるまで更新を延期できます。
  10. Failure handling policy (失敗処理ポリシー) で、Don’t roll back (ロールバックしない) を選択します。障害が発生した場合、このオプションを使用すると、デプロイのエラーを調査できます。
  11. Next を選択します。
  12. ターゲット (エッジ) デバイスに展開されるコンポーネントのリストを確認します。
  13. Next を選択します。Deployment successfully created (デプロイが正常に作成されました)  というメッセージが表示されます。
  14. モデルのデプロイが成功したことを確認するには、エッジデバイスで次のコマンドを実行します。(訳註:greengrass-cliを使うためにはaws.greengrass.cliコンポーネントを予めインストールしておく必要があります)
    sudo /greengrass/v2/bin/greengrass-cli component list
    

aliensblogcpux86 ライフサイクル起動スクリプトと同様の出力が表示されます。

Greengrass で現在実行中のコンポーネント:

Components currently running in Greengrass: 
Component Name: aws.iot.lookoutvision.EdgeAgent 
 Version: 0.1.34 
 State: RUNNING 
 Configuration {"Socket":"unix:///tmp/aws.iot.lookoutvision.EdgeAgent.sock"} 
Component Name: aliensblogcpux86
 Version: 1.0.0 
 State: RUNNING 
 Configuration: {"Autostart":false}

モデルで推論を実行する

: ログインしているユーザーとは別のユーザーとして Greengrass を実行している場合は、ファイルのパーミッションを変更する必要があります。

/tmp/aws.iot.lookoutVision.EdgeAgent.sock 

chmod 666 /tmp/aws.iot.lookoutvision.EdgeAgent.sock

これで、モデルに対して推論を実行する準備ができました。Edge デバイスで、次のコマンドを実行してモデルをロードします (<modelName>をコンポーネントで使用されているモデル名に置き換えます)。

# run command to load the model# This will load the model into running state pass 
# the name of the model component as a parameter.
python3 warmup-model.py <modelName>

推論を実行するには、ソースファイル名を指定して次のコマンドを実行します (<path/to/images> を確認するイメージのパスとファイル名に置き換え、<modelName>をコンポーネントに使用されているモデル名に置き換えます)。

python3 sample-client-file-mqtt.py </path/to/images> <modelName>


start client ['sample-client-file.py', 'aliens-dataset/anomaly/1.png', 'aliensblogcpux86']
channel set
shape=(380, 550, 3)
Image is anomalous, (90.05860090255737 % confidence) contains defects with total area over .1%: {'missing_limbs': '#FFFFFF'}

このモデルは、0.9996867775917053の信頼スコアで画像を異常(missing_limbs)として正しく予測します。(訳註:値はモデルによって変化します)また、異常タグ missing_limbs のマスクと画像全体に対する異常領域の割合も示されています。レスポンスには、見つかったものをデコードできるビットマップデータも含まれています。

blended.png ファイルをダウンロードして開きます。このファイルは次の画像のようになります。脚の周りの欠陥で強調表示された領域に注目してください。

顧客事例

AWS IoT Greengrass と Lookout for Vision を使用すると、品質管理や欠陥評価などのプロセスのコンピュータビジョンによる目視検査を、すべてエッジでリアルタイムに自動化できるようになりました。部品の損傷(へこみ、傷、溶接不良など)、製品コンポーネントの欠落、または生産ライン自体に繰り返しパターンがある欠陥などの問題をプロアクティブに特定できるため、時間とコストを節約できます。TysonやBaxterのような顧客は、外観検査を自動化することで品質を向上させ、運用コストを削減するLookout for Visionの力を活用しています。

“Operational excellence is a key priority at Tyson Foods. Predictive maintenance is an essential asset for achieving this objective by continuously improving overall equipment effectiveness (OEE). In 2021, Tyson Foods launched a machine learning-based computer vision project to identify failing product carriers during production to prevent them from impacting team member safety, operations, or product quality. The models trained using Amazon Lookout for Vision performed well. The pin detection model achieved 95% accuracy across both classes. The Amazon Lookout for Vision model was tuned to perform at 99.1% accuracy for failing pin detection. By far the most exciting result of this project was the speedup in development time. Although this project utilizes two models and a more complex application code, it took 12% less developer time to complete. This project for monitoring the condition of the product carriers at Tyson Foods was completed in record time using AWS managed services such as Amazon Lookout for Vision.”

“タイソンフーズでは、オペレーショナルエクセレンスが最優先事項です。予知保全は、全体的な設備効率(OEE)を継続的に改善することによってこの目標を達成するために不可欠な資産です。2021年、Tyson Foodsは機械学習ベースのコンピュータービジョンプロジェクトを立ち上げ、生産中に故障した製品キャリアを特定し、チームメンバーの安全、運用、または製品品質に影響を与えないようにしました。Amazon Lookout for Vision を使用してトレーニングされたモデルは、良好に機能しました。ピン検出モデルは、両方のクラスで 95% の精度を達成しました。Amazon Lookout for Vision モデルは、ピン検出の失敗に対して 99.1% の精度で動作するように調整されました。このプロジェクトの最もエキサイティングな成果は、開発時間の短縮でした。このプロジェクトは2つのモデルとより複雑なアプリケーションコードを利用していますが、開発者が完了するまでにかかった時間が 12% 短縮されました。Tyson Foods の製品運送業者の状態を監視するこのプロジェクトは、Amazon Lookout for Vision などの AWS マネージドサービスを使用して記録的な速さで完了しました。”

—Audrey Timmerman, Sr Applications Developer, Tyson Foods.

“Latency and inferencing speed is critical for real-time assessment and critical quality checks of our manufacturing processes. Amazon Lookout for Vision edge on a CPU device gives us the ability to achieve this on production-grade equipment, enabling us to deliver cost-effective AI vision solutions at scale.”

“レイテンシと推論速度は、製造プロセスのリアルタイム評価と重要な品質チェックにとって重要です。CPU デバイス上の Amazon Lookout for Vision Edge により、プロダクショングレードの機器でこれを実現し、費用対効果の高い AI ビジョンソリューションを大規模に提供できるようになりました。”

—A.K. Karan, Global Senior Director – Digital Transformation, Integrated Supply Chain, Baxter International Inc.

クリーンアップ

次の手順を実行して、作成したアセットをアカウントから削除し、継続的な請求を回避します。

  1. Lookout for Vision コンソールで、プロジェクトに移動します。
  2. Actions メニューで、データセットを削除します。
  3. モデルを削除します。
  4. Amazon S3 コンソールで、作成したバケットを空にしてから、バケットを削除します。
  5. Amazon EC2 コンソールで、AWS IoT Greengrass を実行するために開始したインスタンスを削除します。
  6. AWS IoT Greengrass コンソールで、ナビゲーションペインで Deployments を選択します。
  7. コンポーネントバージョンを削除します。
  8. AWS IoT Greengrass コンソールで、AWS IoT のthingsgroups、およびdevicesを削除します。

結論

この投稿では、エッジの活用による製造業の典型的な外観検査シナリオについて説明し、CPUのみのデバイスにモデルをデプロイする方法について説明しました。Lookout for Vision と AWS IoT Greengrass を使用したエンドツーエンドの例で、クラウドとエッジのライフサイクルの主要コンポーネントについて説明しました。Lookout for Vision では、トイエイリアンデータセットを使用してクラウドで異常検出モデルをトレーニングし、そのモデルをターゲットアーキテクチャにコンパイルし、モデルを AWS IoT Greengrass コンポーネントとしてパッケージ化しました。AWS IoT Greengrass を使用して、モデルをエッジデバイスにデプロイしました。エッジデバイスのローカルファイルシステムからおもちゃのエイリアンの画像ファイルをロードし、gRPC インターフェイスを使用してエッジ上の Lookout for Vision モデルで推論を実行し、推論データを AWS クラウドの MQTT トピックに送信する Python ベースのサンプルアプリケーションをデモしました。

今後の投稿では、GStreamerメディアパイプラインを使用して画像のリアルタイムストリームで推論を実行する方法を紹介します。

Amazon Lookout for Vision と AWS IoT Greengrass のリソースページにアクセスして、製造業での外観異常の検出と特定に向けた旅を始めましょう。


著者について

Manish Talreja は、AWS プロフェッショナルサービスのシニアインダストリアル ML プラクティスマネージャーです。彼は、AWS クラウドで AWS ML と IoT サービスを使用する革新的なソリューションを設計および構築することにより、AWS のお客様のビジネス目標の達成を支援しています。

Ryan Vanderwerf は、アマゾンウェブサービスのパートナーソリューションアーキテクトです。彼は以前、Grails and MicronautチームのOCIでソフトウェアエンジニアとしてJava仮想マシンに焦点を当てたコンサルティングとプロジェクト開発を提供していました。彼は、マーケティングデータ管理のための AWS クラウド SaaS ソリューションのソフトウェアとシステムアーキテクチャを中心に、ReachForce のチーフアーキテクト/製品ディレクターを務めました。Ryan は 1996 年以来、金融、メディア、通信、e ラーニングなどの複数のドメインでいくつかの SaaS ソリューションを構築してきました。

Prakash Krishnan は、アマゾンウェブサービスのシニアソフトウェア開発マネージャーです。彼は、ディープラーニングベースの画像およびビデオ認識問題に、高速、効率的、高度にスケーラブルなアルゴリズムを適用するために、大規模な分散システムを構築しているエンジニアリングチームを率いています。

原文はこちらをご覧ください

このブログ記事は機械学習ソリューションアーキテクトの卜部が翻訳しました。