Google I / Oの基調講演、製品セッション、ワークショップなどを見るプレイリストを見る

画像分類子を統合する

画像分類は、画像が何を表しているかを識別するための機械学習の一般的な使用法です。たとえば、特定の写真にどのような種類の動物が写っているのかを知りたい場合があります。画像が何を表すかを予測するタスクは、画像分類と呼ばれます。画像分類器は、さまざまなクラスの画像を認識するようにトレーニングされています。たとえば、ウサギ、ハムスター、犬の3種類の動物を表す写真を認識するようにモデルをトレーニングすることができます。画像分類器の詳細については、画像分類の概要を参照してください。

Task Library ImageClassifier APIを使用して、カスタム画像分類子または事前トレーニング済みの画像分類子をモバイルアプリにデプロイします。

ImageClassifierAPIの主な機能

  • 回転、サイズ変更、色空間変換などの入力画像処理。

  • 入力画像の関心領域。

  • ラベルマップロケール。

  • 結果をフィルタリングするためのスコアしきい値。

  • トップk分類結果。

  • 許可リストと拒否リストにラベルを付けます。

サポートされている画像分類モデル

以下のモデルは、 ImageClassifierとの互換性が保証されています。

Javaで推論を実行する

AndroidアプリでImageClassifierを使用する方法の例については、 画像分類リファレンスアプリを参照してください。

ステップ1:Gradleの依存関係とその他の設定をインポートする

.tfliteモデルファイルを、モデルが実行されるAndroidモジュールのassetsディレクトリにコピーします。ファイルを圧縮しないように指定し、TensorFlowLiteライブラリをモジュールのbuild.gradleファイルに追加します。

android {
    // Other settings

    // Specify tflite file should not be compressed for the app apk
    aaptOptions {
        noCompress "tflite"
    }

}

dependencies {
    // Other dependencies

    // Import the Task Vision Library dependency
    implementation 'org.tensorflow:tensorflow-lite-task-vision:0.2.0'
}

ステップ2:モデルを使用する

// Initialization
ImageClassifierOptions options = ImageClassifierOptions.builder().setMaxResults(1).build();
ImageClassifier imageClassifier = ImageClassifier.createFromFileAndOptions(context, modelFile, options);

// Run inference
List<Classifications> results = imageClassifier.classify(image);

ImageClassifierを構成するためのその他のオプションについては、 ソースコードとjavadocを参照してください。

C ++で推論を実行する

// Initialization
ImageClassifierOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_file);
std::unique_ptr<ImageClassifier> image_classifier = ImageClassifier::CreateFromOptions(options).value();

// Run inference
const ClassificationResult result = image_classifier->Classify(*frame_buffer).value();

ImageClassifierを構成するためのその他のオプションについては、 ソースコードを参照してください。

結果の例

鳥の分類子の分類結果の例を次に示します。

スズメ

Results:
  Rank #0:
   index       : 671
   score       : 0.91406
   class name  : /m/01bwb9
   display name: Passer domesticus
  Rank #1:
   index       : 670
   score       : 0.00391
   class name  : /m/01bwbt
   display name: Passer montanus
  Rank #2:
   index       : 495
   score       : 0.00391
   class name  : /m/0bwm6m
   display name: Passer italiae

独自のモデルとテストデータを使用して、ImageClassifier用のシンプルなCLIデモツールを試してみてください。

モデルの互換性要件

ImageClassifier APIは、必須のTFLiteモデルメタデータを持つTFLiteモデルを想定しています。 TensorFlow LiteメタデータライターAPIを使用して、画像分類子のメタデータを作成する例をご覧ください。

互換性のある画像分類モデルは、次の要件を満たす必要があります。

  • 入力画像テンソル(kTfLiteUInt8 / kTfLiteFloat32)

    • サイズ[batch x height x width x channels]画像入力。
    • バッチ推論はサポートされていません( batchは1である必要があります)。
    • RGB入力のみがサポートされています( channelsは3である必要があります)。
    • タイプがkTfLiteFloat32の場合、入力の正規化のためにNormalizationOptionsをメタデータに添付する必要があります。
  • 出力スコアテンソル(kTfLiteUInt8 / kTfLiteFloat32)

    • Nクラスと2次元または4次元のいずれか、つまり[1 x N]または[1 x 1 x 1 x N]

    • 1行に1つのラベルを含む、タイプTENSOR_AXIS_LABELSのAssociatedFile-sとしてのオプションの(ただし推奨される)ラベルマップ。最初のそのようなAssociatedFile(存在する場合)は、結果のlabelフィールド(C ++ではclass_nameという名前)に入力するために使用されます。 display_nameフィールドは、ロケールが作成時に使用されるImageClassifierOptions display_names_localeフィールド(デフォルトでは「en」、つまり英語)と一致するAssociatedFile(存在する場合)からImageClassifierOptionsされます。これらのいずれも使用できない場合は、結果のindexフィールドのみが入力されます。