エッジでの視覚品質検査のためのエンド・ツー・エンドMLOpsパイプラインの構築-パート2
エンド・ツー・エンドMLOpsパイプラインでのエッジの視覚品質検査の構築-パート2
このシリーズのPart 1では、エッジでの視覚品質検査のためのエンドツーエンドのMLOpsパイプラインのアーキテクチャを作成しました。このパイプラインは、データのラベリングからモデルのトレーニングおよびエッジでの展開まで、機械学習(ML)プロセス全体の自動化を行うように設計されています。マネージドおよびサーバーレスサービスに焦点を当てることで、パイプラインのインフラ運用の必要性を低減し、すばやく開始することができます。
この記事では、パイプラインのラベリング、モデルの構築、トレーニングの部分について詳しく説明します。もしアーキテクチャのエッジ展開に特に興味がある場合は、Part 3に進むこともできます。また、自身で展開して試すためのGitHubリポジトリも提供しています。
ソリューションの概要
このシリーズで使用するサンプルユースケースは、製造プロセスの一部として展開される金属タグの欠陥を検出する視覚品質検査ソリューションです。以下の図は、このシリーズの最初で定義したMLOpsパイプラインのハイレベルなアーキテクチャを示しています。まだ読んでいない場合は、Part 1を確認することをおすすめします。
- エッジでのビジュアル品質検査のためのエンドツーエンドのMLOpsパイプラインの構築-パート3
- カスタム分類モデルでの予測の品質を向上させるには、Amazon Comprehendを使用します
- 「AWS Trainiumを使用した高速で費用効果の高いLLaMA 2の微調整」
データラベリングの自動化
データラベリングは、人間(ラベラー)によるデータのラベリングを伴う労働集約型のタスクです。ユースケースでは、ラベリングは各欠陥に対してバウンディングボックスを描画することを意味します。これは簡単に聞こえるかもしれませんが、次のようなことに注意を払う必要があります。
- ラベラーがバウンディングボックスを描画するためのツールを提供する
- ラベラーのワークフォースを管理する
- 良好なラベル品質を確保する
- データとラベルを管理およびバージョン管理する
- プロセス全体をオーケストレーションする
- CI/CDシステムに統合する
AWSサービスを使用してこれらすべてを実現することができます。ラベリングを容易にし、ワークフォースを管理するために、Amazon SageMaker Ground Truthというデータラベリングサービスを使用します。このサービスでは、独自のデータラベリングワークフローとワークフォースを構築および管理することができます。独自のラベラーワークフォースを管理するか、Amazon Mechanical Turkやサードパーティのプロバイダを介して外部のラベラーの力を利用することもできます。
さらに、AWS SDKを使用して、CI/CDパイプラインの一部としてラベリングワークフローをオーケストレーションするために、プロセス全体を構成および管理できます。
ラベリングジョブは、ラベリングワークフローを管理するために使用されます。SageMaker Ground Truthでは、バウンディングボックスの描画など、さまざまなラベリングタスクタイプのための即座に利用可能なテンプレートを提供しています。バウンディングボックスタスクのラベリングジョブの設定方法の詳細については、Streamlining data labeling for YOLO object detection in Amazon SageMaker Ground Truthをご覧ください。ユースケースでは、バウンディングボックスタスクのためのタスクテンプレートを適応し、デフォルトではMechanical Turkが提供する人間の注釈付け者を使用してイメージにラベルを付けます。次のスクリーンショットは、注釈付け者がイメージに取り組んでいるときに表示されるものです。
次にラベルの品質について話しましょう。ラベルの品質は、MLモデルの品質に影響を与えます。Mechanical Turkのような外部の人力労働者を使用して画像のラベリングを自動化する際には、ドメインの専門知識の欠如により、良好かつ一貫したラベルの品質を確保することは難しいです。時には、ドメインの専門家による専用の人力労働者が必要です。ただし、私たちのサンプルソリューションでは、画像の自動ラベリングのためにMechanical Turkを使用しています。
良好なラベルの品質を確保するための方法はいくつかあります。より詳細な情報については、AWS re:Invent 2019の講演「Amazon SageMaker Ground Truthを使用した正確なトレーニングデータセットの構築」を参照してください。このサンプルソリューションの一環として、私たちは以下に焦点を当てることにしました:
- ラベリングジョブの一環としてラベラーに意味のある指示を提供する
- ワークフロー内の初期ラベリングの後にラベルの検証ステップを追加する
最後に、ラベルを後でトレーニングに再利用し、使用されたモデルトレーニングデータのトレース性を可能にするために、どのようにラベルを格納するか考える必要があります。SageMaker Ground Truthのラベリングジョブの出力は、ラベルと追加のメタデータを含むJSON-Lines形式のファイルです。私たちは、ラベルを格納するためにオフラインストアのAmazon SageMaker Feature Storeを使用することにしました。ラベルを単にAmazon Simple Storage Service(Amazon S3)に格納することと比べると、次のようないくつかの利点があります:
- 時点クエリと組み合わせた特徴値の完全な履歴を格納します。これにより、データセットのバージョン管理とトレース性の確保が容易になります。
- 中央の特徴ストアとして、データの再利用と可視性を促進します。
SageMaker Feature Storeの紹介については、Amazon SageMaker Feature Storeの入門を参照してください。SageMaker Feature Storeでは、表形式で特徴を格納できます。私たちの例では、各ラベル付き画像について以下の特徴を格納しています:
- Amazon S3に保存されている画像の場所
- 画像の寸法
- バウンディングボックスの座標とクラス値
- トレーニングで使用するために承認されたかどうかを示すステータスフラグ
- ラベルの作成に使用されたラベリングジョブ名
次のスクリーンショットは、特徴ストアの典型的なエントリの例を示しています。
この形式で特徴ストアを簡単にクエリでき、Pandasのような便利なツールを使用して後でトレーニングに使用するためのデータセットを構築できます。
データラベリングを組織化する
最後に、ラベリングパイプラインの各ステップを自動化して組織化する時がきました!そのために、私たちはAWS Step Functionsを使用して各ステップをサーバーレスのワークフローサービスで自動化し、視覚化するAPI統合を提供しています。また、より複雑なステップにはAWS Lambda関数のセットも使用しています。具体的には、以下のような手順です:
- Amazon S3でラベリングが必要な新しい画像があるかどうかをチェックする
- 必要な入力形式でデータを準備し、ラベリングジョブを開始する
- 必要な入力形式でデータを準備し、ラベル検証ジョブを開始する
- 最終的なラベルセットを特徴ストアに書き込む
次の図は、完全なStep Functionsラベリングステートマシンの外観を示しています。
ラベリング:インフラストラクチャの展開とCI/CDへの統合
最後のステップは、Step FunctionsワークフローをCI/CDシステムに統合し、必要なインフラストラクチャを展開することです。このタスクを達成するために、AWS Cloud Development Kit(AWS CDK)を使用して、Lambda関数やStep Functionsワークフローなどの必要なインフラストラクチャを作成します。AWS CDKのモジュールであるCDK Pipelinesを使用すると、AWS CodePipelineで変更を展開し、Step Functionsワークフローを開始するための別のパイプラインをトリガーします。CodePipeline内のStep Functionsの統合により、このタスクは非常に簡単に行われます。また、パイプラインがスケジュールに基づいてトリガーされるようにするために、Amazon EventBridgeやCodePipelineのソースアクションを使用します。
次の図は、ラベリングのためのCI/CDアーキテクチャの詳細な外観を示しています。
データラベリングの自動化を振り返る
これで、SageMaker Ground Truthを使用して金属タグの未ラベル画像から自動的にラベルを作成するパイプラインが動作しています。画像はAmazon S3から取得され、SageMaker Ground Truthのラベリングジョブに供給されます。画像がラベル付けされた後、ラベル検証ジョブを使用して品質チェックを行います。最後に、ラベルはSageMaker Feature Storeの特徴グループに保存されます。この動作する例を試してみたい場合は、関連するGitHubリポジトリをチェックしてください。次に、モデルの構築を自動化する方法を見てみましょう!
モデルの自動化構築
ラベリングと同様に、モデル構築パイプラインの詳細を見てみましょう。最低限以下のステップを組み合わせる必要があります:
- 特徴ストアから最新の特徴を取得します。
- モデルトレーニングのためにデータを準備します。
- モデルをトレーニングします。
- モデルのパフォーマンスを評価します。
- モデルをバージョン管理し、保存します。
- パフォーマンスが受け入れ可能であれば、デプロイのためのモデルを承認します。
モデル構築プロセスは通常、データサイエンティストによって駆動され、ノートブックやPythonコードを使用して行われる一連の実験の結果です。次の単純な3ステッププロセスに従って、実験を完全に自動化されたMLOpsパイプラインに変換できます:
- 既存の前処理、トレーニング、評価コードをコマンドラインスクリプトに変換します。
- モデル構築をオーケストレートするためのSageMakerパイプラインの定義を作成します。ステップ1で作成したスクリプトを処理およびトレーニングステップの一部として使用します。
- パイプラインをCI/CDワークフローに統合します。
この3ステッププロセスは汎用的であり、選択したモデルアーキテクチャとMLフレームワークに対して使用することができます。ステップ1から始めて、次のスクリプトを作成しましょう:
- preprocess.py – これは、SageMaker Feature Storeからラベル付きの画像を取得し、データセットを分割して、モデルトレーニングに必要な形式に変換するスクリプトです。この場合、YOLOv8の入力形式です。
- train.py – これは、Ultralytics YOLOv8物体検出モデルを使用して、金属タグの画像上の傷を検出するためのPyTorchを使用して、モデルのトレーニングを行います。
モデル構築のオーケストレーション
Step 2では、これらのスクリプトをトレーニングと処理のジョブにまとめ、最終的なSageMakerパイプラインを定義します。以下の図のようになります。
これは以下のステップで構成されています:
- SageMaker Feature Storeから最新の特徴量をロードするProcessingStep。データセットをトレーニング、検証、テストセットに分割し、トレーニング用のtarボールとしてデータセットを保存します。
- トレーニング、検証、テストデータセットを使用してモデルをトレーニングし、平均適合率(mAP)メトリックをエクスポートするTrainingStep。
- トレーニングされたモデルのmAPメトリック値が設定したしきい値を上回るかどうかを評価するConditionStep。該当する場合、上記のステップでトレーニングされたモデルをSageMaker Model Registryに登録するRegisterModelステップが実行されます。
詳細なパイプラインコードに興味がある場合は、私たちのサンプルリポジトリにあるパイプライン定義をチェックしてください。
トレーニング:インフラストラクチャのデプロイとCI / CDへの統合
さあ、Step 3に進みましょう:CI / CDワークフローへの統合です。CI / CDパイプラインは、以前に紹介したラベリングセクションと同じパターンに従います。必要なパイプラインをCodePipelineからAWS CDKを使用してデプロイします。唯一の違いは、Step Functionsの代わりにAmazon SageMaker Pipelinesを使用することです。SageMakerパイプラインの定義は、CodePipelineのCodeBuildアクションの一部として構築およびトリガーされます。
結論
SageMakerを使用した完全に自動化されたラベリングおよびモデルトレーニングワークフローが完成しました。実験コードからコマンドラインスクリプトを作成しました。そして、SageMaker Pipelinesを使用して、モデルトレーニングワークフローの各ステップをオーケストレーションしました。コマンドラインスクリプトはトレーニングと処理のステップの一部として統合されました。パイプラインの終わりには、トレーニングされたモデルがバージョン管理され、SageMaker Model Registryに登録されます。
このシリーズの第3部で次のステップについて詳しく見ていきます。それは、AWS IoT Greengrassを使用してモデルをエッジデバイスにコンパイルおよびデプロイするパイプラインを作成することです!
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles