Amazon SageMaker と Amazon Rekognition を使用して画像内の車の位置を検出するコンピューター ビジョン モデルを構築およびトレーニングする | アマゾン ウェブ サービス

Amazon SageMaker と Amazon Rekognition を使用して画像内の車の位置を検出するコンピューター ビジョン モデルを構築およびトレーニングする | アマゾン ウェブ サービス

コンピューター ビジョン (CV) は、機械学習 (ML) とディープ ラーニングの最も一般的なアプリケーションの XNUMX つです。 ユースケースは、自動運転車、ソーシャルメディアプラットフォームでのコンテンツモデレーション、がん検出、自動欠陥検出など多岐にわたります。 Amazonの再認識 は、オブジェクト検出、ビデオ セグメント検出、コンテンツ モデレーションなどの CV タスクを実行して、事前の ML 経験がなくてもデータから洞察を抽出できるフルマネージド サービスです。 場合によっては、非常に特殊な問題を解決するために、サービスとともによりカスタムのソリューションが必要になることがあります。

この投稿では、オブジェクトの姿勢、位置、向きが重要なユースケースに CV を適用できる領域について説明します。 そのような使用例の XNUMX つは、画像のアップロードが必要な顧客向けモバイル アプリケーションです。 これは、コンプライアンス上の理由から、または一貫したユーザー エクスペリエンスを提供してエンゲージメントを向上させるためである可能性があります。 たとえば、オンライン ショッピング プラットフォームでは、画像内で商品が表示される角度がその商品の購入率に影響します。 その XNUMX つは、自動車の位置を検出する場合です。 よく知られている ML ソリューションと後処理を組み合わせて、AWS クラウド上でこの問題に対処する方法を示します。

この問題を解決するために、私たちは深層学習モデルを使用します。 姿勢推定のための ML アルゴリズムのトレーニングには、多くの専門知識とカスタム トレーニング データが必要です。 どちらの要件も取得するのは難しく、コストがかかります。 したがって、ML の専門知識を必要とせず、Amazon Rekognition を使用するオプションと、Amazon Rekognition を使用するオプションの XNUMX つのオプションを提示します。 アマゾンセージメーカー カスタム ML モデルをトレーニングしてデプロイします。 最初のオプションでは、Amazon Rekognition を使用して車の車輪を検出します。 次に、ルールベースのシステムを使用して、車輪の位置から車の向きを推測します。 XNUMX 番目のオプションでは、 ディテクトロン モデル。 これらは、ルールベースのコードで車の位置を推測するために再び使用されます。 XNUMX 番目のオプションでは ML の経験が必要ですが、よりカスタマイズ可能です。 これは、たとえば車全体を切り取るなど、画像のさらなる後処理に使用できます。 どちらのオプションも、公開されているデータセットでトレーニングできます。 最後に、次のようなサービスを使用して、この車の姿勢検出ソリューションを既存の Web アプリケーションに統合する方法を示します。 アマゾンAPIゲートウェイ および AWS 増幅.

ソリューションの概要

次の図は、ソリューションのアーキテクチャを示しています。

Amazon SageMaker と Amazon Rekognition を使用して、画像内の車の位置を検出するコンピューター ビジョン モデルを構築およびトレーニングする |アマゾン ウェブ サービス PlatoBlockchain データ インテリジェンス。垂直検索。あい。

このソリューションは、Amplify のモック Web アプリケーションで構成されており、ユーザーは画像をアップロードし、Amazon Rekognition モデルまたはカスタム Detectron モデルを呼び出して車の位置を検出できます。 オプションごとに、 AWSラムダ モック アプリケーションに公開される API ゲートウェイの背後にある関数。 SageMaker または Amazon Rekognition でトレーニングされた Detectron モデルのいずれかで実行されるように Lambda 関数を構成しました。

前提条件

このチュートリアルでは、次の前提条件を満たしている必要があります。

Amazon Rekognition を使用してサーバーレス アプリを作成する

最初のオプションでは、Amazon Rekognition を使用して画像内の車の向きを検出する方法を示します。 このアイデアは、Amazon Rekognition を使用して車とその車輪の位置を検出し、後処理を行ってこの情報から車の向きを導き出すことです。 ソリューション全体は、図に示すように Lambda を使用してデプロイされます。 Githubリポジトリ。 このフォルダーには、Lambda 関数で実行される Docker イメージを定義する Dockerfile と、 app.py ファイル。これは Lambda 関数のメインのエントリ ポイントになります。

def lambda_handler(event, context): body_bytes = json.loads(event["body"])["image"].split(",")[-1] body_bytes = base64.b64decode(body_bytes) rek = boto3.client('rekognition') response = rek.detect_labels(Image={'Bytes': body_bytes}, MinConfidence=80) angle, img = label_image(img_string=body_bytes, response=response) buffered = BytesIO() img.save(buffered, format="JPEG") img_str = "data:image/jpeg;base64," + base64.b64encode(buffered.getvalue()).decode('utf-8')

Lambda 関数はヘッダーと本文を含むイベントを予期します。本文は、base64 デコードされたオブジェクトとしてラベル付けする必要がある画像である必要があります。 画像を考慮すると、Amazon Rekognition detect_labels 関数は、次を使用して Lambda 関数から呼び出されます。 ボト3。 この関数は、画像内の各オブジェクトの XNUMX つ以上のラベルと、検出されたすべてのオブジェクト ラベルの境界ボックスの詳細を応答の一部として返します。また、割り当てられたラベルの信頼性、検出されたラベルの祖先ラベル、可能性のあるその他の情報も返します。ラベルのエイリアス、および検出されたラベルが属するカテゴリ。 Amazon Rekognition から返されたラベルに基づいて、関数を実行します。 label_image、検出された車輪から次のように車の角度を計算します。

n_wheels = len(wheel_instances) wheel_centers = [np.array(_extract_bb_coords(wheel, img)).mean(axis=0)
for wheel in wheel_instances] wheel_center_comb = list(combinations(wheel_centers, 2))
vecs = [(k, pair[0] - pair[1]) for k,pair in enumerate(wheel_center_comb)]
vecs = sorted(vecs, key = lambda vec: np.linalg.norm(vec[1])) vec_rel = vecs[1] if n_wheels == 3 else vecs[0]
angle = math.degrees(math.atan(vec_rel[1][1]/vec_rel[1][0])) wheel_centers_rel = [tuple(wheel.tolist()) for wheel in
wheel_center_comb[vec_rel[0]]]

アプリケーションでは、画像内に XNUMX 台の車のみが存在する必要があり、そうでない場合はエラーが返されることに注意してください。 ただし、後処理を適用して、より詳細な方向の説明を提供したり、複数の車をカバーしたり、より複雑なオブジェクトの方向を計算したりすることができます。

車輪の検出を改善する

ホイール検出の精度をさらに向上させるには、次を使用できます。 Amazon Rekognitionカスタムラベル。 SageMaker を使用してカスタム ML モデルをトレーニングおよびデプロイする微調整と同様に、独自のラベル付きデータを使用して、Amazon Rekognition がわずか数時間でカスタム画像分析モデルを生成できるようにすることができます。 Rekognition Custom Labels を使用すると、ユースケースに固有のトレーニング画像の小さなセットのみが必要になります。この場合は、特定の角度の車の画像です。これは、Amazon Rekognition の既存の機能を使用して、数千万の画像でトレーニングするためです。多くのカテゴリー。 Rekognition カスタムラベルは、標準の Amazon Rekognition ソリューションに使用する Lambda 関数を数回クリックし、少し調整するだけで統合できます。

SageMaker トレーニング ジョブを使用してモデルをトレーニングする

XNUMX 番目のオプションでは、SageMaker でカスタム深層学習モデルをトレーニングします。 私たちが使用するのは、 Detectron2 フレームワーク 自動車部品の細分化に。 これらのセグメントは、車の位置を推測するために使用されます。

Detectron2 フレームワークは、最先端の検出およびセグメンテーション アルゴリズムを提供するライブラリです。 Detectron は、有名な COCO (Common object in Context) データセットでトレーニングされたさまざまな Mask R-CNN モデルを提供します。 車の物体検出モデルを構築するには、転移学習を使用して、事前トレーニングされたマスク R-CNN モデルを微調整します。 自動車部品のセグメンテーション データセット。 このデータセットを使用すると、車輪だけでなく他の自動車部品も検出できるモデルをトレーニングできます。 この追加情報は、画像に対する自動車の角度の計算にさらに使用できます。

データセットには、物体検出およびセマンティック セグメンテーション タスクに使用される自動車部品の注釈付きデータが含まれています。これは、複数のビュー (前面、背面、側面) で撮影されたセダン、ピックアップ、スポーツ ユーティリティ ビークル (SUV) の約 500 枚の画像です。 各画像には、ホイール、ミラー、ライト、前後ガラスなどの車のさまざまな部分を表す 18 個のインスタンス マスクと境界ボックスによって注釈が付けられます。 画像内の利用可能なすべての車輪を XNUMX つのオブジェクトとして考えるのではなく、各車輪が個別のオブジェクトとみなされるように、車輪のベース アノテーションを変更しました。

を使用しております Amazon シンプル ストレージ サービス (Amazon S3) Detectron モデルのトレーニングに使用されるデータセットと、トレーニングされたモデルのアーティファクトを保存します。 また、Lambda関数内で動作するDockerコンテナは以下に格納されています。 Amazon エラスティック コンテナ レジストリ (アマゾンECR)。 Lambda 関数の Docker コンテナには、コードを実行するために必要なライブラリと依存関係を含める必要があります。 代わりに使用することもできます ラムダ層, ただし、解凍された展開パッケージのサイズ割り当ては 250 MB に制限されており、Lambda 関数に追加できるレイヤーは最大 XNUMX つです。

私たちのソリューションは SageMaker 上に構築されており、事前構築済みの機能を拡張しています。 SageMaker Docker コンテナ PyTorch がカスタム PyTorch を実行するための トレーニングコード。 次に、次のコード スニペットに示すように、SageMaker Python SDK を使用してトレーニング イメージを SageMaker PyTorch 推定器にラップします。

d2_estimator = Estimator( image_uri=training_image_uri, role=role, sagemaker_session=sm_session, instance_count=1, instance_type=training_instance, output_path=f"s3://{session_bucket}/{prefix_model}", base_job_name=f"detectron2") d2_estimator.fit({ "training": training_channel, "validation": validation_channel, }, wait=True)

最後に、を呼び出してトレーニング ジョブを開始します。 fit() 作成された PyTorch 推定器の関数。 トレーニングが終了すると、トレーニングされたモデルのアーティファクトが Amazon S3 のセッション バケットに保存され、推論パイプラインに使用されます。

SageMaker と推論パイプラインを使用してモデルをデプロイする

また、SageMaker を使用して、カスタム Detectron モデルを実行する推論エンドポイントをホストします。 当社のソリューションのデプロイに使用される完全なインフラストラクチャは、AWS CDK を使用してプロビジョニングされます。 カスタム モデルをホストするには、 SageMaker リアルタイムエンドポイント 呼び出すことによって deploy PyTorch 推定器で。 事前に構築された SageMaker PyTorch コンテナを拡張して PyTorch Detectron を含めるのはこれが XNUMX 回目です。 次のように、これを使用して推論スクリプトを実行し、トレーニングされた PyTorch モデルをホストします。

model = PyTorchModel( name="d2-sku110k-model", model_data=d2_estimator.model_data, role=role, sagemaker_session=sm_session, entry_point="predict.py", source_dir="src", image_uri=serve_image_uri, framework_version="1.6.0") predictor = model.deploy( initial_instance_count=1, instance_type="ml.g4dn.xlarge", endpoint_name="detectron-endpoint", serializer=sagemaker.serializers.JSONSerializer(), deserializer=sagemaker.deserializers.JSONDeserializer(), wait=True)

ml.g4dn.xlarge GPU が利用可能な最小の GPU であり、このデモには十分であるため、デプロイメントに ml.gXNUMXdn.xlarge GPU を使用したことに注意してください。 XNUMX つのコンポーネントを設定する必要があります。 推論スクリプト: モデルの読み込みとモデルの提供。 関数 model_fn() は、ホストされている Docker コンテナの一部であり、Amazon S3 にもあるトレーニング済みモデルをロードするために使用され、次のようにモデルの提供に使用できるモデル オブジェクトを返します。

def model_fn(model_dir: str) -> DefaultPredictor: for p_file in Path(model_dir).iterdir(): if p_file.suffix == ".pth": path_model = p_file cfg = get_cfg() cfg.MODEL.WEIGHTS = str(path_model) return DefaultPredictor(cfg)

関数 predict_fn() 予測を実行し、結果を返します。 トレーニング済みモデルを使用することに加えて、COCO データセットでトレーニングされたマスク R-CNN モデルの事前トレーニング済みバージョンを使用して、画像内の主要な車を抽出します。 これは、複数の車が存在する画像を処理するための追加の後処理ステップです。 次のコードを参照してください。

def predict_fn(input_img: np.ndarray, predictor: DefaultPredictor) -> Mapping: pretrained_predictor = _get_pretraind_model() car_mask = get_main_car_mask(pretrained_predictor, input_img) outputs = predictor(input_img) fmt_out = { "image_height": input_object.shape[0], "image_width": input_object.shape[1], "pred_boxes": outputs["instances"].pred_boxes.tensor.tolist(), "scores": outputs["instances"].scores.tolist(), "pred_classes": outputs["instances"].pred_classes.tolist(), "car_mask": car_mask.tolist() } return fmt_out

Amazon Rekognition ソリューションと同様に、境界ボックスは wheel クラスは検出出力からフィルタリングされ、後処理モジュールに供給され、出力に対する自動車の位置が評価されます。

最後に、Detectron ソリューションの後処理も改善しました。 また、さまざまな自動車部品のセグメントを使用して解決策を推測します。 たとえば、フロント バンパーが検出されたが、バック バンパーが検出されなかった場合は、車の正面図があると想定され、対応する角度が計算されます。

ソリューションを Web アプリケーションに接続する

モデルのエンドポイントを Amplify に接続する手順は次のとおりです。

  • AWS CDK スタックが作成したアプリケーション リポジトリのクローンを作成します。 car-angle-detection-website-repo。 デプロイに使用したリージョンでそれを探していることを確認してください。
  • デプロイされた各 Lambda 関数の API Gateway エンドポイントを index.html 前述のリポジトリ内のファイル (エンドポイントを配置する必要があるプレースホルダーがあります)。 次のコードは、.html ファイルのこのセクションがどのようになるかを示す例です。
<td align="center" colspan="2">
<select id="endpoint">
<option value="https://ey82aaj8ch.execute-api.eu-central-1.amazonaws.com/prod/"> Amazon Rekognition</option>
<option value="https://nhq6q88xjg.execute-api.eu-central-1.amazonaws.com/prod/"> Amazon SageMaker Detectron</option>
</select>
<input class="btn" type="file" id="ImageBrowse" />
<input class="btn btn-primary" type="submit" value="Upload">
</td>

  • HTML ファイルを保存し、コードの変更をリモートのメイン ブランチにプッシュします。

これにより、デプロイメント内の HTML ファイルが更新されます。 これでアプリケーションを使用する準備が整いました。

  • Amplify コンソールに移動し、作成したプロジェクトを見つけます。

デプロイメントが完了すると、アプリケーションの URL が表示されます。

  • URL に移動して、UI を楽しんでください。

Amazon SageMaker と Amazon Rekognition を使用して、画像内の車の位置を検出するコンピューター ビジョン モデルを構築およびトレーニングする |アマゾン ウェブ サービス PlatoBlockchain データ インテリジェンス。垂直検索。あい。

まとめ

おめでとう! Amazon Rekognition を使用した完全なサーバーレス アーキテクチャをデプロイしましたが、独自のカスタム モデルのオプションも提供しました。この例は、 GitHubの。 チームに ML の専門知識がない場合、またはモデルをトレーニングするための十分なカスタム データがない場合は、Amazon Rekognition を使用するオプションを選択できます。 モデルをさらに制御したい場合、モデルをさらにカスタマイズしたい場合、および十分なデータがある場合は、SageMaker ソリューションを選択できます。 データ サイエンティストのチームがいる場合は、モデルをさらに強化し、よりカスタムで柔軟なオプションを選択したいと考えることもあります。 XNUMX つのオプションのいずれかを使用して、Web アプリケーションの背後に Lambda 関数と API ゲートウェイを配置できます。 このアプローチは、コードを適応させたい別のユースケースにも使用できます。

このサーバーレス アーキテクチャの利点は、構成要素が完全に交換可能であることです。 チャンスはほぼ無限にあります。 さあ、今日から始めましょう!

いつものように、AWSはフィードバックを歓迎します。 コメントや質問を送信してください。


著者について

Amazon SageMaker と Amazon Rekognition を使用して、画像内の車の位置を検出するコンピューター ビジョン モデルを構築およびトレーニングする |アマゾン ウェブ サービス PlatoBlockchain データ インテリジェンス。垂直検索。あい。マイケルウォールナー は、AW​​S プロフェッショナル サービスのデータと AI のシニアコンサルタントであり、顧客が AWS クラウドでデータドリブンで AWSome を実現できるようにすることに情熱を注いでいます。 さらに、彼は顧客と一緒に大きなことを考えて、顧客のために革新し、新しいアイデアを生み出すことを好みます。

Amazon SageMaker と Amazon Rekognition を使用して、画像内の車の位置を検出するコンピューター ビジョン モデルを構築およびトレーニングする |アマゾン ウェブ サービス PlatoBlockchain データ インテリジェンス。垂直検索。あい。アアムナ・ナジミ は、AW​​S プロフェッショナル サービスのデータ サイエンティストです。 彼女は、ビッグデータと人工知能テクノロジーを使用して顧客がデータからビジネス価値と洞察を活用できるよう支援することに情熱を注いでいます。 彼女は、ヘルスケアおよびライフ サイエンス分野でデータ プラットフォームおよび AI/ML プロジェクトに取り組んだ経験があります。 余暇には、ガーデニングや新しい場所への旅行を楽しんでいます。

Amazon SageMaker と Amazon Rekognition を使用して、画像内の車の位置を検出するコンピューター ビジョン モデルを構築およびトレーニングする |アマゾン ウェブ サービス PlatoBlockchain データ インテリジェンス。垂直検索。あい。デビッド・ザウアーワイン AWS プロフェッショナル サービスのシニア データ サイエンティストであり、顧客が AWS クラウド上で AI/ML を導入できるようにしています。 David はデジタル ツイン、予測、量子計算に重点を置いています。 彼はオーストリアのインスブルック大学で理論物理学の博士号を取得しています。 彼は、ドイツのマックス・プランク量子光学研究所の博士号および博士研究員でもありました。 自由時間には、読書、スキー、家族と過ごすことが大好きです。

Amazon SageMaker と Amazon Rekognition を使用して、画像内の車の位置を検出するコンピューター ビジョン モデルを構築およびトレーニングする |アマゾン ウェブ サービス PlatoBlockchain データ インテリジェンス。垂直検索。あい。シュリクリシュナ チャイタンヤ コンドゥル は、AW​​S プロフェッショナル サービスのシニア データ サイエンティストです。 彼は、AWS での ML アプリケーションのプロトタイピングと運用化において顧客をサポートしています。 Srikrishna 氏は、コンピューター ビジョンと NLP に重点を置いています。 また、さまざまな業界の顧客向けに ML プラットフォームの設計とユースケース特定の取り組みを主導しています。 Srikrishna は、ドイツのアーヘン工科大学で医療画像処理に重点を置き、生体医工学の修士号を取得しています。

Amazon SageMaker と Amazon Rekognition を使用して、画像内の車の位置を検出するコンピューター ビジョン モデルを構築およびトレーニングする |アマゾン ウェブ サービス PlatoBlockchain データ インテリジェンス。垂直検索。あい。アーメド・マンスール AWS プロフェッショナル サービスのデータ サイエンティストです。 彼は、AWS クラウドでの AI/ML の導入を通じて顧客に技術サポートを提供しています。 アーメド氏は、RL とともにタンパク質ドメインへの NLP の応用に焦点を当てています。 彼はドイツのミュンヘン工科大学で工学博士号を取得しています。 自由時間には、ジムに行ったり、子供たちと遊んだりするのが大好きです。

タイムスタンプ:

より多くの AWS機械学習