MediaPipe オブジェクト検出タスクを使用すると、画像や動画内の複数のクラスのオブジェクトの存在と位置を検出できます。たとえば、オブジェクト検出器は画像から犬を検出できます。このタスクは、機械学習(ML)モデルを使用して画像データを操作し、静的データまたは連続動画ストリームを入力として受け取り、検出結果のリストを出力します。各検出結果は、画像や動画内に表示されるオブジェクトを表します。
使ってみる
このタスクの使用を開始するには、作業中のプラットフォーム向けの次のいずれかの実装ガイドに従ってください。
これらのプラットフォーム固有のガイドでは、推奨モデルや、推奨される構成オプションを含むコードサンプルなど、このタスクの基本的な実装について説明します。
タスクの詳細
このセクションでは、このタスクの機能、入力、出力について説明します。
機能
- 入力画像処理 - 画像の回転、サイズ変更、正規化、色空間変換などを行います。
- Label map locale - 表示名に使用する言語を設定します
- スコアしきい値 - 予測スコアに基づいて結果をフィルタリングします。
- トップ K 検出 - 数値の検出結果をフィルタします。
- ラベルの許可リストと拒否リスト - 検出されたカテゴリを指定します。
タスクの入力 | タスクの出力 |
---|---|
Object Detector API は、次のいずれかのデータ型の入力を受け入れます。
|
Object Detector API は、検出されたオブジェクトについて次の結果を出力します。
|
構成オプション
このタスクには、次の構成オプションがあります。
オプション名 | 説明 | 値の範囲 | デフォルト値 |
---|---|---|---|
running_mode |
タスクの実行モードを設定します。モードは 3 つあります。 IMAGE: 単一の画像入力のモード。 VIDEO: 動画のデコードされたフレームのモード。 LIVE_STREAM: カメラからのデータなど、入力データのライブストリームのモード。このモードでは、resultListener を呼び出して、結果を非同期で受け取るリスナーをセットアップする必要があります。 |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
display_names |
タスクのモデルのメタデータで提供される表示名に使用するラベルの言語を設定します(利用可能な場合)。英語の場合、デフォルトは en です。TensorFlow Lite Metadata Writer API を使用して、カスタムモデルのメタデータにローカライズされたラベルを追加できます。 |
言語 / 地域コード | en |
max_results |
返されるトップスコアの検出結果の最大数を設定します(省略可)。 | 任意の正の数 | -1(すべての結果が返されます) |
score_threshold |
モデル メタデータ(存在する場合)で指定された値をオーバーライドする予測スコアのしきい値を設定します。この値を下回る結果は拒否されます。 | 任意の浮動小数点数 | 未設定 |
category_allowlist |
許可されるカテゴリ名のオプション リストを設定します。空でない場合、カテゴリ名がこのセットにない検出結果は除外されます。重複するカテゴリ名や不明なカテゴリ名は無視されます。
このオプションは category_denylist と相互に排他的であり、両方を使用するとエラーが発生します。 |
任意の文字列 | 未設定 |
category_denylist |
使用できないカテゴリ名のオプション リストを設定します。空でない場合、カテゴリ名がこのセットに含まれる検出結果は除外されます。重複するカテゴリ名や不明なカテゴリ名は無視されます。このオプションは category_allowlist と相互に排他的であり、両方を使用するとエラーになります。 |
任意の文字列 | 未設定 |
モデル
Object Detector API を使用するには、オブジェクト検出モデルをダウンロードしてプロジェクト ディレクトリに保存する必要があります。モデルがない場合は、デフォルトの推奨モデルから始めます。このセクションで説明する他のモデルでは、レイテンシと精度のトレードオフがあります。
EfficientDet-Lite0 モデル(推奨)
EfficientDet-Lite0 モデルは、入力サイズが 320 x 320 で BiFPN 機能ネットワークの EfficientNet-Lite0 バックボーンを使用します。このモデルは、COCO データセットでトレーニングされました。これは、150 万個のオブジェクト インスタンスと 80 個のオブジェクト ラベルを含む大規模なオブジェクト検出データセットです。サポートされているラベルの全リストをご覧ください。EfficientDet-Lite0 は、int8、float16、float32 として利用できます。このモデルは、レイテンシと精度のバランスが取れているため、推奨されています。多くのユースケースに十分な正確性と軽量性を兼ね備えています。
モデル名 | 入力シェイプ | 量子化タイプ | バージョン |
---|---|---|---|
EfficientDet-Lite0 (int8) | 320×320 | int8 | 最新 |
EfficientDet-Lite0(float 16) | 320×320 | 浮動小数点数 16 | 最新 |
EfficientDet-Lite0(float 32) | 320×320 | なし(float32) | 最新 |
EfficientDet-Lite2 モデル
EfficientDet-Lite2 モデルは、入力サイズが 448x448 で BiFPN 機能ネットワークの EfficientNet-Lite2 バックボーンを使用します。このモデルは、COCO データセットでトレーニングされました。これは、150 万個のオブジェクト インスタンスと 80 個のオブジェクト ラベルを含む大規模なオブジェクト検出データセットです。サポートされているラベルの全リストをご覧ください。EfficientDet-Lite2 は、int8、float16、float32 のモデルとして使用できます。このモデルは一般的に EfficientDet-Lite0 よりも正確ですが、低速でメモリ使用量が多くなります。このモデルは、速度とサイズよりも精度が優先されるユースケースに適しています。
モデル名 | 入力シェイプ | 量子化タイプ | バージョン |
---|---|---|---|
EfficientDet-Lite2 (int8) | 448×448 | int8 | 最新 |
EfficientDet-Lite2 (float 16) | 448×448 | 浮動小数点数 16 | 最新 |
EfficientDet-Lite2(float 32) | 448×448 | なし(float32) | 最新 |
SSD MobileNetV2 モデル
SSD MobileNetV2 モデルは、256x256 入力サイズと SSD フィーチャー ネットワークで MobileNetV2 バックボーンを使用します。このモデルは、COCO データセットでトレーニングされました。これは、150 万個のオブジェクト インスタンスと 80 個のオブジェクト ラベルを含む大規模なオブジェクト検出データセットです。サポートされているラベルの全リストをご覧ください。SSD MobileNetV2 は、int8 と float 32 モデルとして使用できます。このモデルは EfficientDet-Lite0 よりも高速かつ軽量ですが、一般的に精度も低くなります。このモデルは、ある程度の精度が犠牲になるものの、高速で軽量なモデルを必要とするユースケースに適しています。
モデル名 | 入力シェイプ | 量子化タイプ | バージョン |
---|---|---|---|
SSDMobileNet-V2 (int8) | 256 x 256 | int8 | 最新 |
SSDMobileNet-V2(浮動小数点 32) | 256 x 256 | なし(float32) | 最新 |
モデルの要件とメタデータ
このセクションでは、このタスクで使用するモデルを構築する場合のカスタムモデルの要件について説明します。カスタムモデルは TensorFlow Lite 形式にし、モデルの動作パラメータを記述するメタデータを含める必要があります。
設計要件
入力 | 形 | 説明 |
---|---|---|
入力画像 | form[1, height, width, 3] の Float32 テンソル | 正規化された入力画像。 |
出力 | 形 | 説明 |
---|---|---|
detection_boxes |
形 [1, num_boxes, 4] の Float32 テンソル | 検出された各オブジェクトのボックスの位置。 |
detection_classes |
形 [1, num_boxes] の Float32 テンソル | 検出された各オブジェクトのクラス名のインデックス。 |
detection_scores |
形状 [1, num_boxes] の float32 テンソル | 検出された各オブジェクトの予測スコア。 |
num_boxes |
サイズ 1 の Float32 テンソル | 検出されたボックスの数。 |
メタデータの要件
パラメータ | 説明 | 説明 |
---|---|---|
input_norm_mean |
入力テンソルの正規化で使用される平均値。 | 正規化された入力画像。 |
input_norm_std |
入力テンソルの正規化で使用されるフィールド ノルム。 | 検出された各オブジェクトのボックスの位置。 |
label_file_paths |
カテゴリテンソルラベルファイルのパス。モデルにラベルファイルがない場合は、空のリストを渡します。 | 検出された各オブジェクトのクラス名のインデックス。 |
score_calibration_md |
分類テンソルのスコア調整オペレーションに関する情報。モデルでスコア調整を使用しない場合、このパラメータは不要です。 |
検出された各オブジェクトの予測スコア。 |
num_boxes |
サイズ 1 の Float32 テンソル | 検出されたボックスの数。 |
タスク ベンチマーク
上記の事前トレーニング済みモデルのタスク ベンチマークは次のとおりです。レイテンシの結果は、CPU / GPU を使用した Google Pixel 6 の平均レイテンシです。
モデル名 | CPU レイテンシ | GPU レイテンシ |
---|---|---|
EfficientDet-Lite0 float32 モデル | 61.30 ミリ秒 | 27.83 ミリ秒 |
EfficientDet-Lite0 float16 モデル | 53.97 ミリ秒 | 27.97 ミリ秒 |
EfficientDet-Lite0 int8 モデル | 29.31 ミリ秒 | - |
EfficientDet-Lite2 float32 モデル | 197.98 ミリ秒 | 41.15 ミリ秒 |
EfficientDet-Lite2 float16 モデル | 198.77 ミリ秒 | 47.31 ミリ秒 |
EfficientDet-Lite2 int8 モデル | 70.91 ミリ秒 | - |
SSD MobileNetV2 float32 モデル | 36.30 ミリ秒 | 24.01 ミリ秒 |
SSD MobileNetV2 float16 モデル | 37.35 ミリ秒 | 28.16 ミリ秒 |