画像分類

画像の内容を特定するタスクは、画像分類と呼ばれます。画像分類モデルは、画像のさまざまなクラスを認識するようにトレーニングされます。たとえば、ウサギ、ハムスター、イヌという 3 つの異なる種類の動物を表す写真を認識するようにモデルをトレーニングできます。TensorFlow Lite は最適化されたトレーニング済みモデルを提供しており、モバイルアプリケーションにデプロイできます。TensorFlow を使用した画像分類の詳細については、こちらを参照してください。

次の画像は、Android での画像分類モデルの出力を示します。

Screenshot of Android example

注意: (1) 既存のモデルを統合するには、TensorFlow Lite Task Library を試してください。(2) モデルをカスタマイズするには、TensorFlow Lite Model Maker を試してください。

はじめに

TensorFlow Lite を初めて使用する場合、Android または iOS を使用する場合は、以下のサンプルアプリをご覧ください。

TensorFlow Lite Task Library のそのまま簡単に使用できる API を利用して、わずか数行のコードで画像分類モデルを統合できます。また、TensorFlow Lite Support Library を使用して、独自のカスタム推論パイプラインを構築することもできます。

以下の Android の例では、両方のメソッドをそれぞれ lib_task_api および lib_support として実装しています。

Android の例を見る

iOS の例を見る

Android/iOS 以外のプラットフォームを使用する場合、または、すでに TensorFlow Lite API に精通している場合は、スターターモデルと追加ファイル (該当する場合) をダウンロードしてください。

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

モデルの説明

使い方

トレーニング中、画像分類モデルには画像とそれに関連付けられたラベルが提供されます。各ラベルは、モデルが認識することを学習する個別の概念またはクラスの名前です。

十分なトレーニングデータ (一般的には、ラベルごとに数百または数千個の画像) が入力されると、画像分類モデルは学習して、新しい画像がトレーニングされたクラスのいずれかに属するかどうかを予測できます。この予測プロセスは推論と呼ばれます。すでに転移学習を使用して、既存のモデルを利用することで、新しい画像のクラスを特定することもできます。転移学習には、大量のトレーニングデータセットは必要ありません。

その後、モデルへの入力として新しい画像を提供すると、トレーニングされた動物の各種類を表す画像の確率が出力されます。出力例は次のようになります。

動物の種類 確率
ウサギ 0.07
ハムスター 0.02
イヌ 0.91

出力の各数値は、トレーニングデータのラベルに対応しています。出力をモデルがトレーニングされた 3 つのラベルに関連付けると、モデルが画像が犬を表すことが確率高いことを予測したことがわかります。

すべての確率 (ウサギ、ハムスター、イヌ) の合計が 1 であることにお気づきかもしれません。これは、複数のクラスを持つモデルの一般的なタイプの出力です (詳細については、Softmax を参照してください)。

注: 画像分類は、画像がモデルがトレーニングされた 1 つ以上のクラスを表す確率のみを予測できます。画像内の物体が何であるか特定したり、物体の位置を知ることはできません。画像内の物体とその位置を特定する必要がある場合は、物体検出モデルを使用する必要があります。

不確実な結果

確率の合計は常に 1 になるため、画像がモデルがトレーニングされたどのクラスにも属していると確信して認識されない場合、1 つの値が大幅に大きくならずラベル全体に確率が分布することがあります。

たとえば、次の結果は不確実な結果を示している可能性があります。

ラベル 確率
ウザギ 0.31
ハムスター 0.35
イヌ 0.34
モデルが頻繁に曖昧な結果を返す場合は、別のより正確なモデルが必要になることがあります。

モデルアーキテクチャの選択

TensorFlow Lite には、さまざまな画像分類モデルが用意されており、すべて元のデータセットでトレーニング済みです。MobileNet、Inception、NASNet などのモデルアーキテクチャは、TensorFlow Hub で提供されています。ユースケースに最適なモデルを選択するには、個別のアーキテクチャと、各種モデル間のトレードオフをある程度検討する必要があります。これらのモデルトレードオフの一部は、パフォーマンス、精度、モデルサイズなどのメトリックに基づいています。たとえば、医療画像アプリで低速でも精度の高いモデルが必要なときに、バーコードスキャナを構築するための高速なモデルが必要になる場合があります。 提供される画像分類モデルは、さまざまなサイズの入力を許可します。一部のモデルでは、これはファイル名に示されています。たとえば、Mobilenet_V1_1.0_224 モデルは、224x224 ピクセルの入力を受け入れます。すべてのモデルで、ピクセルごとに 3 つのカラーチャネル(赤、緑、青)が必要です。量子化モデルはチャネルごとに 1 バイトを必要とし、浮動小数点モデルはチャネルごとに 4 バイトを必要とします。AndroidiOS コードサンプルは、フルサイズのカメラ画像を各モデルに必要な形式に処理する方法を示しています。

使用と制限

TensorFlow Lite 画像分類モデルは、単一ラベル分類に役立ちます。つまり、画像が表す可能性が最も高い単一ラベルを予測します。これらは 1000 クラスの画像を認識するようにトレーニングされています。クラスの完全なリストについては、モデル zip のラベルファイルをご覧ください。 新しいクラスを認識するようにモデルをトレーニングする場合は、モデルのカスタマイズをご覧ください。 次の使用例では、別のタイプのモデルを使用する必要があります。
  • 画像内の 1 つ以上の物体の種類と位置を予測する場合(物体検出を参照)
  • 画像の構成 (被写体と背景) を予測する場合 (セグメンテーションを参照)
ターゲットデバイスでスターターモデルを実行してから、さまざまなモデルを試し、パフォーマンス、精度、モデルサイズの最適なバランスを見つけてください。

モデルをカスタマイズする

提供される事前トレーニング済みモデルは、1000 クラスの画像を検出するようにトレーニングされています。クラスの完全なリストについては、モデル zip のラベルファイルをご覧ください。 元のセットにないクラスを認識するようにモデルを再トレーニングするには転移学習を使用できます。たとえば、元のトレーニングデータには木がない場合でも、モデルを再トレーニングすると複数の種類の木を検出できます。これを行うには、トレーニングする新しいラベルごとに一連のトレーニング画像が必要です。 TFLite Model Maker で転移学習を実行する方法については、Recognize flowers with TensorFlow codelab を参照してください。

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

モデルパフォーマンスは、モデルが特定のハードウェアで推論を実行するのにかかる時間に基づいて測定されます。この時間が短いほど、モデルが高速になります。 必要とされるパフォーマンスは、アプリによって異なります。パフォーマンスは、次のフレームに対してドローが実行される前にリアルタイムで各フレームを分析することが重要な場合があるリアルタイムビデオなどのアプリでは重要になる場合があります。(たとえば、推論は 30fps ビデオストリームでリアルタイム推論を実行するために 33ms よりも高速でなければなりません)。 TensorFlow Lite 量子化 MobileNet モデルのパフォーマンスは、3.7ms から 80.3ms の範囲です。 パフォーマンスベンチマークの数値は、ベンチマークツールで生成されます。
モデル名 モデルサイズ デバイス NNAPI CPU
Mobilenet_V1_1.0_224_quant 4.3 Mb Pixel 3 (Android 10) 6ms 13ms*
Pixel 4 (Android 10) 3.3ms 5ms*
iPhone XS (iOS 12.4.1) 11ms**
  • 4 つのスレッドを使用。

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

モデルの精度

精度はモデルが画像を正確に分類する頻度として測定します。たとえば、指定された精度が 60% のモデルでは、平均して 60% の場合、画像が正しく分類されることが期待できます。

モデル関連性精度メトリックは、Top-1 と Top-5 です。Top-1 は、モデルの出力において、最も高い確率で、正しいラベルが表示される頻度を示します。Top-5 は、モデルの出力において、5 番目に高い確率で正しいラベルが表示される頻度を示します。

TensorFlow Lite 量子化 MobileNet モデルの上位 5 の精度の範囲は 64.4〜89.9% です。

モデルサイズ

オンディスクモデルのサイズは、そのパフォーマンスと精度によって異なります。サイズは、モバイル開発(アプリのダウンロードサイズに影響を与える可能性がある)や、ハードウェアで作業する(利用可能なストレージが制限される可能性がある)場合に重要です。

TensorFlow Lite 量子化 MobileNet モデルのサイズは、0.5〜3.4 Mb です。

その他の資料とリソース

画像分類に関連する概念の詳細については、次のリソースを使用してください。