Amazon Web Services ブログ

Tyson Foods Inc. 社におけるコンピュータービジョン、AWS Panorama と Amazon SageMakerを活用した製造工程の自動化

このブログは 2022 年 1 月 18 日に Divya Bhargavi と Dilip Subramaniam によって投稿された「Industrial automation at Tyson with computer vision, AWS Panorama, and Amazon SageMaker」を翻訳したものです。

本投稿は、Tyson Foods Inc. 社が、機械学習を活用し人工知能アプリケーションをエッジで実行する事で、食肉加工工場のプロセスを自動化しているご紹介を2回に分けて紹介するブログシリーズの第1回目です。第1回目は、Amazon SageMaker と AWS Panorama を使って構築した包装ライン用の在庫数を自動で計測するアプリケーションについて解説します。第2回では産業機器の予知保全のための画像を使ったエッジでの異常検知ソリューションについて解説します。

鶏肉、牛肉、豚肉の加工・販売で世界最大手の1社に位置づけられるTyson Foods Inc. 社は、生産・包装工場に革新的なソリューションを導入していることで知られています。2020年2月、Tyson Foods Inc. 社は鶏肉工場にコンピュータビジョン(CV)を導入する計画を発表し、在庫管理に関する取り組みの先駆けとして AWS とのパイロットプロジェクトの計画を発表しました。Tyson Foods Inc. 社は Amazon ML Solutions Lab と協力し、包装された商品の在庫レベルをリアルタイムに把握できる最先端の鶏肉トレイ計数 CV ソリューションを開発しました。この投稿では AWS アーキテクチャの概要とソリューションの詳細の解説を通じてTyson Foods Inc. 社の工場に設置されたトレイ・カウンティング・パイプラインの主要コンポーネントをご紹介します。Amazon SageMakerApache MXNet GluonAWS Panorama を使用した、エッジでのデータ収集とラベリング、トレーニング、CV モデルのデプロイメントに焦点を当てます。

オペレーショナルエクセレンスは、Tyson Foods Inc. 社の優先事項です。Tyson Foods Inc. 社では、包装ラインに厳格な品質保証(QA)制度を定義し、合格した製品のみが出荷されます。顧客の需要に応え生産上の課題に先手を打つため、Tyson Foods Inc. 社は包装された鶏肉のトレイ数を綿密にモニターしています。しかし、QA に合格した鶏肉トレイを数える手作業での計測は正確ではなく、生産数の過不足を明確に把握することはできません。また、1 時間毎にラックの生産総重量を計測するなどの代替策も工場の職員への即時フィードバックに繋がりません。週 4500 万羽の鶏肉処理能力を持つ Tyson Foods Inc. 社のビジネスにとって、生産の正確さと効率性は非常に重要です。このような場面で CV を効果的に活用することで、鶏肉の処理量をリアルタイムかつ正確に予測し、包装や生産ラインにおけるボトルネックの可能性を把握することが可能になります。これにより、改善策を講じることができ生産効率を向上させることができます。

オンプレミスの映像をクラウド上でストリーミング処理し CV アプリケーションに利用するには、高いネットワーク帯域幅と関連インフラのプロビジョニングが必要となり、コスト面で困難となり得ます。AWS Panorama はこれらの困難を取り除き、AWS Panorama Appliance 上でエッジでのビデオストリームを処理することを可能にします。クラウドとの間のレイテンシーと帯域幅のコストを削減し、エッジでのデバイスとアプリケーションを管理するための使いやすいインターフェイスを提供することができます。

物体検出は、画像や映像中の物体の位置を特定することができる、最も広く使われている CV アルゴリズムの1つです。この技術は現在、自律走行車の歩行者検知、医療用スキャンの腫瘍検出、小売店での来客数記録など、様々なアプリケーションで利用されています。また、Tyson Foods Inc. 社における食肉トレイの計測など、在庫管理においても生産工程とのフィードバックループを構築することで無駄を削減し、コスト削減や商品の定時配送を実現するために欠かせないものとなっています。

以下のセクションでは、Amazon SageMaker を使用して Tyson Foods Inc. 社の工場の1つからのライブストリーム・ビデオからオブジェクト検出モデルをトレーニングしている方法の概要を説明します。その後、AWS Panorama デバイスを使用してエッジにデプロイします。

AWS Panorama

AWS Panorama は、オンプレミスのカメラに CV を導入し、高精度かつ低レイテンシーでオンプレミスにて予測を行うことを可能にする機械学習 (ML) 機器です。AWS Panorama Appliance は、ML を使用するアプリケーションの実行ができて、ビデオストリームからデータを収集し、テキストやグラフィカルオーバーレイでビデオを出力し、他の AWS サービスと連携できるハードウェアデバイスです。この機器は、複数のビデオストリームに対して複数の CV モデルを並行して実行し、その結果をリアルタイムに出力することができます。商業施設や産業施設での利用を想定して設計されています。

AWS Panorama Applianceを使用すると、AWSクラウドに画像を送信することなく、エッジで完結する CV アプリケーションを実行することができます。また、AWS Panorama Appliance上のAWS SDKを使用してAWSサービスへ連携し、それらを使用してアプリケーションからのデータを追跡することができます。アプリケーションの構築とデプロイには、AWS Panorama Application CLI を使用します。CLI はデフォルトのアプリケーションフォルダと設定ファイルを生成し、Docker でコンテナを構築、アセットをアップロードするコマンドラインツールです。

AWS Panoramaは、Apache MXNetDarkNetGluonCVKerasONNXPyTorchTensorFlowTensorFlow Liteで構築したモデルをサポートしています。AWS Panorama 上でのアプリケーション構築については、こちらのブログをご参照ください。デプロイメントの過程で、AWS PanoramaはAmazon SageMaker Neoでエッジプラットフォーム特有のモデルのコンパイルを引き受けます。推論結果は Amazon S3 や Amazon CloudWatch などの AWS サービスにルーティングしたり、オンプレミスの業務用アプリケーションと統合したりすることができます。デプロイメントのログは、Amazon CloudWatch に保存されます。

推論スクリプトのロジックや学習済みモデルの変更を追跡するために、アプリケーションの新バージョンを作成することができます。アプリケーションのバージョンは、アプリケーション構成の不変のスナップショットです。AWS Panorama はアプリケーションの過去のバージョンを保存し、失敗したアップデートをロールバックしたり、異なるバージョンを異なる機器で実行できるようにします。

詳細については、AWS Panoramaのページを参照してください。サンプルアプリケーションの構築の詳細については、AWS Panorama Samplesを参照してください。

アプローチ

工場では図のように包装された鶏肉トレイをプラスチックトレイに充填し積み上げていく作業が継続的に行われています。この際、積み重ねたすべてのプラスチックトレイの鶏肉トレイの合計を数えられようにしなければなりません。

トレーニング済みの物体検出モデルは、ビデオフレームごとにプラスチックトレイに入れられたすべての鶏肉トレイのバウンディングボックスを予測することができます。これは、ある時点でのプラスチックトレイ内の鶏肉トレイ数を測定するために使用することができます。また、充填されているプラスチックトレイは常にひとつのみです。鶏肉トレイのカウントは連続的に高い(充填中)と低い値(新しい容器が充填済み容器の上に乗せられた時)の間を移動します。

上記に基づき、鶏肉トレイの総数をカウントするために以下の方法を取ります。

  1. ローカルとグローバルの2つの異なるカウンターを維持する。グローバルカウンターは充填済み鶏肉トレイの総数を保持し、ローカルカウンターは新しいプラスチックトレイに入れられた鶏肉トレイの最大数を保持する。
  2. 新しい鶏肉トレイがプラスチックトレイに入れられると、ローカルカウンターを更新する。
  3. 以下の方法で「新規プラスチックトレイイベント」を検出する
    1. フレーム内の鶏肉トレイのカウントがゼロになる、または
    2. 直近の n フレームにおける鶏肉トレイ数が連続的に低下する
  4. 「新規プラスチックトレイイベント」が検出されたら、ローカルカウンターの値をグローバルカウンターに追加する
  5. ローカルカウンターをゼロにリセットする

上記アルゴリズムを数時間分のビデオでテストし、一貫した結果を得ることが出来ました。

Amazon SageMakerを使った物体検知モデルのトレーニング

データセットの作成:

ラベリングジョブ用の画像サンプルの収集

AWS Panorama Appliance を使用して、梱包ラインから画像サンプルを収集します。画像を処理し保存するスクリプトはアプリケーションとしてパッケージ化し AWS Panorama 上にデプロイしています。このアプリケーションは包装工程の近くに設置したオンプレミスカメラからビデオフレームを収集し、60秒毎に Amazon S3 バケットに保存します。これにより、数秒しか離れていない類似画像の収集を防ぎます。さらに、ユースケースに関係のない画像内の領域をマスクします。

Amazon SageMaker Ground Truth のストリーミングラベリングジョブを使用して、バウンディングボックスでトレーにラベル付けを行います。また、オブジェクトが作成された (ObjectCreated) イベントを Amazon Simple Notification Service(SNS)のトピックに発行する Amazon S3 イベント通知機能を設定し、ラベリングジョブの入力ソースとして使います。AWS Panorama のアプリケーションスクリプトが画像をS3バケットに保存すると、イベント通知が SNS トピックに発行され、画像がラベリングジョブに送信されます。受信した画像にアノテーターがラベルを付けると、Ground Truth は画像のS3パスとトレーのバウンディングボックスの座標を含むマニフェストファイルにラベルを保存します。

ラベル付けされた画像に対して、いくつかのデータ拡張(例えば、ランダムノイズ、ランダムコントラストと明るさ、チャネルシャッフル)を行い、工場内の実環境に対応できるモデルを作ります。オリジナル画像と拡張画像を組み合わせたデータセットを作成します。

モデルのトレーニング:

ラベリングジョブが完了したら、手動で AWS Lambda 関数を実行します。この Lambda 関数は出力マニフェストから画像とそれに対応するラベルを LST ファイルにまとめます。トレーニングファイルとテストファイルには、評価時のデータ漏洩を防ぐために、異なるパッケージングラインから収集した画像を使用しています。次に、Lambda 関数が Amazon SageMaker のトレーニングジョブをトリガーします。

本事例では SageMaker Script Mode を使用しており、Amazon SageMaker のユーザーフレンドリーな範囲内で独自のトレーニングアルゴリズムを用いて直接トレーニングすることが可能です。私たちは、SSD、Yolo-v3(リアルタイム推論レイテンシ用)、GluonCV Model Zoo からの様々なバックボーンネットワークの組み合わせによる物体検出などのモデルをスクリプトモードでトレーニングしています。ニューラルネットワークは、学習データをオーバーフィットさせる傾向があり、サンプル外の検証結果が悪くなります。GluonCV は画像の正規化、画像のランダムな反転や切り抜きなどの画像拡張を行い、学習時のオーバーフィッティングを軽減します。モデルの学習コードはコンテナ化されており、AWS Elastic Container Registry にあるDocker イメージを使用します。トレーニングジョブは、S3 イメージフォルダと LST ファイルのパスを入力とし、完了時に最適なモデルアーティファクト(.params と .json)を S3 に保存します。

モデル評価パイプライン

テストセットを使ったモデルのトップ 2 は SSD-resnet50 と Yolov3-darketnet53 で、それぞれ 0.91 の mAP スコアを獲得しました。また、学習済みモデルとともに推論アプリケーションを AWS Panorama デバイス上にデプロイし実環境でのテストも実施しました。推論スクリプトは予測値とビデオフレームを Amazon S3 バケットに保存しています。 教師データのアノテーションを実施するために別の SageMaker Ground Truth ジョブを作成し、さらに定量的なモデル評価を実施します。教師画像と、予測されたバウンディングボックスラベルは定性的評価のために S3 に保存されます。モデルは実世界のデータで一般化することができ、テストセットと同様の一貫したパフォーマンスを得ることができました。

カスタムトレーニングジョブの作成、最先端の物体検出モデルのトレーニング、ハイパーパラメータ最適化(HPO)の実装、Amazon SageMaker でのモデルデプロイメントのエンドツーエンドの例は、 AWS Labs GitHub repo で参照することができます。

食肉トレー計数アプリケーションの展開

プロダクション・アーキテクチャ

デプロイメントの前に、このブログで紹介されたように、モデル、推論スクリプト、カメラやグローバル変数の設定など、すべてのアセットをコンテナにパッケージ化します。継続的インテグレーションと継続的デプロイメント(CI/CD)パイプラインは、推論スクリプトの変更を新しいアプリケーションのバージョンとして更新します。新しいアプリケーションのバージョンが公開されると、Python で boto3 SDK を使用しデプロイします。

アプリケーションをデプロイすると、AWS Panorama はまず AWS SageMaker Neo のコンパイルジョブを作成し、AWS Panorama デバイス用のモデルをコンパイルします。推論アプリケーションのスクリプトがデバイス上でコンパイルされたモデルをインポートし、フレームごとにチキントレイ検出を行います。SageMaker Neo コンパイルに加えて、スクリプトに os.environ['TVM_TENSORRT_USE_FP16'] = '1' フラグを追加して、ポストトレーニングの定量化行います。この設定により、モデルの重みのサイズが float 32 から float 16 になり、モデルのサイズが半分となり、性能を落とすことなくレイテンシーが改善されます。推論結果は AWS IoT core を介して AWS Panorama デバイスから MQTT メッセージで AWS SiteWise Monitor に取り込まれます。その結果は Amazon S3 にプッシュされ、 Amazon QuickSight Dashboards で可視化されます。工場の管理者や従業員は、これらのダッシュボードを使ってすべての包装ラインのスループットをリアルタイムに把握することができます。

まとめ

Amazon SageMaker、Amazon S3 などの AWS クラウドサービスと AWS Panorama などのエッジサービスを組み合わせることで、Tyson Foods Inc. 社は製造工場における在庫計算などの人的負荷の高い工程を自動化するために人工知能を導入しています。リアルタイムなエッジ推論により Tyson Foods Inc. 社は生産の過不足を特定し、生産フローを調整することで効率を最大化しています。さらに、エッジに AWS Panorama デバイスを配置することで、Tyson Foods Inc. 社はビデオファイルをクラウドに転送するための高価なネットワークコストを節約し、ローカルですべてのビデオ/画像を処理することができるようになったことも挙げられます。

本投稿では、AWS Panorama を使用した CV アプリケーションを開発するためのエンド・ツゥ・エンドなエッジアプリケーションの概要とリファレンスアーキテクチャをご紹介しました。また、エッジ CV アプリケーションを構築するための3つの異なる側面について説明しました。

  1. データ: AWS Panorama と Amazon SageMaker Ground Truth を使用したデータの収集、処理、ラベリング
  2. モデル: Amazon SageMaker と AWS Lambda を使用したモデルのトレーニングと評価
  3. アプリケーションパッケージ:学習済みモデル、スクリプト、AWS Panorama 用設定ファイルなどをバンドル

Tyson Foods Inc. 社が産業機械の CV ベースの予知保全のために AWS Panorama をどのように使用しているかパート 2 の投稿をお楽しみに!

AWS Panorama を使い始めるにはこちらをクリックしてください。ML Solutions Lab との連携については、Amazon Machine Learning Solutions Lab をご覧ください。

翻訳はソリューションアーキテクトの浅野が担当しました。