物体検出

画像またはビデオ ストリームが与えられると、オブジェクト検出モデルは、既知のオブジェクトのセットのうちどれが存在する可能性があるかを特定し、画像内のそれらの位置に関する情報を提供します。

たとえば、サンプル アプリケーションの次のスクリーンショットは、2 つのオブジェクトがどのように認識され、それらの位置に注釈が付けられているかを示しています。

Android の例のスクリーンショット

始めましょう

モバイル アプリでオブジェクト検出を使用する方法については、サンプル アプリケーションとガイドを参照してください。

Android または iOS 以外のプラットフォームを使用している場合、またはすでにTensorFlow Lite APIに精通している場合は、スターター オブジェクト検出モデルと付随するラベルをダウンロードできます。

メタデータを含むスターター モデルをダウンロードする

メタデータと関連フィールド (例: labels.txt ) の詳細については、「モデルからメタデータを読み取る」を参照してください。

独自のタスク用にカスタム検出モデルをトレーニングする場合は、 「モデルのカスタマイズ」を参照してください。

次の使用例では、別のタイプのモデルを使用する必要があります。

  • 画像がどの単一ラベルを表す可能性が最も高いかを予測する (画像分類を参照)
  • 画像の構成、たとえば被写体と背景の予測 (セグメンテーションを参照)

アプリケーション例とガイド

TensorFlow Lite を初めて使用し、Android または iOS を使用している場合は、開始に役立つ次のサンプル アプリケーションを検討することをお勧めします。

アンドロイド

TensorFlow Lite タスク ライブラリのすぐに使える API を利用して、わずか数行のコードでオブジェクト検出モデルを統合できます。 TensorFlow Lite Interpreter Java APIを使用して独自のカスタム推論パイプラインを構築することもできます。

以下の Android の例は、タスク ライブラリインタープリター APIをそれぞれ使用した両方のメソッドの実装を示しています。

Android の例を見る

iOS

TensorFlow Lite インタープリター Swift APIを使用してモデルを統合できます。以下の iOS の例を参照してください。

iOS の例を見る

モデルの説明

このセクションでは、TensorFlow Object Detection APIから TensorFlow Lite に変換されたSingle-Shot Detectorモデルのシグネチャについて説明します。

物体検出モデルは、複数のクラスの物体の存在と位置を検出するようにトレーニングされます。たとえば、モデルは、さまざまな果物を含む画像、それらが表す果物のクラス (リンゴ、バナナ、イチゴなど) を指定するラベル、および各オブジェクトが表示される場所を指定するデータを使用してトレーニングされる場合があります。画像。

その後、画像がモデルに提供されると、検出されたオブジェクトのリスト、各オブジェクトを含む境界ボックスの位置、および検出が正しかった信頼性を示すスコアが出力されます。

入力署名

モデルは画像を入力として受け取ります。

予想される画像が 300x300 ピクセルで、ピクセルごとに 3 つのチャネル (赤、青、緑) があると仮定します。これは、270,000 バイト値 (300x300x3) のフラット化されたバッファーとしてモデルに供給される必要があります。モデルが量子化されている場合、各値は 0 ~ 255 の値を表す 1 バイトである必要があります。

Android でこの前処理を行う方法を理解するには、サンプル アプリ コードを参照してください。

出力署名

モデルは、インデックス 0 ~ 4 にマップされた 4 つの配列を出力します。配列 0、1、および 2 はNの検出されたオブジェクトを表し、各配列内の 1 つの要素が各オブジェクトに対応します。

索引名前説明
0所在地0 から 1 までの [N][4] 個の浮動小数点値の多次元配列。内部配列は [上、左、下、右] の形式で境界ボックスを表します。
1クラスN 個の整数の配列 (浮動小数点値として出力) それぞれがラベル ファイルからのクラス ラベルのインデックスを示します
2スコアクラスが検出された確率を表す 0 ~ 1 の間の N 個の浮動小数点値の配列
3検出数N の整数値

たとえば、モデルがリンゴ、バナナ、イチゴを検出するようにトレーニングされていると想像してください。画像が提供されると、設定された数の検出結果 (この例では 5) が出力されます。

クラススコア位置
りんご0.92 [18、21、57、63]
バナナ0.88 [100、30、180、150]
いちご0.87 [7、82、89、163]
バナナ0.23 [42、66、57、83]
りんご0.11 [6、42、31、58]

信頼スコア

これらの結果を解釈するには、検出された各オブジェクトのスコアと位置を確認します。スコアは、オブジェクトが本当に検出されたかどうかの信頼度を示す 0 から 1 までの数値です。数値が 1 に近づくほど、モデルの信頼性が高くなります。

アプリケーションに応じて、検出結果を破棄するカットオフしきい値を決定できます。現在の例では、適切なカットオフはスコア 0.5 です (検出が有効である確率が 50% であることを意味します)。その場合、配列内の最後の 2 つのオブジェクトは、信頼スコアが 0.5 未満であるため無視されます。

クラススコア位置
りんご0.92 [18、21、57、63]
バナナ0.88 [100、30、180、150]
いちご0.87 [7、82、89、163]
バナナ0.23 [42、66、57、83]
りんご0.11 [6、42、31、58]

使用するカットオフは、偽陽性 (誤って識別されるオブジェクト、またはオブジェクトではないのに誤ってオブジェクトとして識別される画像の領域) と偽陰性 (本物のオブジェクトがオブジェクトであると誤って識別される画像領域) のどちらに慣れているかに基づいて決定する必要があります。自信がなかったため見逃しました)。

たとえば、次の画像では、梨 (モデルが検出するようにトレーニングされたオブジェクトではありません) が「人」として誤認されました。これは、適切なカットオフを選択することで無視できる誤検知の例です。この場合、0.6 (または 60%) のカットオフにより、偽陽性が問題なく除外されます。

誤検知を示す Android の例のスクリーンショット

位置

検出されたオブジェクトごとに、モデルはその位置を囲む境界四角形を表す 4 つの数値の配列を返します。提供されているスターター モデルの番号は次のように順序付けされています。

[上、左、底、

上の値は、画像の上端から長方形の上端までの距離をピクセル単位で表します。 left の値は、入力画像の左からの左端の距離を表します。他の値も同様に下端と右端を表します。

パフォーマンスのベンチマーク

スターター モデルのパフォーマンス ベンチマーク数値は、ここで説明するツールを使用して生成されます。

モデル名モデルサイズデバイスGPU CPU
COCO SSD モバイルネット v1 27MBピクセル 3 (Android 10) 22ミリ秒46ミリ秒*
ピクセル 4 (Android 10) 20ミリ秒29ミリ秒*
iPhone XS(iOS 12.4.1) 7.6ミリ秒11ミリ秒**

※糸は4本使用。

** 最高のパフォーマンス結果を得るために、iPhone では 2 つのスレッドが使用されます。

モデルのカスタマイズ

事前トレーニングされたモデル

さまざまな遅延と精度特性を備えたモバイルに最適化された検出モデルは、 Detection Zooで見つけることができます。それらのそれぞれは、次のセクションで説明する入力署名と出力署名に従います。

ほとんどのダウンロード zip には、 model.tfliteファイルが含まれています。存在しない場合は、次の手順を使用して TensorFlow Lite フラットバッファを生成できます。 TF2 Object Detection Zooの SSD モデルは、こちらの手順を使用して TensorFlow Lite に変換することもできます。検出モデルは、モバイル対応のソース モデルを生成する中間ステップが必要なため、 TensorFlow Lite Converterを使用して直接変換できないことに注意することが重要です。上にリンクされているスクリプトはこのステップを実行します。

TF1TF2 の両方のエクスポート スクリプトには、より多くの出力オブジェクトや、より低速でより正確な後処理を有効にするパラメータがあります。サポートされている引数の完全なリストを表示するには、スクリプトで--helpを使用してください。

現在、オンデバイス推論は SSD モデルでのみ最適化されています。 CenterNet や EfficientDet などの他のアーキテクチャのサポートの改善が検討されています。

カスタマイズするモデルを選択するにはどうすればよいですか?

各モデルには、独自の精度 (mAP 値で定量化) と遅延特性があります。ユースケースと対象のハードウェアに最適なモデルを選択する必要があります。たとえば、 Edge TPUモデルは、Pixel 4 上の Google の Edge TPU での推論に最適です。

ベンチマーク ツールを使用してモデルを評価し、利用可能な最も効率的なオプションを選択できます。

カスタムデータに基づいたモデルの微調整

当社が提供する事前トレーニング済みモデルは、90 クラスのオブジェクトを検出するようにトレーニングされています。クラスの完全なリストについては、モデル メタデータのラベル ファイルを参照してください。

転移学習として知られる手法を使用してモデルを再トレーニングし、元のセットにないクラスを認識できます。たとえば、元のトレーニング データには野菜が 1 つしか含まれていないにもかかわらず、複数の種類の野菜を検出するようにモデルを再トレーニングすることができます。これを行うには、トレーニングする新しいラベルごとにトレーニング画像のセットが必要になります。推奨される方法は、数行のコードでカスタム データセットを使用して TensorFlow Lite モデルをトレーニングするプロセスを簡素化するTensorFlow Lite Model Makerライブラリを使用することです。転移学習を使用して、必要なトレーニング データの量と時間を削減します。また、事前トレーニング済みモデルを微調整する例として、いくつかの例を示した少数ショット検出 Colabから学ぶこともできます。

より大きなデータセットを使用して微調整する場合は、TensorFlow Object Detection API を使用して独自のモデルをトレーニングするためのガイド ( TF1TF2 )を参照してください。トレーニングが完了したら、次の手順に従って TFLite に適した形式に変換できます: TF1TF2