Amazon Web Services ブログ

Amazon Lookout for Vision と AWS Panorama を使用したコンピュータービジョンによる異常検知

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

Tyson Foods, Inc. 社では、オペレーショナル・エクセレンスが最優先事項です。この目標を達成するために、予知保全は総合設備効率 (OEE) の継続的な改善の不可欠な取り組みになります。2021年に、Tyson Foods, Inc. 社は機械学習に基づいたコンピュータービジョンプロジェクトを立ち上げ、製造中に故障した搬送器具を特定し、チームメンバーの安全、オペレーション、製品品質に影響を与えないようにしました。搬送器具が破損したり、間違った位置に移動したりした場合は、生産を停止させなければなりません。停止が間に合わないと、チームメンバーの安全と機械に悪影響を与えます。手作業による検査では、作業者は1ラインあたり8,000本の連結ピンを検査します。細部への注意が重要であるため、時間がかかる高度な検査です。Tyson Foods, Inc. 社の機械学習の実践者は、検査プロセスを自動化し、異常を継続的に検出するためのコンピュータービジョンモデルを構築しました。この自動化により、メンテナンスチームは対応時間を短縮し、8,000本のピンの検査の信頼性を向上させることができました。

画像を分析して異常を検出するカスタム ML モデルを開発し、これらのモデルをエッジで効率的に実行させることは困難な作業です。高度な専門知識、時間、リソースが必要です。開発サイクル全体が完了するまでに数か月かかる場合があります。このシリーズの第1回目で取り上げたアプローチをもとに、Amazon Lookout for Vision などの AWS のマネージドサービスを使用して、Tyson Foods, Inc. 社の搬送器具の状態監視プロジェクトを注目すべき速さで完了しました。

ソリューションの概要

第1回目で鶏肉のトレイを数えるユースケースの為に設計したパターン、コード、およびインフラストラクチャは、搬送器具プロジェクトに流用されました。一見、二つのプロジェクトは大きく異なっているように見えますが、根本的には画像キャプチャ、ラベル付け、モデルトレーニング、フレーム重複排除、推論という同じ5つのコンポーネントで構成されています。

この投稿では、AWS Panorama と Lookout for Vision を使用して、故障した搬送器具 (または同様の製造ラインの装置) に対して、コンピュータービジョンをもとに異常検出ソリューションをセットアップする方法を紹介します。ワークフローは、エッジの AWS Panorama デバイス上のオブジェクト検出モデルによる推論から始まります。オブジェクト検出モデルは画像を切り取り、その結果を Lookout for Vision の異常検出モデルに渡します。このモデルは、搬送装置の連結ピンの画像を分類します。異常なピンの画像とモデルの結果はクラウドに送信され、他の処理に利用できます。

次の図は、このアーキテクチャを示しています。

前提条件

この記事の内容を実施するには、次のものが必要です。

物体検出モデルの学習

複数の推論モデルを使った設計の第1段階は、搬送器具とフラグを検出するためにトレーニングされた SSD (Single Shot MultiBox Detector) オブジェクト検出モデルです。フラグとは、搬送器具ラインの先頭を特定でき、ループのサイクルを追跡して、異常検出の重複を排除するために利用します。撮ったピンの画像は、Lookout for Vision を使用して異常分類モデルのトレーニングに使用されます。

次の画像は、ピン検出 SSD モデルによる推論結果の例です。

Lookout for Vision を使用した異常分類モデルのトレーニング

Lookout for Vision は、コンピュータービジョンを使用してオブジェクトの外観上の欠陥を特定する、フルマネージド ML サービスです。コードをほとんど使用せずに異常検出モデルをすばやく構築でき、始めるために必要なデータもごくわずかです (最小で 20 枚の正常画像と 10 枚の異常画像)。Lookout for Vision モデルのトレーニングには、次の 4 つのステップがあります。

  1. Lookout for Vision プロジェクトの作成
  2. 搬送器具のデータセットの作成
  3. Lookout for Vision モデルのトレーニングとチューニング
  4. Lookout for Vision モデルを推論用にエクスポート

このセクションでは、ステップ 1 から 3 を説明します。

Lookout for Vision プロジェクトの作成

Lookout for Vision プロジェクトの作成手順については、「プロジェクトの作成」を参照してください。

搬送器具データセットの作成

Lookout for Vision のデータセットは、正方形の画像、JPG または PNG 形式、最小ピクセル数は 64 x 64、最大ピクセル数は 4096 x 4096 である必要があります。要件を満たすデータセットを生成するには、次の Python コードを使用して、元の縦横比を維持したまま、矩形に切り取って画像のサイズを変更する必要がありました。このコードを第 1 回目で説明した画像取得パイプラインに追加し、Lookout for Vision 用の最終的な 150 x 150 ピクセルの画像を生成します。

def crop_n_resize_image(self, img, bbox, size, padColor=0):

    # crop images ==============================
    crop = img[bbox[1]:bbox[3],bbox[0]:bbox[2]].copy()
    
    # cropped image size
    h, w = crop.shape[:2]
    # designed crop image sizes
    sh, sw = size

    # interpolation method
    if h > sh or w > sw: # shrinking image
        interp = cv2.INTER_AREA
    else: # stretching image
        interp = cv2.INTER_CUBIC

    # aspect ratio of image
    aspect = w/h 

    # compute scaling and pad sizing
    if aspect > 1: # horizontal image
        new_w = sw
        new_h = np.round(new_w/aspect).astype(int)
        pad_vert = (sh-new_h)/2
        pad_top, pad_bot = np.floor(pad_vert).astype(int), np.ceil(pad_vert).astype(int)
        pad_left, pad_right = 0, 0
    elif aspect < 1: # vertical image
        new_h = sh
        new_w = np.round(new_h*aspect).astype(int)
        pad_horz = (sw-new_w)/2
        pad_left, pad_right = np.floor(pad_horz).astype(int), np.ceil(pad_horz).astype(int)
        pad_top, pad_bot = 0, 0
    else: # square image
        new_h, new_w = sh, sw
        pad_left, pad_right, pad_top, pad_bot = 0, 0, 0, 0

    # set pad color
    if len(img.shape) is 3 and not isinstance(padColor, (list, tuple, np.ndarray)): # color image but only one color provided
        padColor = [padColor]*3

    # scale and pad
    scaled_img = cv2.resize(crop, (new_w, new_h), interpolation=interp)
    scaled_img = cv2.copyMakeBorder(scaled_img, pad_top, pad_bot, pad_left, pad_right, borderType=cv2.BORDER_CONSTANT, value=padColor)

    return scaled_img

以下は処理された搬送器具の画像の例です。

Amazon SageMaker Ground Truth を通じて画像にラベルを付け、ラベルマニフェストファイルが生成されます。このファイルは Lookout for Vision にインポートし、異常検出データセットを作成します。Lookout for Vision 内で画像にラベルを付けることはできますが、このプロジェクトではこの方法を使用していません。次のスクリーンショットは、Lookout for Vision コンソールでラベル付けされたデータセットを紹介します。

Lookout for Visionモデルのトレーニングとチューニング

Lookout for Vision での異常検出モデルのトレーニングは、ボタンをクリックするだけで簡単に行えます。Lookout for Vision は、モデルのパフォーマンスを検証するためのテストセットとして、データの 20% を自動的に確保します。モデルから良い結果を得るためには、ラベル付けと画像の画質が最重要です。最初に使用した画像のサイズが小さすぎて、解像度が原因で重要な詳細部分が失われました。解像度を 64 x 64 から 150 x 150 に上げることで、モデルの精度が大幅に向上しました。ラベルを調整するために、開発チームは工場の対象分野の専門家と多くの時間を費やし、各分類の定義を設計する際に彼らの知識を活用しました。分類の定義は明確であることが不可欠であり、完璧なものにするためには複数のサイクルが必要でした。次のスクリーンショットは、定評のある分類の定義で得られた結果を示しています。

AWS パノラマアプリケーションの開発

AWS Panorama アプリケーションは AWS Panorama Appliance にデプロイされた推論コンテナで、AWS Panorama SDK を使用して入力動画ストリームの処理、推論の実行、動画結果の出力を行います。推論コードのほとんどは第 1 部と同じです。この搬送器具のユースケース専用に次の機能が追加されています。

  • フレーム推論トリガの作成
  • Lookout for Vision 推論の実行
  • ピンの重複排除と位置の特定

フレーム推論トリガの作成

このユースケースでは、搬送器具はビデオフレーム上を継続的に移動していて、カメラの視野から外れるまで同じピンが繰り返し検出されることがあります。同じピンを繰り返し異常分類のために Lookout for Vision に送信したり、コンピューティングリソースを浪費したりしないように、フレームのサンプル数を減らして、重複したピンに対する推論回数を減らすソフトウェアトリガを推論コードで開発しました。次のスクリーンショットは実際のビデオフレームの一部分を切り取っていますが、実際に検出されるピンの最小数は 8 で、最大数は 10 です。

このソフトウェアトリガのロジックでは、ビデオフレームに入ってくる搬送器具の数によって判断し、フレーム内のバウンディングボックスの数が最大値に達したタイミングで動作します。上の図のように、常に最小数から最大数のバウンディングボックスが検出されます。新しい搬送器具がフレーム内に出入りすることによって、最小数と最大数の間でカウントは変動します。次の図は、変動パターンを示しています。カメラのフレームは 6 つの搬送器具しか撮れないため、搬送器具 ID が 6 増えるとフレーム全体がずれていることがわかります。

Lookout for Vision推論の実行

フレームの画像からバウンディングボックスの部分を切り取り、前述と同じサイズ変更関数を使用して処理し、これらの画像を Lookout for Vision モデルに送信して異常分類を行います。Lookout for Vision モデルはラベル (正常 または 異常) と信頼スコアを生成して返します。

ピンの位置の特定と重複排除

最後に、このユースケースでは、搬送器具の相対的な位置を特定することと、不良ピンごとに重複を避けるため一つしかエントリーを生成しないことが重要でした。ピンの位置を追跡するために、フラグを基準点として使用し、搬送器具 ID をカウントする推論コードが作成されました。異常が検出されると、搬送器具 ID がピンの画像とともに記録され、フラグとの相対位置が送信されます。また、このフラグを使用して、異常検出の重複を排除し、搬送器具ライン全体が一周したことを追跡します。フラグが現れるたびにサイクル ID パラメータが増加され、搬送器具 ID などのすべてのパラメータが 0 にリセットされて新しいサイクルが開始されます。

AWS Panorama でモデルをエッジにデプロイ

モデルと推論コードの準備ができたら、オブジェクト検出モデル、推論コード、カメラストリームをコンテナにパッケージ化し、パート 1 で説明したのと同じデプロイパターンを使用して AWS Panorama にデプロイします。

メールアラート

システムが異常を検出すると、欠陥のあるピンを含む画像が Amazon S3 に保存され、関連するメタデータが AWS IoT SiteWise に送信されます。各シフトの終わりに EventBridge イベントが Lambda 関数をトリガーし、画像とメタデータを使って状況報告の Eメールを工場スタッフに送信します。工場スタッフは、シフトチェンジ中のこの情報を使って修理を実施します。

まとめ

この投稿では、Lookout for Vision と AWS Panorama を使用して、本番環境でビジョンベースの異常検出システムをセットアップする方法を説明しました。このソリューションにより、工場では 1 ラインあたりにチームメンバーの時間を 1 日あたり 1 時間節約できます。この工場だけで年間15,000時間の熟練労働者の時間の節約が推定されます。Tyson Foods, Inc. 社の貴重なチームメンバーが他のもっと複雑なタスクに時間を割り当てることができます。

このプロセスでトレーニングされたモデルはうまく動作しました。SSD (Single Shot Multibox Detector) によるピン検出モデルは、両方の分類で 95% の精度を達成しました。Lookout for Vision モデルは、不良ピン検出に対して 99.1% の精度で動作するようにチューニングされました。このプロジェクトでは 2 つのモデルが利用されたにもかかわらず、推論コードはラインの速度に十分に対応できて、約 10 FPS で動作しました。

このプロジェクトの最も喜ばしい成果は、開発時間の短縮でした。このプロジェクトでは、第 1 回目で紹介したプロジェクトよりも 2 つのモデルと複雑なアプリケーションコードを使用していますが、開発の所要時間が 12% 短縮されました。この俊敏性が実現できるのは、パート 1 で確立した繰り返し可能なパターンと AWS のマネージドサービスを使用しているからです。この組み合わせにより、当社の最終ソリューションはより迅速に拡張でき、業界にも対応できるようになりました。Amazon Lookout for Vision の詳細については、Amazon Lookout for Vision リソースページをご覧ください。また、GitHub リポジトリにて、AWS パノラマの動作例を確認することもできます。


著者について

Audrey Timmerman は、Tyson Foods, Inc. 社のシニア・アプリケーション・デベロッパーです。アーカンソー大学でコンピューターエンジニアリングを卒業し、Tyson Foods, Inc. 社のエマージング・テクノロジー・チームに 2 年間所属しています。彼女はコンピュータービジョン、機械学習、IoT アプリケーションに関心を持っています。

James Wu は、テキサス州ダラスを拠点とする AWS のシニアカスタマーソリューションマネージャーです。彼は顧客と協力して、クラウドへの移行を加速し、ビジネス価値の実現を迅速化しています。それに加えて、James は、さまざまなドメインにわたる大規模な AI/ML ソリューションの開発と拡大にも熱心です。AWS に入社する前は、マーケットと広告業界でトップグローバル企業で ML エンジニアとソフトウェア開発者で構成されている多分野のイノベーションテクノロジーチームを率いていました。

Farooq Sabir は AWS のシニア AI/ML スペシャリストソリューションアーキテクトです。テキサス大学オースティン校で電気工学の博士号を取得しています。データサイエンス、機械学習、人工知能、数値最適化を使用して、お客様がビジネス上の課題を解決できるよう支援しています。

Elizabeth Samara Rubio は、アマゾンウェブサービスの WWSO のプリンシパルスペシャリストであり、産業や製造業を含む業界で新しい AI/ML およびコンピュータービジョンのソリューションを推進しています。Amazon に入社する前は、Accenture 社で北米インダストリー X の成長と戦略をリードするのマネージングディレクター、AMETEK 社で部門バイスプレジデント、Cognex 社 でビジネスユニットマネージャーを務めました。

Shreyas Subramanian は AI/ML のスペシャリストソリューションアーキテクトであり、機械学習を使用して AWS クラウドでビジネス上の課題を解決するためにお客様を支援しています。

翻訳は Solutions Architect シャルノ ミカエルが担当しました。原文は「Computer vision-based anomaly detection using Amazon Lookout for Vision and AWS Panorama」です。