画像セグメンテーション ガイド

男性のアップ写真と、男性の輪郭を示す画像マスクを並べた例

MediaPipe Image Segmenter タスクを使用すると、事前定義されたカテゴリに基づいて画像を領域に分割できます。この機能を使用すると、特定のオブジェクトやテクスチャを特定し、背景のぼかしなどの視覚効果を適用できます。このタスクには、画像データ内の人物とその特徴をセグメント化するために特別にトレーニングされた複数のモデルが含まれます。たとえば、次のようなモデルがあります。

  • 人物と背景
  • 人物の髪のみ
  • 人物の髪、顔、肌、衣服、アクセサリー

このタスクは、単一の画像または連続した動画ストリームを含む機械学習(ML)モデルを使用して画像データを処理します。選択したモデルに応じて、画像内のオブジェクトまたは領域を表すセグメント化された領域のリストを出力します。

試してみる

使ってみる

このタスクを使用するには、対象プラットフォーム向けの次のいずれかの実装ガイドに沿って操作します。以下のプラットフォーム固有のガイドでは、推奨モデルや、推奨構成オプションを含むコード例など、このタスクの基本的な実装について説明します。

タスクの詳細

このセクションでは、このタスクの機能、入力、出力、構成オプションについて説明します。

機能

  • 入力画像の処理 - 処理には、画像の回転、サイズ変更、正規化、色空間変換が含まれます。
タスク入力 タスクの出力
入力は次のいずれかのデータ型にする必要があります。
  • 静止画像
  • デコードされた動画フレーム
  • ライブ動画フィード
Image Segmenter は、設定した構成オプションに応じて、次の 1 つまたは両方を含むセグメント化された画像データを出力します。
  • CATEGORY_MASK: セグメント化されたマスクを uint8 形式の画像として格納するリスト。各ピクセル値は、モデルでサポートされている特定のセグメント カテゴリに属するかどうかを示します。
  • CONFIDENCE_MASK: ピクセル値が float32 形式のセグメント化されたマスクを含むチャネルのリスト。各ピクセル値は、モデルでサポートされている特定のカテゴリに属する確度を示します。

構成オプション

このタスクには、次の構成オプションがあります。

オプション名 説明 値の範囲 デフォルト値
running_mode タスクの実行モードを設定します。モードは次の 3 つです。

IMAGE: 単一画像入力のモード。

動画: 動画のデコードされたフレームのモード。

LIVE_STREAM: カメラなどからの入力データのライブ配信モード。 このモードでは、resultListener を呼び出して、結果を非同期で受信するリスナーを設定する必要があります。
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
output_category_mask True に設定すると、出力には uint8 画像としてセグメンテーション マスクが含まれます。各ピクセル値は、最も高いスコアのカテゴリ値を示します。 {True, False} False
output_confidence_masks True に設定すると、出力には浮動小数点値画像としてセグメンテーション マスクが含まれます。各浮動小数点値は、カテゴリの信頼スコア マップを表します。 {True, False} True
display_names_locale タスクのモデルのメタデータで指定されている表示名に使用するラベルの言語を設定します(利用可能な場合)。デフォルトは英語で en です。TensorFlow Lite Metadata Writer API を使用して、カスタムモデルのメタデータにローカライズされたラベルを追加できます。 言語 / 地域コード en
result_callback 画像セグメンタが LIVE_STREAM モードのときに、セグメンテーション結果を非同期で受信するように結果リスナーを設定します。実行モードが LIVE_STREAM に設定されている場合にのみ使用できます。 なし なし

モデル

Image Segmenter は複数の ML モデルで使用できます。次のセグメンテーション モデルのほとんどは、人物の画像でセグメンテーションを行うように構築およびトレーニングされています。ただし、DeepLab-v3 モデルは汎用画像セグメンタとして構築されています。アプリケーションに最適なモデルを選択します。

自撮りセグメンテーション モデル

このモデルは人物のポートレートをセグメント化でき、画像の背景の置き換えや変更に使用できます。モデルは、インデックス 0 の背景とインデックス 1 の人物という 2 つのカテゴリを出力します。このモデルには、スクエア バージョンや横向きバージョンなど、入力シェイプが異なるバージョンがあります。ビデオ通話など、入力が常にその形状であるアプリケーションでは、より効率的です。

モデル名 入力シェイプ 量子化のタイプ モデルカード バージョン
SelfieSegmenter(スクエア) 256 x 256 float 16 情報 最新
SelfieSegmenter(横向き) 144 x 256 float 16 情報 最新

髪のセグメンテーション モデル

このモデルは、人物の画像を取り込み、頭の髪の毛を見つけて、髪の毛の画像セグメンテーション マップを出力します。このモデルは、髪の色を変更したり、他のヘアエフェクトを適用したりするために使用できます。モデルは、次のセグメンテーション カテゴリを出力します。

0 - background
1 - hair
モデル名 入力シェイプ 量子化のタイプ モデルカード バージョン
HairSegmenter 512 x 512 なし(float32) 情報 最新

マルチクラス自撮りセグメンテーション モデル

このモデルは、人物の画像を取り込み、髪、肌、衣服などのさまざまな領域を特定し、これらのアイテムの画像セグメンテーション マップを出力します。このモデルを使用すると、画像や動画内の人物にさまざまな効果を適用できます。モデルは、次のセグメンテーション カテゴリを出力します。

0 - background
1 - hair
2 - body-skin
3 - face-skin
4 - clothes
5 - others (accessories)
モデル名 入力シェイプ 量子化のタイプ モデルカード バージョン
SelfieMulticlass(256 x 256) 256 x 256 なし(float32) 情報 最新

DeepLab-v3 モデル

このモデルは、背景、人物、猫、犬、鉢植えなど、さまざまなカテゴリのセグメントを識別します。このモデルでは、アトラス空間ピラミッド プーリングを使用して、より長い範囲の情報をキャプチャします。詳細については、DeepLab-v3 をご覧ください。

モデル名 入力シェイプ 量子化のタイプ バージョン
DeepLab-V3 257 x 257 なし(float32) 最新

タスクのベンチマーク

上記の事前トレーニング済みモデルに基づくパイプライン全体のタスク ベンチマークは次のとおりです。レイテンシの結果は、CPU / GPU を使用した Google Pixel 6 の平均レイテンシです。

モデル名 CPU レイテンシ GPU レイテンシ
SelfieSegmenter(スクエア) 33.46 ミリ秒 35.15 ミリ秒
SelfieSegmenter(横向き) 34.19 ミリ秒 33.55 ミリ秒
HairSegmenter 57.90 ミリ秒 52.14 ミリ秒
SelfieMulticlass(256 x 256) 217.76 ミリ秒 71.24 ミリ秒
DeepLab-V3 123.93 ミリ秒 103.30 ミリ秒