質問があります? TensorFlowフォーラム訪問フォーラムでコミュニティとつながる

物体検出

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

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

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

始めましょう

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

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

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

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

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

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

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

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

アンドロイド

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

以下のAndroidの例は、両方のメソッドの実装をそれぞれlib_task_apilib_interpreterとして示しています。

Androidの例を見る

iOS

TensorFlow Lite Interpreter SwiftAPIを使用してモデルを統合できます。以下のiOSの例を参照してください。

iOSの例を見る

モデルの説明

このセクションでは、 TensorFlow Object DetectionAPIから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%)のカットオフは、誤検知を快適に除外します。

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

ロケーション

検出されたオブジェクトごとに、モデルはその位置を囲む外接する長方形を表す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ファイルが含まれてmodel.tfliteます。存在しない場合は、 これらの手順を使用してTensorFlowLiteフラットバッファーを生成できます。 TF2 Object Detection ZooのSSDモデルは、 こちらの手順を使用してTensorFlowLiteに変換することもできます。検出モデルは、モバイルフレンドリーなソースモデルを生成する中間ステップを必要とするため、 TensorFlow LiteConverterを使用して直接変換できないことに注意することが重要です。上でリンクされたスクリプトは、このステップを実行します。

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

現在、デバイス上の推論はSSDモデルでのみ最適化されています。 CenterNetやEfficientDetなどの他のアーキテクチャのより良いサポートが調査されています。

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

各モデルには、独自の精度(mAP値で定量化)とレイテンシー特性があります。ユースケースと目的のハードウェアに最適なモデルを選択する必要があります。たとえば、 Edge TPUモデルは、Pixel4上のGoogleのEdgeTPUでの推論に最適です。

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

カスタムデータのモデルの微調整

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

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

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