ヘルプKaggleにTensorFlowグレートバリアリーフを保護チャレンジに参加

画像分類

画像が何を表しているかを識別するタスクは、画像分類と呼ばれます。画像分類モデルは、さまざまなクラスの画像を認識するようにトレーニングされています。たとえば、ウサギ、ハムスター、犬の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になるため、モデルがトレーニングされたクラスのいずれかに属するものとして画像が自信を持って認識されない場合、1つの値が大幅に大きくなることなく、確率がラベル全体に分散されることがあります。

たとえば、次の場合、結果があいまいであることを示している可能性があります。

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

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

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

用途と制限

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

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

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

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

モデルのパフォーマンスは、モデルが特定のハードウェアで推論を実行するのにかかる時間の観点から測定されます。時間が短いほど、モデルは高速になります。必要なパフォーマンスは、アプリケーションによって異なります。パフォーマンスは、次のフレームが描画される前に各フレームを分析することが重要なリアルタイムビデオなどのアプリケーションにとって重要な場合があります(たとえば、30 fpsのビデオストリームでリアルタイム推論を実行するには、推論が33msより高速である必要があります)。 。 TensorFlow Liteは、MobileNetモデルのパフォーマンス範囲を3.7ミリ秒から80.3ミリ秒に量子化しました。パフォーマンスベンチマークの数値は、ベンチマークツールを使用して生成されます
モデル名モデルサイズ端末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%の時間で画像を正しく分類することが期待できます。

ホストされているモデルリストは、トップ1およびトップ5の精度統計を提供します。 Top-1は、モデルの出力で最も高い確率で正しいラベルがラベルとして表示される頻度を示します。トップ5は、モデルの出力の5つの最も高い確率に正しいラベルが表示される頻度を示します。

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

モデルサイズ

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

TensorFlow Liteで量子化されたMobileNetモデルのサイズは、0.5〜3.4MBの範囲です。

さらなる読み物とリソース

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