Dataflow と Cloud Vision API を使用した ML ビジョン分析ソリューションの構築

Last reviewed 2024-05-23 UTC

このリファレンス アーキテクチャでは、Cloud Vision で画像ファイルを処理し、処理結果を BigQuery に保存するために Dataflow パイプラインをデプロイする場合のユースケース、代替設計、設計上の考慮事項について説明します。これらの保存結果は、大規模なデータ分析や BigQuery ML の事前構築モデルのトレーニングに使用できます。

このリファレンス アーキテクチャのドキュメントは、データ エンジニアとデータ サイエンティストを対象としています。

アーキテクチャ

次の図は、この参照アーキテクチャのシステムフローを説明しています。

取り込みとトリガー、処理、保存、分析のプロセスの情報フローを示すアーキテクチャ。

上の図に示すように、情報フローは次のとおりです。

  1. 取り込みとトリガー: これは、画像が最初にシステムに入るシステムフローの最初のステージです。このステージでは、次のアクションが行われます。

    1. クライアントは、Cloud Storage バケットに画像ファイルをアップロードします。
    2. ファイルをアップロードするたびに、Cloud Storage は Pub/Sub にメッセージを公開して、入力通知を自動的に送信します。
  2. 処理: このステージは、取り込みとトリガーのステージの直後に行われます。新しい入力通知ごとに、次の処理が行われます。

    1. Dataflow パイプラインは、これらのファイル入力通知をリッスンし、Pub/Sub メッセージからファイル メタデータを抽出して、処理のために Vision API にファイル参照を送信します。
    2. Vision API が画像を読み取り、アノテーションを作成します。
    3. Dataflow パイプラインは、Vision API によって生成されたアノテーションを BigQuery テーブルに保存します。
  3. 保存して分析: これがフローの最終段階です。この段階では、保存した結果に対して次の操作を行うことができます。

    1. BigQuery テーブルをクエリして、保存されているアノテーションを分析します。
    2. BigQuery ML または Vertex AI を使用して、モデルを構築し、保存されたアノテーションに基づいて予測を実行します。
    3. Dataflow パイプラインで追加の分析を行います(この図には表示されていません)。

使用するプロダクト

このリファレンス アーキテクチャでは、次の Google Cloud プロダクトを使用します。

ユースケース

Vision API は、画像ラベリング、顔やランドマークの検出、光学式文字認識、露骨な表現を含むコンテンツのタグ付けなど、複数の処理機能をサポートしています。これらの機能はそれぞれ、さまざまな業界に適用可能な複数のユースケースを有効にします。このドキュメントでは、Vision API を使用する際に可能なことの簡単な例をいくつか紹介しますが、可能なアプリケーションの範囲は非常に広範囲です。

Vision API は REST API や RPC API を介して強力な事前トレーニング済み ML モデルを提供します。画像にラベルを割り当てることで、事前定義済みの数百万のカテゴリに画像を分類できます。オブジェクトを検出し、印刷テキストや手書き文字を読み取り、画像カタログ内に有用なメタデータを作成します。

このアーキテクチャでは、モデルのトレーニングを事前に行う必要はありません。特定のデータでトレーニングされたカスタムモデルが必要な場合は、Vertex AI を使用して、画像分類やオブジェクト検出などのコンピュータ ビジョンの目標のために AutoML またはカスタムモデルをトレーニングできます。または、Vertex AI Vision を使用して、エンドツーエンドのアプリケーション開発環境でコンピュータ ビジョン アプリケーションを構築、デプロイ、管理することもできます。

代替案を設計する

画像を Google Cloud Storage バケットに保存する代わりに、画像を生成するプロセスで、画像をメッセージ システム(Pub/Sub など)に直接公開できます。また、Dataflow パイプラインで画像を Vision API に直接送信できます。

この設計方法は、比較的小さなサイズの画像を分析する必要があるレイテンシに敏感なユースケースに適しています。Pub/Sub では、メッセージの最大サイズが 10 MB に制限されています。

多数の画像をバッチ処理する必要がある場合は、専用に設計された asyncBatchAnnotate API を使用できます。

設計上の考慮事項

このセクションでは、このリファレンス アーキテクチャの設計上の考慮事項について説明します。

セキュリティ、プライバシー、コンプライアンス

信頼できないソースから受信した画像には、マルウェアが含まれている可能性があります。Vision API は、分析した画像に基づいて何も実行しないため、画像ベースのマルウェアは API に影響しません。画像をスキャンする必要がある場合は、Dataflow パイプラインを変更してスキャンのステップを追加します。同じ結果を得るために、Pub/Sub トピックへの個別のサブスクリプションを使用し、別のプロセスで画像をスキャンすることもできます。

詳細については、Cloud Storage にアップロードされたファイルのマルウェア スキャンを自動化するをご覧ください。

Vision API は、Identity and Access Management(IAM)を使用して認証を行います。Vision API にアクセスするには、セキュリティ プリンシパルに、分析するファイルを含むバケットに対する Cloud Storage > ストレージ オブジェクト閲覧者roles/storage.objectViewer)のアクセス権が必要です。

AI ワークロードと ML ワークロードに固有のセキュリティ原則と推奨事項については、アーキテクチャ フレームワークの AI と ML の視点: セキュリティをご覧ください。

費用の最適化

低レイテンシ処理や非同期バッチ処理など、これまでに説明した他のオプションと比較すると、この参照アーキテクチャでは、API リクエストをバッチ処理することで、ストリーミング パイプラインで画像を処理する費用効率の高い方法を使用しています。設計の代替案で説明した低レイテンシの直接画像ストリーミングは、Pub/Sub と Dataflow の追加費用がかかるため、コストが高くなる可能性があります。数秒または数分以内に行う必要がない画像処理の場合は、Dataflow パイプラインをバッチモードで実行できます。パイプラインをバッチモードで実行すると、ストリーミング パイプラインを実行するコストと比較して、コストを削減できます。

Vision API は、すべての特徴に対してオフラインの非同期バッチ画像アノテーションをサポートしています。非同期リクエストでは、バッチあたり最大 2,000 個の画像をサポートします。レスポンスとして、Vision API は Cloud Storage バケットに保存されている JSON ファイルを返します。

Vision API には、画像解析のための各種機能もあります。料金は、各機能について画像ごとに発生します。コストを削減するには、ソリューションに必要な特定の機能のみをリクエストしてください。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。

AI ワークロードと ML ワークロードに固有の費用最適化の原則と推奨事項については、アーキテクチャ フレームワークの AI と ML の視点: 費用最適化をご覧ください。

パフォーマンスの最適化

Vision API はリソースを大量に消費する API です。そのため、画像を大規模に処理するには、API 呼び出しを慎重にオーケストレーションする必要があります。Dataflow パイプラインは、API リクエストのバッチ処理、割り当てに達したことに関連する例外の適切な処理、API 使用量のカスタム指標の生成を行います。これらの指標は、API 割り当ての増加が必要かどうか、またはリクエストの頻度を減らすために Dataflow パイプライン パラメータを調整する必要があるかどうかを判断するのに役立ちます。Vision API の割り当てリクエストの増加については、割り当てと上限をご覧ください。

Dataflow パイプラインには、処理レイテンシに影響する可能性のあるパラメータがいくつかあります。これらのパラメータの詳細については、Dataflow と Vision API を使用して ML ビジョン分析ソリューションをデプロイするをご覧ください。

AI ワークロードと ML ワークロードに固有のパフォーマンス最適化の原則と推奨事項については、アーキテクチャ フレームワークの AI と ML の視点: パフォーマンス最適化をご覧ください。

デプロイ

このアーキテクチャをデプロイするには、Dataflow と Vision API を使用して ML ビジョン分析ソリューションをデプロイするをご覧ください。

次のステップ

寄稿者

作成者:

その他の寄稿者: