Machine Learning

Amazon Rekognition

画像・動画に何が写っているかを API で返すマネージドのコンピュータビジョン。AIP-C01 では「テキストではなく画像・動画のコンテンツモデレーションを誰がやるか」の担当として出ます。

  • A|GenAIの核
  • D1 FM統合・データ・コンプラ
  • D3 安全性・セキュリティ・ガバナンス

ひとことで言うと

画像と動画を投げると、写っているもの・顔・テキスト・不適切コンテンツを、ラベルと確信度スコアの配列で返すサービスです。ML の知識は要らず、S3 のオブジェクトか直接渡したバイト列を対象にします。

要するに、空港の手荷物X線です。装置がやるのは「何が入っていそうか」と「どれくらい確からしいか」を出すところまで。通すか止めるかの線引きは運営側の仕事で、Rekognition ではそれが MinConfidence と、確信度が微妙な帯を人間に回す設計にあたります。装置は「違法かどうか」を判定しません——公式も、モデレーション API は不適切コンテンツの網羅的なフィルタではなく、CSAM のような違法コンテンツの検出もしないと明記しています。

なぜ生まれたか

公式の説明が珍しく率直で、そのまま試験の考え方になります。UGC のモデレーションを人手だけでやると、品質か速度のどちらかが破綻する。かといってユーザーからの通報を待つ運用は、ブランド毀損が起きてから動くことになります。

Rekognition が解いたのは「機械に全部やらせる」ことではなく、人間が見る量を減らすことです。公式は、ML でフラグ済みの全体の1〜5%程度を人間モデレーターがレビューする形になる、と書いています。この「機械で絞り、人間は残りだけ」という分業がそのまま Amazon A2I との統合になっています。

従来の不便Rekognition が引き受けた部分残る自分の仕事
全件を人間が見る(コストと速度が破綻)ラベル付けと確信度スコアの算出「どのラベルを何%で落とすか」のポリシー
通報ベースの事後対応アップロード時点での同期判定(画像)判定と投稿フローの接続
自社ドメイン固有の判定が甘いCustom Moderation のアダプター(自前画像で追加学習)アノテーションと再学習の反復
微妙な判定の押し付け合いA2I への引き渡し(HumanLoopConfig)人間に回す条件と、レビュワーの手配

何に使うか

用途使う API・機能関連ドメイン
画像のモデレーション(同期)DetectModerationLabelsD3
画像のモデレーション(非同期・バッチ)StartMediaAnalysisJob / GetMediaAnalysisJobD3
保存済み動画のモデレーションStartContentModeration / GetContentModeration(非同期)D3
判定精度の自社データへの寄せ込みCustom Moderation(プロジェクト+アダプターを学習し DetectModerationLabels に渡す)D1・D3
微妙な確信度を人間に回すHumanLoopConfig で A2I のフロー定義 ARN を渡すD2・D3
画像・動画のメタデータ化(検索可能なライブラリ)ラベル検出・テキスト検出・セレブリティ認識D1
本人確認・なりすまし対策顔比較・Face Liveness(印刷写真・ディープフェイク注入への対策)D3
自社固有の物体(ロゴ・製品)Rekognition Custom LabelsD1
安全管理PPE(保護具)検出D1

試験でどう問われるか

Rekognition は D3 の「画像・動画側の安全弁」として出ます。 AIP-C01 は生成AIの試験なので、モデレーションの話は Bedrock Guardrails に引き寄せられがちですが、Guardrails が見るのはテキストの入出力です。マルチモーダルなアプリで「ユーザーがアップロードした画像」を止めたい要件が来たら、そこは Rekognition の担当になります。

問われ方正解に寄る条件引っかけの選択肢
生成AIアプリでユーザー投稿画像を検閲したい対象がテキストではなく画像・動画 → Rekognition の DetectModerationLabelsBedrock Guardrails(テキストの入出力フィルタ)/Comprehend(テキストの PII・感情)
誤検出も見逃しも許されない審査機械で絞り、確信度が中間の帯だけ人間へ → HumanLoopConfig + A2I のフロー定義「閾値を上げて自動化」だけの案/全件を人間レビューに回す案(コスト要件と衝突)
人間に回す条件をどう書くかフロー定義の ConditionType に ModerationLabelConfidenceCheck(ラベル名と確信度の範囲)または Sampling(RandomSamplingPercentage)Rekognition 側のパラメータで人間レビューを制御する案(条件はフロー定義側)
保存済み動画の判定動画は非同期のみ → StartContentModeration → GetContentModerationDetectModerationLabels に動画を渡す案(画像用)
「自社サービス特有の不適切画像を取りこぼす」Custom Moderation のアダプターを自前画像で学習し DetectModerationLabels に渡すCustom Labels(用途が違う。ロゴ・製品など自社固有の物体検出用)/基盤モデルのファインチューニング
誤検出が多すぎる/少なすぎるMinConfidence を調整(50%未満は偽陽性が増え、50%超は偽陽性が減る=再現率と適合率のトレードオフ)「ラベルの階層を L3 に固定して細かく見る」(公式推奨は L1 か L2 で運用し、L3 は特定概念の除外に使う)

1問拾える境目: MinConfidence を指定しないときの既定は 50% です。「閾値を設定していないので全ラベルが返る」という選択肢は誤りで、50%未満の検出は落ちています。加えて、返るラベルには TaxonomyLevel(1・2・3)が付き、L1 とその配下の L2 が一緒に返ります。「Explicit Nudity で足りるか、Graphic Male Nudity まで見て絞るか」という粒度の選択がそのまま設問になります。

実務でどう使うか

  • A2I 連携は同一リージョンに揃える必要があります。 Rekognition 側のリソースとフロー定義を別リージョンに置くと通りません
  • フロー定義の HumanLoopRequestSource は文字列が固定です。画像モデレーションなら AWS/Rekognition/DetectModerationLabels/Image/V3。ここを間違えると、条件を書いても人間ループが起きません
  • HumanLoopName はリージョン内で一意かつ小文字。 バッチ処理で連番を振るとき、大文字が混ざって落ちる定番の事故です
  • Mechanical Turk に流すなら DataAttributes の ContentClassifiers が必須です。PII を含まない旨・アダルトコンテンツを含まない旨の申告なしにはパブリックワークフォースへ送れません
  • GetContentModeration の集計は既定が TIMESTAMPS です。「動画のどの区間が不適切か」を出したいなら SEGMENTS を指定します。これを知らないと、1本の動画に対して大量のタイムスタンプ行を自前で畳む羽目になります
  • Custom Moderation のアダプターには寿命があります。 ステータスに DEPRECATED と EXPIRED が存在し、学習済みアダプターを恒久資産として IaC に固定する設計は前提が崩れます

「Rekognition が OK と言ったから安全」は成立しません。公式が明示的に、モデレーション API は不適切コンテンツの網羅的なフィルタではなく、CSAM のような違法コンテンツの検出も行わないと書いています。最終的な適合性の判断は利用者側という前提で、通報経路と人間の判断を残した設計にします。

取り違えやすいもの

迷う相手切り分けの一言
Bedrock GuardrailsGuardrails はテキストの入出力を検閲する。画像・動画の中身は Rekognition。マルチモーダルなアプリでは両方要る
Amazon ComprehendComprehend はテキストの実体抽出・PII・感情。モダリティが違うだけで、役割は近い(前処理の検閲層)
Amazon TextractTextract は文書からの構造化抽出(キーバリュー・表)。Rekognition のテキスト検出は看板・画像内の文字の検出であって帳票理解ではない
Rekognition Custom Labels自社固有の物体・ロゴ・製品を検出する。不適切コンテンツの精度改善は Custom Moderation のアダプターのほう。名前が似ていて別物
Amazon A2IRekognition は判定してスコアを出す側、A2I はそのスコアを条件に人間へ回す側。人間レビューの条件はフロー定義に書く
SageMaker AI で自前 CV モデル「ML の専門性なしに」「学習データなしに」と書いてあれば Rekognition。学習データとモデル管理の話が要件にあるなら SageMaker AI

想起チェック

Q1. 生成AIチャットアプリで、ユーザーがアップロードした画像を検閲したい。Guardrails と Rekognition のどちらですか。

Rekognition です。Guardrails が扱うのはテキストの入出力で、画像・動画の中身は見ません。テキストと画像の両方を受けるアプリでは、両方を層として置きます。

Q2. 「確信度 90〜98% の画像だけ人間に見せたい」。この条件はどこに書きますか。

A2I のフロー定義です。CreateFlowDefinition の HumanLoopActivationConditions に ConditionType: ModerationLabelConfidenceCheck でラベル名と確信度の範囲を書き、DetectModerationLabels 側には HumanLoopConfig でそのフロー定義 ARN を渡すだけです。

Q3. `MinConfidence` を指定しなかったときの挙動は?

確信度 50% 以上のラベルだけが返ります。 50% を下回る値にすると偽陽性が増え(再現率が上がる)、上回ると偽陽性が減ります(適合率が上がる)。

Q4. 自社サービス特有の不適切画像の取りこぼしを減らしたい。Custom Labels と Custom Moderation のどちらですか。

Custom Moderation です。自前の画像にアノテーションしてアダプターを学習し、DetectModerationLabels に渡してモデレーション精度を上げます。Custom Labels はロゴや製品など自社固有の物体を検出する別機能です。

出典(AWS公式)