画像分類

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

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

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

始めましょう

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

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

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

Android の例を見る

iOS の例を見る

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

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

モデルの説明

使い方

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

十分なトレーニング データ (多くの場合、ラベルごとに数百または数千の画像) が与えられると、画像分類モデルは、新しい画像がトレーニングされたクラスのいずれかに属するかどうかを予測することを学習できます。この予測プロセスは推論と呼ばれます。転移学習を使用して、既存のモデルを使用して画像の新しいクラスを識別することもできることに注意してください。転移学習には、非常に大規模なトレーニング データセットは必要ありません。

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

動物の種類確率
うさぎ0.07
ハムスター0.02
0.91

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

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

あいまいな結果

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

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

ラベル確率
うさぎ0.31
ハムスター0.35
0.34
モデルがあいまいな結果を頻繁に返す場合は、より正確な別のモデルが必要になる可能性があります。

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

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

用途と制限事項

TensorFlow Lite 画像分類モデルは、単一ラベルの分類に役立ちます。つまり、画像がどの単一ラベルを表す可能性が最も高いかを予測します。彼らは 1000 の画像クラスを認識するように訓練されています。クラスの完全なリストについては、モデル zip内のラベル ファイルを参照してください。新しいクラスを認識するようにモデルをトレーニングする場合は、 「モデルのカスタマイズ」を参照してください。次の使用例では、別のタイプのモデルを使用する必要があります。ターゲット デバイス上でスターター モデルを実行したら、さまざまなモデルを試して、パフォーマンス、精度、モデル サイズの最適なバランスを見つけることができます。

モデルのカスタマイズ

提供される事前トレーニング済みモデルは、1000 クラスの画像を認識するようにトレーニングされています。クラスの完全なリストについては、モデル zip内のラベル ファイルを参照してください。転移学習を使用してモデルを再トレーニングし、元のセットにないクラスを認識することもできます。たとえば、元のトレーニング データに木が存在しない場合でも、異なる種類の木の区別をするためにモデルを再トレーニングすることができます。これを行うには、トレーニングする新しいラベルごとにトレーニング画像のセットが必要になります。 TFLite Model Makerを使用して転移学習を実行する方法、またはTensorFlow を使用して花を認識するコードラボで転移学習を実行する方法を学びます。

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

モデルのパフォーマンスは、モデルが特定のハードウェア上で推論を実行するのにかかる時間の観点から測定されます。時間が短いほど、モデルは高速になります。必要なパフォーマンスはアプリケーションによって異なります。リアルタイム ビデオのようなアプリケーションではパフォーマンスが重要になる可能性があり、次のフレームが描画されるまでの時間内に各フレームを分析することが重要になる場合があります (たとえば、30fps ビデオ ストリームでリアルタイム推論を実行するには、推論が 33 ミリ秒より高速である必要があります)。 。 TensorFlow Lite 量子化 MobileNet モデルのパフォーマンス範囲は 3.7 ミリ秒から 80.3 ミリ秒です。パフォーマンス ベンチマーク数値は、ベンチマーク ツールを使用して生成されます。
モデル名モデルサイズデバイスナピCPU
モバイルネット_V1_1.0_224_quant 4.3MBピクセル 3 (Android 10) 6ミリ秒13ミリ秒*
ピクセル 4 (Android 10) 3.3ミリ秒5ミリ秒*
iPhone XS(iOS 12.4.1) 11ミリ秒**

※糸は4本使用。

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

モデルの精度

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

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

TensorFlow Lite 量子化 MobileNet モデルのトップ 5 精度の範囲は 64.4 ~ 89.9% です。

モデルサイズ

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

TensorFlow Lite 量子化 MobileNet モデルのサイズの範囲は 0.5 ~ 3.4 MB です。

さらに詳しい資料とリソース

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