MediaPipe 画像分類タスクを使用すると、画像の分類を行うことができます。このタスクを使用して、トレーニング時に定義された一連のカテゴリの中から画像が何を表すかを特定できます。このタスクは、機械学習(ML)モデルにより、静的データまたは連続ストリームとして画像データを操作し、確率スコアの降順でランク付けされたカテゴリ候補のリストを出力します。
使ってみる
このタスクの使用を開始するには、ターゲット プラットフォームの実装ガイドのいずれかに沿って操作します。以下のプラットフォーム固有のガイドでは、推奨モデルを使用してこのタスクの基本的な実装方法と、推奨される構成オプションを含むコードサンプルについて説明します。
タスクの詳細
このセクションでは、このタスクの機能、入力、出力、構成オプションについて説明します。
機能
- 入力画像処理 - 画像の回転、サイズ変更、正規化、色空間変換などを行います。
- 関心のある地域 - 画像全体ではなく、画像の特定の領域に対して分類を行います。
- Label map locale - 表示名に使用する言語を設定します。
- スコアしきい値 - 予測スコアに基づいて結果をフィルタリングします。
- トップ K 分類 - 分類結果の数を制限します。
- ラベルの許可リストと拒否リスト - 分類するカテゴリを指定します。
タスクの入力 | タスクの出力 |
---|---|
入力は次のいずれかのデータ型になります。
|
画像分類器は、以下を含むカテゴリのリストを出力します。
|
構成オプション
このタスクには、次の構成オプションがあります。
オプション名 | 説明 | 値の範囲 | デフォルト値 |
---|---|---|---|
running_mode |
タスクの実行モードを設定します。モードは 3 つあります。 IMAGE: 単一の画像入力のモード。 VIDEO: 動画のデコードされたフレームのモード。 LIVE_STREAM: カメラからのデータなど、入力データのライブストリームのモード。このモードでは、resultListener を呼び出して、結果を非同期で受け取るリスナーをセットアップする必要があります。 |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
display_names_locale |
タスクのモデルのメタデータで提供される表示名に使用するラベルの言語を設定します(利用可能な場合)。英語の場合、デフォルトは en です。TensorFlow Lite Metadata Writer API を使用して、カスタムモデルのメタデータにローカライズされたラベルを追加できます。 |
言語 / 地域コード | en |
max_results |
返されるトップスコアの分類結果の最大数を設定します(省略可)。0 未満の場合、利用可能なすべての結果が返されます。 | 任意の正の数 | -1 |
score_threshold |
モデル メタデータ(存在する場合)で指定された値をオーバーライドする予測スコアのしきい値を設定します。この値を下回る結果は拒否されます。 | 任意の浮動小数点数 | 未設定 |
category_allowlist |
許可されるカテゴリ名のオプション リストを設定します。空でない場合、カテゴリ名がこのセットにない分類結果は除外されます。重複するカテゴリ名や不明なカテゴリ名は無視されます。
このオプションは category_denylist と相互に排他的であり、両方を使用するとエラーが発生します。 |
任意の文字列 | 未設定 |
category_denylist |
使用できないカテゴリ名のオプション リストを設定します。空でない場合、カテゴリ名がこのセットに含まれる分類結果は除外されます。重複するカテゴリ名や不明なカテゴリ名は無視されます。このオプションは category_allowlist と相互に排他的であり、両方を使用するとエラーになります。 |
任意の文字列 | 未設定 |
result_callback |
画像分類器がライブ ストリーム モードのときに分類結果を非同期で受け取るように結果リスナーを設定します。実行モードが LIVE_STREAM に設定されている場合にのみ使用できます |
なし | 未設定 |
モデル
画像分類器を使用するには、画像分類モデルをダウンロードしてプロジェクト ディレクトリに保存する必要があります。このタスクで開発を開始するときは、ターゲット プラットフォームのデフォルトの推奨モデルから始めます。他の利用可能なモデルでは、通常、パフォーマンス、精度、解像度、リソース要件のトレードオフがあり、場合によっては追加機能が含まれていることもあります。
EfficientNet-Lite0 モデル(推奨)
EfficientNet-Lite0 モデルは、EfficientNet アーキテクチャを使用し、ImageNet を使用して、樹木、動物、食品、車両、人などの 1,000 クラスを認識するようトレーニングされました。サポートされているラベルの一覧をご覧ください。EfficientNet-Lite0 は、int8 モデルと float 32 モデルとして使用できます。このモデルは、レイテンシと精度のバランスが取れているため、推奨されています。多くのユースケースに十分な正確性と軽量性を兼ね備えています。
モデル名 | 入力シェイプ | 量子化タイプ | バージョン |
---|---|---|---|
EfficientNet-Lite0 (int8) | 224×224 | int8 | 最新 |
EfficientNet-Lite0(float 32) | 224×224 | なし(float32) | 最新 |
EfficientNet-Lite2 モデル
EfficientNet-Lite2 モデルは、EfficientNet アーキテクチャを使用し、ImageNet を使用して、樹木、動物、食品、車両、人などの 1,000 クラスを認識するようにトレーニングされています。サポートされているラベルの一覧をご覧ください。EfficientNet-Lite2 は、int8 モデルと float 32 モデルとして使用できます。このモデルは通常、EfficientNet-Lite0 よりも正確ですが、速度が遅く、メモリ使用量が多くなります。このモデルは、速度やサイズよりも精度が高いユースケースに適しています。
モデル名 | 入力シェイプ | 量子化タイプ | バージョン |
---|---|---|---|
EfficientNet-Lite2 (int8) | 224×224 | int8 | 最新 |
EfficientNet-Lite2(float 32) | 224×224 | なし(float32) | 最新 |
タスク ベンチマーク
上記の事前トレーニング済みモデルに基づくパイプライン全体のタスク ベンチマークは次のとおりです。レイテンシの結果は、CPU / GPU を使用した Google Pixel 6 の平均レイテンシです。
モデル名 | CPU レイテンシ | GPU レイテンシ |
---|---|---|
EfficientNet-Lite0(浮動小数点 32) | 23.52 ミリ秒 | 18.90 ミリ秒 |
EfficientNet-Lite0(int8) | 10.08 ミリ秒 | - |
EfficientNet-Lite2(浮動小数点 32) | 44.17 ミリ秒 | 22.20 ミリ秒 |
EfficientNet-Lite2(int8) | 19.43 ミリ秒 | - |
カスタムモデル
提供されているモデルの機能を改善または変更する場合は、このタスクでカスタマイズした ML モデルを使用できます。Model Maker を使用すると、既存のモデルを変更したり、TensorFlow などのツールを使用してモデルを構築したりできます。MediaPipe で使用するカスタムモデルは、TensorFlow Lite 形式である必要があり、モデルの動作パラメータを記述する特定のメタデータを含める必要があります。独自のモデルを構築する前に、Model Maker を使用して、このタスク用に提供されたモデルを変更することを検討してください。
独自のデータセットを使用してカスタム画像分類器を作成する場合は、まず画像分類器のカスタマイズのチュートリアルをご覧ください。