ディープ ラーニングを使用したオブジェクトの分類 (Classify Objects Using Deep Learning) (Image Analyst)

Image Analyst ライセンスで利用できます。

サマリー

入力ラスターとオプションのフィーチャクラスに対してトレーニング済みディープ ラーニング モデルを実行し、各入力オブジェクトまたはフィーチャにクラス ラベルまたはカテゴリ ラベルを割り当てたフィーチャクラスまたはテーブルを作成します。

このツールは、トレーニング済みのモデル情報を含んでいるモデル定義ファイルを必要とします。 モデルは、[ディープ ラーニング モデルのトレーニング (Train Deep Learning Model)] ツールを使用するか、TensorFlow、PyTorch、または Keras などのサードパーティのトレーニング ソフトウェアによって、トレーニングできます。 モデル定義ファイルには、Esri モデル定義 JSON ファイル (.emd) またはディープ ラーニング モデル パッケージを使用できます。モデル定義ファイルは、各オブジェクトを処理するために呼び出される Python ラスター関数のパス、およびトレーニング済みのバイナリ ディープ ラーニング モデル ファイルのパスを含む必要があります。

使用法

  • ArcGIS AllSource Python 環境に適切なディープ ラーニング フレームワークの Python API (PyTorch または Keras) をインストールする必要があります。インストールしない場合、Esri モデル定義ファイルをツールに追加するとエラーが発生します。 Esri モデル定義ファイルを作成したユーザーが、適切なフレームワーク情報を提供する必要があります。

    ArcGIS AllSource のディープ ラーニング フレームワークを使用するようにコンピューターを設定するには、「ArcGIS 用のディープ ラーニング フレームワークのインストール」をご参照ください。

  • このツールは、サードパーティのディープ ラーニング Python API (PyTorch や Keras など) を呼び出し、指定された Python ラスター関数を使用して、各オブジェクトを処理します。

  • Esri Python ラスター関数の GitHub ページに、このツールの使用例が記載されています。 また、次の例と手順に従って、カスタム Python モジュールを記述することもできます。

  • [モデル定義] パラメーター値には、Esri モデル定義 JSON ファイル (.emd)、JSON 文字列、またはディープ ラーニング モデル パッケージ (.dlpk) を指定することができます。 JSON 文字列は、このツールがサーバーで使用されている場合に便利で、*.emd ファイルをアップロードする代わりに JSON 文字列を貼り付けることができます。 *.dlpk ファイルはローカルに格納する必要があります。

  • 次のサンプルは、.emd ファイルが対象です。

    {
        "Framework": "Keras",
        "ModelConfiguration":"KerasClassifier",
        "ModelFile":"C:\\DeepLearning\\Damage_Classification_Model_V7.h5",
        "ModelType":"ObjectClassification",
        "ImageHeight":256,
        "ImageWidth":256,
        "ExtractBands":[0,1,2],
        "CropSizeFixed": 1,
        "BlackenAroundFeature": 1,
        "ImageSpaceUsed": "MAP_SPACE", 
        "Classes": [
        {
           "Value": 0,
           "Name": "Damaged",
           "Color": [255, 0, 0]
        },
        {
           "Value": 1,
           "Name": "Undamaged",
           "Color": [76, 230, 0]
        }
        ]
    }
  • CropSizeFixed プロパティは、各オブジェクト周辺のラスター タイルのトリミング モードを定義します。 値が 1 の場合、.emd ファイル内の ImageHeightImageWidth プロパティで定義される固定のラスター タイルが使用されることを意味します。 オブジェクトは、固定のタイル サイズ内の中心に配置されます。 値が 0 の場合は可変タイル サイズが使用され、ラスター タイルはオブジェクトを囲む最小の境界四角形でトリミングされます。

  • BlackenAroundFeature プロパティは、各オブジェクト外のピクセルをマスクするかどうかを指定します。 値が 0 の場合、オブジェクト外のピクセルはマスクされません。 値が 1 の場合、オブジェクト外のピクセルはマスクされます。

  • このツールは、マップ空間内またはピクセル空間内の入力画像を処理できます。 マップ空間内の画像は、マップベースの座標系です。 ピクセル空間内の画像は、未処理の画像空間内で、回転も変形もされません。 [ディープ ラーニング用のトレーニング データをエクスポート (Export Training Data For Deep Learning)] ツールでトレーニング データを生成するときに、[参照系] パラメーターを使用して参照系を指定できます。 モデルがサードパーティのトレーニング ソフトウェアでトレーニングされている場合は、ImageSpaceUsed パラメーターを使用して、参照系を *.emd ファイル内に指定する必要があります。 このパラメーターは、MAP_SPACE または PIXEL_SPACE に設定することができます。

  • 入力ラスターには、画像が添付された単一のラスター、複数のラスター、またはフィーチャクラスを使用できます。 添付ファイルの詳細については、「アタッチメントの追加または削除」をご参照ください。

  • バッチ サイズを大きくすると、ツールのパフォーマンスが向上しますが、バッチ サイズが増加するにつれて、使用されるメモリ量が増加します。 メモリ不足エラーが発生した場合は、より小さなバッチ サイズを使用してください。 batch_size 値を調整するには、[引数] パラメーターを使用します。

  • バッチ サイズは 1、4、9、16、25、64 などの平方数になります。 入力値が完全な平方数でない場合は、最も大きな平方数が使用されます。 たとえば、6 という値を指定した場合は、バッチ サイズが 4 に設定されます。

  • このツールの実行要件および発生する可能性のある問題の詳細については、「ディープ ラーニングに関するよくある質問」をご参照ください。

  • ディープ ラーニングの詳細については、「ArcGIS Image Analyst エクステンションを使用したディープ ラーニング

パラメーター

ラベル説明データ タイプ
入力ラスター

オブジェクトの分類に使用される入力画像。

この入力には、モザイク データセット、イメージ サービス、画像のフォルダー、または画像の添付ファイルを含むフィーチャクラス内の単一のラスターまたは複数のラスターを指定することができます。

Raster Dataset; Raster Layer; Mosaic Layer; Image Service; Map Server; Map Server Layer; Internet Tiled Layer; Folder; Feature Layer; Feature Class
出力分類済みオブジェクト フィーチャクラス

入力フィーチャクラスのオブジェクトまたはフィーチャを囲むジオメトリと、分類ラベルを格納するフィールドを含む出力フィーチャクラス。

Feature Class
モデル定義

[モデル定義] パラメーター値には、Esri モデル定義 JSON ファイル (.emd)、JSON 文字列、またはディープ ラーニング モデル パッケージ (.dlpk) を指定することができます。 JSON 文字列は、このツールがサーバーで使用されている場合に便利で、*.emd ファイルをアップロードする代わりに JSON 文字列を貼り付けることができます。 *.dlpk ファイルはローカルに格納する必要があります。

これには、ディープ ラーニング バイナリ モデル ファイルへのパス、使用される Python ラスター関数へのパス、および他のパラメーター (望ましいタイル サイズやゼロ詰めなど) が含まれます。

File; String
入力フィーチャ
(オプション)

分類されラベル付けされる各オブジェクトまたはフィーチャの位置を識別するポイント、ライン、またはポリゴン入力フィーチャクラス。 入力フィーチャクラスの各行は、単一のオブジェクトまたはフィーチャを表します。

入力フィーチャクラスが指定されない場合、各入力画像に分類対象の単一オブジェクトが含まれていると判断します。 入力画像が空間参照を使用する場合、このツールからの出力はフィーチャクラスとなり、各画像の範囲が各ラベル付きフィーチャクラスの境界ジオメトリとして使用されます。 入力画像が空間参照されていない場合、このツールからの出力は、各画像の画像 ID 値とクラス ラベルを含むテーブルとなります。

Feature Class; Feature Layer
クラス ラベル フィールド
(オプション)

出力フィーチャクラス内のクラスまたはカテゴリ ラベルを含むフィールドの名前。

フィールド名を指定しないと、出力フィーチャクラスに ClassLabel フィールドが生成されます。

String
処理モード
(オプション)

モザイク データセットまたはイメージ サービス内のすべてのラスター アイテムを処理する方法を指定します。 入力ラスターがモザイク データセットまたはイメージ サービスである場合、このパラメーターが適用されます。

  • モザイク画像として処理モザイク データセットまたはイメージ サービス内のすべてのラスター アイテムがモザイク化され、処理されます。 これがデフォルトです。
  • すべてのラスター アイテムを個別に処理モザイク データセットまたはイメージ サービス内のすべてのラスター アイテムが、個別の画像として処理されます。
String
引数
(オプション)

[モデル定義] パラメーターからの情報が、このパラメーターの設定に使用されます。 これらの引数はモデル アーキテクチャによって異なります。 ArcGIS でトレーニングされたモデルでサポートされているモデル引数を次に示します。 ArcGIS 事前トレーニング済みモデルとカスタム ディープ ラーニング モデルでは、このツールでサポートされている追加の引数を利用できることがあります。

  • batch_size - モデル推論の各ステップで処理された画像タイルの数。 これは、お使いのグラフィックス カードのメモリに応じて異なります。 この引数はすべてのモデル アーキテクチャで使用できます。
  • test_time_augmentation - 予測中にテスト時間の延長を実行します。 true の場合、入力画像の反転および回転バリアントの予測は、最終出力にマージされます。 この引数はすべてのモデル アーキテクチャで使用できます。
  • score_threshold - この信頼度スコアを上回る予測が、結果に追加されます。 可能な値の範囲は 0 ~ 1.0 です。 この引数はすべてのモデル アーキテクチャで使用できます。

Value Table
キャプション
(オプション)

出力フィーチャクラス内のテキストまたはキャプションを含むフィールドの名前。 このパラメーターは、画像キャプショナー モデルが使用される場合のみサポートされます。

フィールド名を指定しないと、出力フィーチャクラスに Caption フィールドが生成されます。

注意:

このパラメーターは [ジオプロセシング] ウィンドウには表示されません。 デフォルトのフィールド名を変更するには、[クラス ラベル フィールド] パラメーターを使用します。

String

ClassifyObjectsUsingDeepLearning(in_raster, out_feature_class, in_model_definition, {in_features}, {class_label_field}, {processing_mode}, {model_arguments}, {caption_field})
名前説明データ タイプ
in_raster

オブジェクトの分類に使用される入力画像。

この入力には、モザイク データセット、イメージ サービス、画像のフォルダー、または画像の添付ファイルを含むフィーチャクラス内の単一のラスターまたは複数のラスターを指定することができます。

Raster Dataset; Raster Layer; Mosaic Layer; Image Service; Map Server; Map Server Layer; Internet Tiled Layer; Folder; Feature Layer; Feature Class
out_feature_class

入力フィーチャクラスのオブジェクトまたはフィーチャを囲むジオメトリと、分類ラベルを格納するフィールドを含む出力フィーチャクラス。

Feature Class
in_model_definition

in_model_definition パラメーター値には、Esri モデル定義 JSON ファイル (.emd)、JSON 文字列、またはディープ ラーニング モデル パッケージ (.dlpk) を指定することができます。 JSON 文字列は、このツールがサーバーで使用されている場合に便利で、*.emd ファイルをアップロードする代わりに JSON 文字列を貼り付けることができます。 *.dlpk ファイルはローカルに格納する必要があります。

これには、ディープ ラーニング バイナリ モデル ファイルへのパス、使用される Python ラスター関数へのパス、および他のパラメーター (望ましいタイル サイズやゼロ詰めなど) が含まれます。

File; String
in_features
(オプション)

分類されラベル付けされる各オブジェクトまたはフィーチャの位置を識別するポイント、ライン、またはポリゴン入力フィーチャクラス。 入力フィーチャクラスの各行は、単一のオブジェクトまたはフィーチャを表します。

入力フィーチャクラスが指定されない場合、各入力画像に分類対象の単一オブジェクトが含まれていると判断します。 入力画像が空間参照を使用する場合、このツールからの出力はフィーチャクラスとなり、各画像の範囲が各ラベル付きフィーチャクラスの境界ジオメトリとして使用されます。 入力画像が空間参照されていない場合、このツールからの出力は、各画像の画像 ID 値とクラス ラベルを含むテーブルとなります。

Feature Class; Feature Layer
class_label_field
(オプション)

出力フィーチャクラス内のクラスまたはカテゴリ ラベルを含むフィールドの名前。

フィールド名を指定しないと、出力フィーチャクラスに ClassLabel フィールドが生成されます。

String
processing_mode
(オプション)

モザイク データセットまたはイメージ サービス内のすべてのラスター アイテムを処理する方法を指定します。 入力ラスターがモザイク データセットまたはイメージ サービスである場合、このパラメーターが適用されます。

  • PROCESS_AS_MOSAICKED_IMAGEモザイク データセットまたはイメージ サービス内のすべてのラスター アイテムがモザイク化され、処理されます。 これがデフォルトです。
  • PROCESS_ITEMS_SEPARATELYモザイク データセットまたはイメージ サービス内のすべてのラスター アイテムが、個別の画像として処理されます。
String
model_arguments
[model_arguments,...]
(オプション)

in_model_definition パラメーターからの情報が、このパラメーターのデフォルト値の設定に使用されます。 これらの引数はモデル アーキテクチャによって異なります。 ArcGIS でトレーニングされたモデルでサポートされているモデル引数を次に示します。 ArcGIS 事前トレーニング済みモデルとカスタム ディープ ラーニング モデルでは、このツールでサポートされている追加の引数を利用できることがあります。

  • batch_size - モデル推論の各ステップで処理された画像タイルの数。 これは、お使いのグラフィックス カードのメモリに応じて異なります。 この引数はすべてのモデル アーキテクチャで使用できます。
  • test_time_augmentation - 予測中にテスト時間の延長を実行します。 true の場合、入力画像の反転および回転バリアントの予測は、最終出力にマージされます。 この引数はすべてのモデル アーキテクチャで使用できます。
  • score_threshold - この信頼度スコアを上回る予測が、結果に追加されます。 可能な値の範囲は 0 ~ 1.0 です。 この引数はすべてのモデル アーキテクチャで使用できます。

Value Table
caption_field
(オプション)

出力フィーチャクラス内のテキストまたはキャプションを含むフィールドの名前。 このパラメーターは、画像キャプショナー モデルが使用される場合のみサポートされます。

フィールド名を指定しないと、出力フィーチャクラスに Caption フィールドが生成されます。

String

コードのサンプル

ClassifyObjectsUsingDeepLearning の例 1 (Python ウィンドウ)

次の例では、ラベル フィールドを含む新しいフィーチャクラスを生成して、画像内の破損した建物と破損していない建物を分類します。

# Import system modules  
import arcpy  
from arcpy.ia import *  
 
# Check out the ArcGIS Image Analyst extension license 
arcpy.CheckOutExtension("ImageAnalyst") 
 
# Execute 
ClassifyObjectsUsingDeepLearning("C:/Data/Input_Image.tif", 
	"C:/Data/MyProject.gdb/Classified_Results", "C:/Data/BuildingDamageClassifier.emd", 
	"C:/Data/building_footprints.shp","Class_Label", 
	"PROCESS_AS_MOSAICKED_IMAGE", "padding 0;batch_size 4")
ClassifyObjectsUsingDeepLearning の例 2 (スタンドアロン スクリプト)

次の例では、ラベル フィールドを含む新しいフィーチャクラスを生成して、画像内の破損した建物と破損していない建物を分類します。

# Import system modules  
import arcpy  
from arcpy.ia import *  
 
# Check out the ArcGIS Image Analyst extension license 
arcpy.CheckOutExtension("ImageAnalyst") 
 
# Define input parameters
in_raster = "C:/Classify_Objects/input_image.tif" 
out_feature_class = "C:/Classify_Objects/MyProject.gdb/classified_results" 
in_model_definition = "C:/Classify_Objects/BuildingDanmageClassifier.emd" 
in_features = "C:/Classify_Objects/building_footprints.shp" 
class_label_field = "Damaged_or_Undamaged"
model_arguments = "padding 0;batch_size 4"
process_all_raster_items = "PROCESS_AS_MOSAICKED_IMAGE"

# Execute 
ClassifyObjectsUsingDeepLearning(in_raster, out_feature_class, in_model_definition,
	in_features, class_label_field,  
	process_all_raster_items, model_arguments)