画像セグメンテーションは、デジタル画像を複数のセグメント (ピクセル (画像オブジェクト) の集合) に分割するプロセスです。セグメンテーションの目的は、画像の表示を簡素化したり、より有意義で分析しやすい形態に変更したりすることです。
次の画像は、Android での画像セグメンテーションの出力を示します。モデルは、高い精度で、対象オブジェクトにマスクを作成します。
はじめに
TensorFlow Lite Task Library のそのまま簡単に使用できる API を利用して、わずか数行のコードで画像セグメンテーションモデルを統合できます。また、TensorFlow Lite Interpreter Java API を使用して、モデルを統合することもできます。
以下の Android の例では、両方のメソッドをそれぞれ lib_task_api および lib_interpreter として実装しています。
Android 以外のプラットフォームを使用する場合、または、すでに TensorFlow Lite API に精通している場合は、画像セグメンテーション スターターモデルをダウンロードしてください。
スターターモデルをダウンロードする
モデルの説明
DeepLab は、セマンティック画像セグメンテーションの最先端のディープラーニングモデルであり、入力画像の各ピクセルにセマンティックラベル(例えば、人、犬、猫など)を割り当てることを目的としています。
使い方
セマンティック画像セグメンテーションは、画像の各ピクセルが特定のクラスに関連付けられているかどうかを予測します。これは、矩形の領域でオブジェクトを検出するオブジェクト検出、および画像全体を分類する画像分類とは対照的です。
現在の実装は、以下のような機能を備えています。
- DeepLabv1: Atrous 畳み込みを使用して解像度を明示的に制御し、深層畳み込みニューラルネットワーク内で特徴応答を計算します。
- DeepLabv2: Atrous 空間ピラミッドプーリング (ASPP) を使用して、複数のサンプリングレートと有効な視野でフィルタを用い、複数のスケールでオブジェクトをロバストにセグメント化します。
- DeepLabv3: ASPP モジュールを画像レベルの特徴 [5, 6] で拡張して、より広い範囲の情報を取得します。また、バッチ正規化 [7] パラメータをインクルードして、トレーニングを容易にします。特に、トレーニングと評価の際には、Atrous 畳み込みを適用し、それぞれ異なる出力ストライドで出力特徴を抽出します。これにより、出力ストライド = 16 で効率的にバッチ正規化トレーニングを行い、評価時には出力ストライド = 8 で高い性能を発揮することが可能になります。
- DeepLabv3+: DeepLabv3 を拡張し、特にオブジェクト境界に沿ってセグメンテーションの結果を洗練させる、シンプルかつ効果的なデコーダモジュールを追加しました。さらに、このエンコーダ/デコーダ構造では、Atrous 畳み込みで抽出されるエンコーダ特徴の解像度を任意に制御して、精度とランタイムをトレードオフすることができます。
パフォーマンスベンチマーク
パフォーマンスベンチマークの数値は、ここで説明するツールで生成されます。
モデル名 | モデルサイズ | デバイス | GPU | CPU |
---|---|---|---|---|
Deeplab v3 | 2.7 Mb | Pixel 3 (Android 10) | 16ms | 37ms* |
Pixel 4 (Android 10) | 20ms | 23ms* | ||
iPhone XS (iOS 12.4.1) | 16ms | 25ms** |
- 4 threads used.
** 最高のパフォーマンス結果を得るために、iPhone では 2 つのスレッドを使用。