MediaPipe Image Classifier タスクを使用すると、画像の分類を行うことができます。このタスクを使用すると、トレーニング時に定義された一連のカテゴリの中で、画像が表す内容を特定できます。このタスクは、機械学習(ML)モデルを静的データまたは連続ストリームとして使用して画像データを処理し、可能性のあるカテゴリのリストを出力します。このリストは、確率スコアが降順でランク付けされます。
使ってみる
このタスクを使用するには、対象プラットフォーム向けの次のいずれかの実装ガイドに沿って操作します。これらのプラットフォーム固有のガイドでは、推奨モデルを使用してこのタスクの基本的な実装について説明します。また、推奨される構成オプションを含むコード例も示します。
タスクの詳細
このセクションでは、このタスクの機能、入力、出力、構成オプションについて説明します。
機能
- 入力画像の処理 - 処理には、画像の回転、サイズ変更、正規化、色空間変換が含まれます。
- 関心領域 - 画像全体ではなく、画像の領域で分類を行います。
- ラベルマップの言語 / 地域 - 表示名に使用する言語を設定します。
- スコアしきい値 - 予測スコアに基づいて結果をフィルタします。
- 上位 k 個の分類 - 分類結果の数を制限します。
- ラベルの許可リストと拒否リスト - 分類するカテゴリを指定します。
タスク入力 | タスクの出力 |
---|---|
入力は次のいずれかのデータ型にする必要があります。
|
Image Classifier は、次を含むカテゴリのリストを出力します。
|
構成オプション
このタスクには、次の構成オプションがあります。
オプション名 | 説明 | 値の範囲 | デフォルト値 |
---|---|---|---|
running_mode |
タスクの実行モードを設定します。モードは次の 3 つです。 IMAGE: 単一画像入力のモード。 動画: 動画のデコードされたフレームのモード。 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 に設定されている場合にのみ使用できます。 |
なし | 未設定 |
モデル
Image Classifier では、画像分類モデルをダウンロードしてプロジェクト ディレクトリに保存する必要があります。このタスクで開発を開始する際は、ターゲット プラットフォームのデフォルトの推奨モデルから始めます。使用可能な他のモデルでは通常、パフォーマンス、精度、解像度、リソース要件のトレードオフが行われます。また、追加機能が含まれている場合もあります。
EfficientNet-Lite0 モデル(推奨)
EfficientNet-Lite0 モデルは、EfficientNet アーキテクチャを使用しており、ImageNet を使用してトレーニングされ、木、動物、食べ物、車、人など 1,000 クラスを認識します。サポートされているラベルの完全なリストをご覧ください。EfficientNet-Lite0 は、int8 モデルと浮動小数点 32 モデルとして使用できます。このモデルは、レイテンシと精度のバランスが取れているため、推奨されます。多くのユースケースで十分な精度と軽量性があります。
モデル名 | 入力シェイプ | 量子化のタイプ | バージョン |
---|---|---|---|
EfficientNet-Lite0(int8) | 224 x 224 | int8 | 最新 |
EfficientNet-Lite0(浮動小数点 32) | 224 x 224 | なし(float32) | 最新 |
EfficientNet-Lite2 モデル
EfficientNet-Lite2 モデルは、EfficientNet アーキテクチャを使用しており、ImageNet を使用してトレーニングされ、木、動物、食べ物、車、人など 1,000 クラスを認識します。サポートされているラベルの完全なリストをご覧ください。EfficientNet-Lite2 は、int8 モデルと浮動小数点 32 モデルで使用できます。このモデルは通常、EfficientNet-Lite0 よりも精度が高いですが、速度が遅く、メモリ使用量も増加します。このモデルは、速度やサイズよりも精度が優先されるユースケースに適しています。
モデル名 | 入力シェイプ | 量子化のタイプ | バージョン |
---|---|---|---|
EfficientNet-Lite2(int8) | 224 x 224 | int8 | 最新 |
EfficientNet-Lite2(float 32) | 224 x 224 | なし(float32) | 最新 |
タスクのベンチマーク
上記の事前トレーニング済みモデルに基づくパイプライン全体のタスクのベンチマークは次のとおりです。レイテンシの結果は、CPU / GPU を使用した Google Pixel 6 の平均レイテンシです。
モデル名 | CPU レイテンシ | GPU レイテンシ |
---|---|---|
EfficientNet-Lite0(float 32) | 23.52 ミリ秒 | 18.90 ミリ秒 |
EfficientNet-Lite0(int8) | 10.08 ミリ秒 | - |
EfficientNet-Lite2(float 32) | 44.17ms | 22.20 ミリ秒 |
EfficientNet-Lite2(int8) | 19.43 ミリ秒 | - |
カスタムモデル
提供されているモデルの機能を改善または変更する場合は、このタスクでカスタマイズされた ML モデルを使用できます。Model Maker を使用して既存のモデルを変更したり、TensorFlow などのツールを使用してモデルを構築したりできます。MediaPipe で使用するカスタムモデルは TensorFlow Lite 形式で、モデルの動作パラメータを表す特定のmetadataを含める必要があります。独自のモデルを構築する前に、Model Maker を使用してこのタスク用に提供されているモデルを変更することを検討してください。
独自のデータセットを使用してカスタム画像分類システムを作成する場合は、画像分類システムのカスタマイズのチュートリアルをご覧ください。