MediaPipe オブジェクト検出タスクを使用すると、画像または動画内の複数のクラスのオブジェクトの存在と位置を検出できます。たとえば、オブジェクト検出機能は画像内の犬を見つけることができます。このタスクは、機械学習(ML)モデルを使用して画像データを処理し、静的データまたは連続ビデオ ストリームを入力として受け取り、検出結果のリストを出力します。各検出結果は、画像または動画内に表示されるオブジェクトを表します。
使ってみる
このタスクを使用するには、作業しているプラットフォームの実装ガイドのいずれかを行います。
これらのプラットフォーム固有のガイドでは、推奨モデルや、推奨構成オプションを含むコード例など、このタスクの基本的な実装について説明します。
タスクの詳細
このセクションでは、このタスクの機能、入力、出力について説明します。
機能
- 入力画像の処理 - 処理には、画像の回転、サイズ変更、正規化、色空間変換が含まれます。
- ラベル地図の言語 / 地域 - 表示名に使用する言語を設定します。
- スコアしきい値 - 予測スコアに基づいて結果をフィルタします。
- 上位 k 個の検出 - 数値検出結果をフィルタします。
- ラベルの許可リストと拒否リスト - 検出されたカテゴリを指定します。
タスク入力 | タスクの出力 |
---|---|
Object Detector API は、次のいずれかのデータ型の入力を受け入れます。
|
Object Detector API は、検出されたオブジェクトについて次の結果を出力します。
|
構成オプション
このタスクには、次の構成オプションがあります。
オプション名 | 説明 | 値の範囲 | デフォルト値 |
---|---|---|---|
running_mode |
タスクの実行モードを設定します。モードは次の 3 つです。 IMAGE: 単一画像入力のモード。 動画: 動画のデコードされたフレームのモード。 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 Detection API では、オブジェクト検出モデルをダウンロードしてプロジェクト ディレクトリに保存する必要があります。モデルがない場合は、デフォルトの推奨モデルから始めます。このセクションで説明する他のモデルは、レイテンシと精度のトレードオフを行います。
EfficientDet-Lite0 モデル(推奨)
EfficientDet-Lite0 モデルは、320x320 の入力サイズと BiFPN 特徴ネットワークを備えた EfficientNet-Lite0 バックボーンを使用します。このモデルは、150 万個のオブジェクト インスタンスと 80 個のオブジェクトラベルを含む大規模なオブジェクト検出データセットである COCO データセットでトレーニングされています。サポートされているラベルの一覧をご覧ください。EfficientDet-Lite0 は、int8、float16、float32 で使用できます。このモデルは、レイテンシと精度のバランスが取れているため、推奨されます。多くのユースケースで十分な精度と軽量性があります。
モデル名 | 入力シェイプ | 量子化のタイプ | バージョン |
---|---|---|---|
EfficientDet-Lite0(int8) | 320 X 320 | int8 | 最新 |
EfficientDet-Lite0(float 16) | 320 X 320 | float 16 | 最新 |
EfficientDet-Lite0(float 32) | 320 X 320 | なし(float32) | 最新 |
EfficientDet-Lite2 モデル
EfficientDet-Lite2 モデルは、448x448 の入力サイズと BiFPN 特徴ネットワークを備えた EfficientNet-Lite2 バックボーンを使用します。このモデルは、150 万個のオブジェクト インスタンスと 80 個のオブジェクトラベルを含む大規模なオブジェクト検出データセットである COCO データセットでトレーニングされています。サポートされているラベルの完全なリストをご覧ください。EfficientDet-Lite2 は、int8、float16、float32 モデルとして使用できます。このモデルは通常、EfficientDet-Lite0 よりも精度が高いですが、速度が遅く、メモリ使用量も増加します。このモデルは、速度とサイズよりも精度が優先されるユースケースに適しています。
モデル名 | 入力シェイプ | 量子化のタイプ | バージョン |
---|---|---|---|
EfficientDet-Lite2(int8) | 448 x 448 | int8 | 最新 |
EfficientDet-Lite2(float 16) | 448 x 448 | float 16 | 最新 |
EfficientDet-Lite2(float 32) | 448 x 448 | なし(float32) | 最新 |
SSD MobileNetV2 モデル
SSD MobileNetV2 モデルは、256x256 の入力サイズと SSD 特徴ネットワークを備えた MobileNetV2 バックボーンを使用します。このモデルは、150 万個のオブジェクト インスタンスと 80 個のオブジェクトラベルを含む大規模なオブジェクト検出データセットである COCO データセットでトレーニングされています。サポートされているラベルの完全なリストをご覧ください。SSD MobileNetV2 は、int8 モデルと浮動小数点 32 モデルとして使用できます。このモデルは EfficientDet-Lite0 よりも高速で軽量ですが、一般的に精度が低くなります。このモデルは、精度を犠牲にして高速で軽量なモデルを必要とするユースケースに適しています。
モデル名 | 入力シェイプ | 量子化のタイプ | バージョン |
---|---|---|---|
SSDMobileNet-V2(int8) | 256 x 256 | int8 | 最新 |
SSDMobileNet-V2(浮動小数点 32) | 256 x 256 | なし(float32) | 最新 |
モデルの要件とメタデータ
このセクションでは、このタスクで使用するモデルを構築する場合のカスタムモデルの要件について説明します。カスタムモデルは TensorFlow Lite 形式で、モデルの動作パラメータを記述するmetadataを含める必要があります。
設計要件
入力 | 図形 | 説明 |
---|---|---|
入力画像 | 形状 [1, 高さ, 幅, 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 ミリ秒 |