画像またはビデオストリームが与えられると、オブジェクト検出モデルは、既知のオブジェクトセットのどれが存在する可能性があるかを識別し、画像内のそれらの位置に関する情報を提供できます。
たとえば、サンプルアプリケーションのこのスクリーンショットは、2つのオブジェクトがどのように認識され、それらの位置に注釈が付けられているかを示しています。
始めましょう
モバイルアプリでオブジェクト検出を使用する方法については、サンプルアプリケーションとガイドをご覧ください。
AndroidまたはiOS以外のプラットフォームを使用している場合、またはTensorFlow Lite APIに既に精通している場合は、スターターオブジェクト検出モデルとそれに付随するラベルをダウンロードできます。
メタデータと関連フィールド(例: labels.txt
)の詳細については、「モデルからメタデータを読み取る」を参照してください。
独自のタスク用にカスタム検出モデルをトレーニングする場合は、モデルのカスタマイズを参照してください。
次のユースケースでは、別のタイプのモデルを使用する必要があります。
アプリケーションとガイドの例
TensorFlow Liteを初めて使用し、AndroidまたはiOSを使用している場合は、開始に役立つ次のサンプルアプリケーションを調べることをお勧めします。
アンドロイド
TensorFlow Liteタスクライブラリのすぐに使用できるAPIを利用して、わずか数行のコードでオブジェクト検出モデルを統合できます。 TensorFlow Lite Interpreter Java APIを使用して、独自のカスタム推論パイプラインを構築することもできます。
以下のAndroidの例は、両方のメソッドの実装をそれぞれlib_task_apiとlib_interpreterとして示しています。
iOS
TensorFlow Lite InterpreterSwiftAPIを使用してモデルを統合できます。以下のiOSの例を参照してください。
モデルの説明
このセクションでは、 TensorFlow ObjectDetectionAPIからTensorFlowLiteに変換されたシングルショット検出器モデルのシグネチャについて説明します。
オブジェクト検出モデルは、複数のクラスのオブジェクトの存在と場所を検出するようにトレーニングされています。たとえば、モデルは、さまざまな果物の断片を含む画像と、それらが表す果物のクラス(リンゴ、バナナ、イチゴなど)を指定するラベル、および各オブジェクトが表示される場所を指定するデータでトレーニングされる場合があります。画像。
その後、画像がモデルに提供されると、検出されたオブジェクトのリスト、各オブジェクトを含むバウンディングボックスの場所、および検出が正しかったという確信を示すスコアが出力されます。
入力署名
モデルは画像を入力として受け取ります。
予想される画像が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%であることを意味します)。その場合、これらの信頼スコアは0.5未満であるため、配列の最後の2つのオブジェクトは無視されます。
クラス | スコア | 位置 |
---|---|---|
アップル | 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%)は、誤検知を快適に除外します。
位置
検出されたオブジェクトごとに、モデルはその位置を囲む境界矩形を表す4つの数値の配列を返します。提供されているスターターモデルの場合、番号は次のように並べられています。
[ | 上、 | 左、 | 下、 | 右 | ] |
上の値は、画像の上部から長方形の上端までの距離をピクセル単位で表します。左の値は、入力画像の左からの左端の距離を表します。他の値は、同様の方法で下端と右端を表します。
パフォーマンスベンチマーク
スターターモデルのパフォーマンスベンチマーク値は、ここで説明するツールを使用して生成されます。
モデル名 | モデルサイズ | デバイス | GPU | CPU |
---|---|---|---|---|
COCO SSD MobileNet v1 | 27 Mb | Pixel 3(Android 10) | 22ms | 46ms * |
Pixel 4(Android 10) | 20ms | 29ms * | ||
iPhone XS(iOS 12.4.1) | 7.6ms | 11ms ** |
*使用される4つのスレッド。
**最高のパフォーマンス結果を得るためにiPhoneで使用される2つのスレッド。
モデルのカスタマイズ
事前トレーニング済みモデル
さまざまな遅延と精度の特性を備えたモバイル向けに最適化された検出モデルは、 DetectionZooにあります。それらのそれぞれは、次のセクションで説明する入力および出力シグニチャに従います。
ほとんどのダウンロードzipには、 model.tflite
ファイルが含まれています。存在しない場合は、これらの手順を使用してTensorFlowLiteフラットバッファーを生成できます。 TF2 Object Detection ZooのSSDモデルは、こちらの手順を使用してTensorFlowLiteに変換することもできます。検出モデルは、モバイルフレンドリーなソースモデルを生成する中間ステップを必要とするため、 TensorFlowLiteConverterを使用して直接変換できないことに注意することが重要です。上でリンクされたスクリプトは、このステップを実行します。
TF1とTF2の両方のエクスポートスクリプトには、より多くの出力オブジェクトを有効にしたり、より低速でより正確な後処理を可能にするパラメーターがあります。サポートされている引数の完全なリストを表示するには、スクリプトで--help
を使用してください。
現在、デバイス上の推論はSSDモデルでのみ最適化されています。 CenterNetやEfficientDetなどの他のアーキテクチャのより良いサポートが調査されています。
カスタマイズするモデルを選択するにはどうすればよいですか?
各モデルには、独自の精度(mAP値で定量化)とレイテンシー特性があります。ユースケースと目的のハードウェアに最適なモデルを選択する必要があります。たとえば、 Edge TPUモデルは、Pixel4上のGoogleのEdgeTPUでの推論に最適です。
ベンチマークツールを使用してモデルを評価し、利用可能な最も効率的なオプションを選択できます。
カスタムデータのモデルの微調整
私たちが提供する事前トレーニング済みモデルは、90クラスのオブジェクトを検出するようにトレーニングされています。クラスの完全なリストについては、モデルメタデータのラベルファイルを参照してください。
転移学習と呼ばれる手法を使用して、元のセットにないクラスを認識するようにモデルを再トレーニングできます。たとえば、元のトレーニングデータには野菜が1つしかないにもかかわらず、モデルを再トレーニングして複数の種類の野菜を検出できます。これを行うには、トレーニングする新しいラベルごとにトレーニング画像のセットが必要になります。推奨される方法は、 TensorFlow Lite Model Makerライブラリを使用することです。これにより、数行のコードを使用して、カスタムデータセットを使用してTensorFlowLiteモデルをトレーニングするプロセスが簡素化されます。転移学習を使用して、必要なトレーニングデータと時間を削減します。いくつかの例を使用して、事前にトレーニングされたモデルを微調整する例として、少数ショット検出Colabから学ぶこともできます。
より大きなデータセットで微調整するには、TensorFlow Object Detection APIを使用して独自のモデルをトレーニングするためのこれらのガイドを参照してください: TF1 、 TF2 。トレーニングが完了すると、 TF1 、 TF2の手順でTFLiteに適した形式に変換できます。