画像セグメンタは、画像の各ピクセルが特定のクラスに関連付けられているかどうかを予測します。これは、矩形の領域でオブジェクトを検出するオブジェクト検出、および画像全体を分類する画像分類とは対照的です。画像セグメンタの詳細については、画像セグメンテーションの概要をご覧ください。
Task Library ImageSegmenter
API を使用して、カスタム画像セグメンタまたは事前トレーニングされたものをモデルアプリにデプロイします。
ImageSegmenter API の主な機能
回転、サイズ変更、色空間変換などの入力画像処理。
マップロケールのラベル付け。
カテゴリマスクと信頼マスクの 2 つの出力型。
表示用の色付きラベル。
サポートされている画像セグメンタモデル
次のモデルは、ImageSegmenter
API との互換性が保証されています。
モデルの互換性要件を満たすカスタムモデル。
Java で推論を実行する
Android アプリケーションでImageSegmenter
を使用する方法の例については、画像セグメンテーションリファレンスアプリを参照してください。
ステップ 1: Gradle の依存関係とその他の設定をインポートする
.tflite
モデルファイルを、モデルが実行される Android モジュールのアセットディレクトリにコピーします。ファイルを圧縮しないように指定し、TensorFlow Lite ライブラリをモジュールの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.1.0'
}
ステップ 2: モデルを使用する
// Initialization
ImageSegmenterOptions options = ImageSegmenterOptions.builder().setOutputType(OutputType.CONFIDENCE_MASK).build();
ImageSegmenter imageSegmenter = ImageSegmenter.createFromFileAndOptions(context, modelFile, options);
// Run inference
List<Segmentation> results = imageSegmenter.segment(image);
ImageSegmenter
を構成するその他のオプションについては、ソースコードと javadoc をご覧ください。
C++ で推論を実行する
注: C++ Task Library では、使いやすさを向上するために構築済みのバイナリを提供したり、ユーザーフレンドリーなワークフローを作成してソースコードから構築できるようしています。C++ API は変更される可能性があります。
// Initialization
ImageSegmenterOptions options;
options.mutable_model_file_with_metadata()->set_file_name(model_file);
std::unique_ptr<ImageSegmenter> image_segmenter = ImageSegmenter::CreateFromOptions(options).value();
// Run inference
const SegmentationResult result = image_segmenter->Segment(*frame_buffer).value();
ImageSegmenter
を構成するその他のオプションについては、ソースコードをご覧ください。
結果の例
これは、TensorFlow Hub で利用可能な一般的なセグメンテーションモデルである deeplab_v3 のセグメンテーション結果の例です。
Color Legend:
(r: 000, g: 000, b: 000):
index : 0
class name : background
(r: 128, g: 000, b: 000):
index : 1
class name : aeroplane
# (omitting multiple lines for conciseness) ...
(r: 128, g: 192, b: 000):
index : 19
class name : train
(r: 000, g: 064, b: 128):
index : 20
class name : tv
Tip: use a color picker on the output PNG file to inspect the output mask with
this legend.
セグメンテーションカテゴリマスクは次のようになります。
独自のモデルとテストデータを使用して、シンプルな ImageSegmenter 向け CLI デモツールをお試しください。
モデルの互換性要件
ImageSegmenter
API では、 TFLite モデルメタデータを持つ TFLite モデル が必要です。
入力画像テンソル (kTfLiteUInt8/kTfLiteFloat32)
- サイズ
[batch x height x width x channels]
の画像入力。 - バッチ推論はサポートされていません (
batch
は 1 である必要があります)。 - RGB 入力のみがサポートされています (
channels
は 3 である必要があります)。 - 型が kTfLiteFloat32 の場合、入力の正規化のためにメタデータに NormalizationOptions をアタッチする必要があります。
- サイズ
出力マスクテンソル: (kTfLiteUInt8/kTfLiteFloat32)
- テンソルサイズは
[batch x mask_height x mask_width x num_classes]
でbatch
は 1 である必要があります。mask_width
とmask_height
はモデルによって生成されたセグメンテーションマスクのサイズで、num_classes
は、モデルでサポートされているクラスの数です。 - TENSOR_AXIS_LABELS 型の AssociatedFile ラベルマップ (オプションですが推薦されます)。1 行に 1 つのラベルが含まれます。最初の AssociatedFile (存在する場合) は、結果の
label
フィールド (C++ではclass_name
と名付けられています) を入力ために使用されます。display_name
フィールドは、AssociatedFile (存在する場合) から入力されます。そのロケールは、作成時に使用されるImageSegmenterOptions
のdisplay_names_locale
フィールドと一致します (デフォルトでは「en (英語)」)。これらのいずれも使用できない場合、結果のindex
フィールドのみが入力されます。
- テンソルサイズは