Clasificar objetos con aprendizaje profundo (Image Analyst)

Disponible con licencia de Image Analyst.

Resumen

Ejecuta un modelo de aprendizaje profundo entrenado en un ráster de entrada y una clase de entidad opcional para generar una clase de entidad o tabla en la que cada objeto o entidad de entrada tenga asignada una etiqueta de clase o categoría.

Esta herramienta requiere un archivo de definición de modelo que contenga información del modelo entrenado. El modelo puede entrenarse usando la herramienta Entrenar un modelo de aprendizaje profundo o mediante software de entrenamiento de terceros como, por ejemplo, TensorFlow, PyTorch o Keras. El archivo de definición de modelo puede ser un archivo JSON de definición de modelo de Esri (.emd) o un paquete de modelo de aprendizaje profundo, y debe contener la ruta a la función ráster de Python que se llamará para procesar cada objeto y la ruta al archivo de modelo de aprendizaje profundo binario entrenado.

Uso

  • Debe instalar la API de Python de marco de aprendizaje profundo adecuada (PyTorch o Keras) en el entorno de Python de ArcGIS AllSource; de lo contrario, se producirá un error al agregar el archivo de definición de modelo de Esri a la herramienta. La persona que creó el archivo de definición del modelo de Esri debe proporcionar la información de marco adecuada.

    Para configurar su equipo para usar marcos de aprendizaje profundo en ArcGIS AllSource, consulte Instalar marcos de aprendizaje profundo para ArcGIS.

  • Esta herramienta llama a una API de Python de aprendizaje profundo de terceros (como TensorFlow, PyTorch o Keras) y usa la función ráster de Python especificada para procesar cada objeto.

  • En la página de GitHub sobre la función ráster de Esri de Python hay ejemplos de casos de uso de esta herramienta. También puede escribir módulos de Python personalizados siguiendo los ejemplos y las instrucciones.

  • El valor del parámetro Definición de modelo puede ser un archivo JSON de definición de modelo de Esri (.emd), una cadena de caracteres JSON o un paquete de modelo de aprendizaje profundo (.dlpk). Una cadena de caracteres JSON es útil cuando esta herramienta se utiliza en el servidor para pegar la cadena de caracteres JSON, en lugar de cargar el archivo .emd. El archivo .dlpk debe almacenarse localmente.

  • El siguiente ejemplo corresponde a un archivo .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]
        }
        ]
    }
  • La propiedad CropSizeFixed define el modo de corte de la tesela ráster alrededor de cada objeto. Un valor de 1 significa que se utilizará una tesela ráster fija, definida por las propiedades ImageHeight y ImageWidth del archivo .emd. El objeto se centra dentro del tamaño de tesela fijo. Un valor de 0 significa que se usará un tamaño de tesela variable en el que la tesela ráster se recorta usando el cuadro de delimitación más pequeño alrededor del objeto.

  • La propiedad BlackenAroundFeature especifica si los píxeles que están fuera de cada objeto se enmascararán. Un valor de 0 significa que los píxeles situados fuera del objeto no se enmascararán. Un valor de 1 significa que los píxeles situados fuera del objeto se enmascararán.

  • La herramienta puede procesar imágenes de entrada que estén en el espacio de mapa o en el espacio de píxeles. Las imágenes en el espacio de mapa se encuentran en un sistema de coordenadas basado en mapa. Las imágenes en el espacio de píxeles están en un espacio de imagen sin procesar, sin rotación ni distorsión. El sistema de referencia puede especificarse al generar los datos de entrenamiento en la herramienta Exportar datos de entrenamiento para aprendizaje profundo usando el parámetro Sistema de referencia. Si el modelo se entrena en un software de entrenamiento de terceros, el sistema de referencia debe especificarse en el archivo .emd usando el parámetro ImageSpaceUsed, que puede establecerse en MAP_SPACE o PIXEL_SPACE.

  • El ráster de entrada puede ser un ráster simple, varios rásteres o una clase de entidad con imágenes adjuntas. Para obtener más información sobre los adjuntos, consulte Agregar o eliminar archivos adjuntos.

  • El rendimiento de la herramienta puede mejorarse aumentando el tamaño del lote; sin embargo, conforme aumenta el tamaño del lote se utiliza más memoria. Si se produce un error de memoria insuficiente, utilice un tamaño de lote más pequeño. El valor batch_size puede ajustarse mediante el uso del parámetro Argumentos.

  • Los tamaños de lote son números cuadrados, como 1, 4, 9, 16, 25, 64, etc. Si el valor de entrada no es un número cuadrado, se utiliza el valor cuadrado más alto posible. Por ejemplo, si se especifica un valor de 6, el tamaño del lote se establece en 4.

  • Esta herramienta admite y utiliza varias GPU, si están disponibles. Para utilizar una GPU específica, determine el entorno Id. de GPU. Cuando el Id. de GPU no se define, la herramienta todas las GPU disponibles. Ésta es la opción predeterminada.

  • Para obtener información sobre los requisitos para ejecutar esta herramienta y los problemas que pueden presentarse, consulte Preguntas frecuentes sobre el aprendizaje profundo.

  • Para obtener más información sobre el aprendizaje profundo, consulte Aprendizaje profundo con la extensión ArcGIS Image Analyst.

Parámetros

EtiquetaExplicaciónTipo de datos
Ráster de entrada

La imagen de entrada que se utilizará para clasificar objetos.

La entrada puede ser un solo ráster, varios rásteres de un dataset de mosaico, un servicio de imágenes, una carpeta de imágenes o una clase de entidad con imágenes adjuntas.

Raster Dataset; Raster Layer; Mosaic Layer; Image Service; Map Server; Map Server Layer; Internet Tiled Layer; Folder; Feature Layer; Feature Class
Clase de entidad de objetos clasificados de salida

Clase de entidad de salida que contendrá geometrías que circunden los objetos o la entidad de la clase de entidad de entrada, así como un campo para almacenar la etiqueta de categorización.

Feature Class
Definición de modelo

El valor del parámetro Definición de modelo puede ser un archivo JSON de definición de modelo de Esri (.emd), una cadena de caracteres JSON o un paquete de modelo de aprendizaje profundo (.dlpk). Una cadena de caracteres JSON es útil cuando esta herramienta se utiliza en el servidor para pegar la cadena de caracteres JSON, en lugar de cargar el archivo .emd. El archivo .dlpk debe almacenarse localmente.

Contiene la ruta al archivo de modelo binario de aprendizaje profundo, la ruta a la función ráster de PythonPython que se va a usar y otros parámetros, como el tamaño de tesela preferido o el relleno.

File; String
Entidades de entrada
(Opcional)

Clase de entidad de entrada de puntos, líneas o polígonos que identifica la ubicación de cada objeto o entidad que se va a clasificar y etiquetar. Cada fila de la clase de entidad de entrada representa un único objeto o entidad.

Si no se proporciona ninguna clase de entidad de entrada, se presupone que cada imagen de entrada contiene un único objeto que se va a clasificar. Si las imágenes de entrada utilizan alguna referencia espacial, la salida de la herramienta es una clase de entidad en la que se utiliza la extensión de cada imagen como la geometría de delimitación para cada clase de entidad etiquetada. Si las imágenes de entrada no se referencian espacialmente, la salida de la herramienta es una tabla que contiene los valores de Id. de imagen y las etiquetas de clase de cada imagen.

Feature Class; Feature Layer
Campo de etiqueta de clase
(Opcional)

Nombre del campo que va a contener la etiqueta de clase o categoría en la clase de entidad de salida.

Si no se proporciona ningún nombre de campo, se generará un campo ClassLabel en la clase de entidad de salida.

String
Modo de procesamiento
(Opcional)

Especifica cómo se procesarán todos los elementos de ráster en un dataset de mosaico o un servicio de imágenes. Este parámetro se aplica si el ráster de entrada es un dataset de mosaico o un servicio de imágenes.

  • Procesar como imagen en mosaicoSe creará un mosaico con todos los elementos de ráster del dataset de mosaico o del servicio de imágenes y se procesarán. Esta es la opción predeterminada.
  • Procesar todos los elementos de ráster por separadoTodos los elementos de ráster del dataset de mosaico o del servicio de imágenes se procesarán como imágenes separadas.
String
Argumentos
(Opcional)

La información del parámetro Definición del modelo se utilizará para rellenar este parámetro. Estos argumentos varían en función de la arquitectura del modelo. Los siguientes son los argumentos de modelo admitidos para los modelos entrenados en ArcGIS. Los modelos preentrenados de ArcGIS y los modelos de aprendizaje profundo personalizados pueden tener argumentos adicionales compatibles con la herramienta.

  • batch_size: número de teselas de imágenes procesadas en cada paso de la inferencia del modelo. Esto depende de la memoria de la tarjeta gráfica. El argumento está disponible para todas las arquitecturas del modelo.
  • test_time_augmentation: aplica un aumento del tiempo de prueba durante la predicción. Si se establece en True, las predicciones de variantes rotadas y volteadas de la imagen de entrada se fusionarán en la salida final. El argumento está disponible para todas las arquitecturas del modelo.
  • score_threshold: las predicciones por encima de esta puntuación de confianza se incluyen en el resultado. Los valores permitidos son entre 0 y 1,0. El argumento está disponible para todas las arquitecturas del modelo.

Value Table
Leyenda
(Opcional)

Nombre del campo que va a contener el texto o la leyenda en la clase de entidad de salida. Este parámetro solo se admite cuando se utiliza un modelo de subtitulador de imágenes.

Si no se especifica ningún nombre de campo, se generará un campo Caption en la clase de entidad de salida.

Nota:

Este parámetro no aparecerá en el panel Geoprocesamiento. Para cambiar el nombre de campo predeterminado, utilice el parámetro Campo de etiqueta de clase.

String

ClassifyObjectsUsingDeepLearning(in_raster, out_feature_class, in_model_definition, {in_features}, {class_label_field}, {processing_mode}, {model_arguments}, {caption_field})
NombreExplicaciónTipo de datos
in_raster

La imagen de entrada que se utilizará para clasificar objetos.

La entrada puede ser un solo ráster, varios rásteres de un dataset de mosaico, un servicio de imágenes, una carpeta de imágenes o una clase de entidad con imágenes adjuntas.

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

Clase de entidad de salida que contendrá geometrías que circunden los objetos o la entidad de la clase de entidad de entrada, así como un campo para almacenar la etiqueta de categorización.

Feature Class
in_model_definition

El valor del parámetro in_model_definition puede ser un archivo JSON de definición de modelo de Esri (.emd), una cadena de caracteres JSON o un paquete de modelo de aprendizaje profundo (.dlpk). Una cadena de caracteres JSON es útil cuando esta herramienta se utiliza en el servidor para pegar la cadena de caracteres JSON, en lugar de cargar el archivo .emd. El archivo .dlpk debe almacenarse localmente.

Contiene la ruta al archivo de modelo binario de aprendizaje profundo, la ruta a la función ráster de PythonPython que se va a usar y otros parámetros, como el tamaño de tesela preferido o el relleno.

File; String
in_features
(Opcional)

Clase de entidad de entrada de puntos, líneas o polígonos que identifica la ubicación de cada objeto o entidad que se va a clasificar y etiquetar. Cada fila de la clase de entidad de entrada representa un único objeto o entidad.

Si no se proporciona ninguna clase de entidad de entrada, se presupone que cada imagen de entrada contiene un único objeto que se va a clasificar. Si las imágenes de entrada utilizan alguna referencia espacial, la salida de la herramienta es una clase de entidad en la que se utiliza la extensión de cada imagen como la geometría de delimitación para cada clase de entidad etiquetada. Si las imágenes de entrada no se referencian espacialmente, la salida de la herramienta es una tabla que contiene los valores de Id. de imagen y las etiquetas de clase de cada imagen.

Feature Class; Feature Layer
class_label_field
(Opcional)

Nombre del campo que va a contener la etiqueta de clase o categoría en la clase de entidad de salida.

Si no se proporciona ningún nombre de campo, se generará un campo ClassLabel en la clase de entidad de salida.

String
processing_mode
(Opcional)

Especifica cómo se procesarán todos los elementos de ráster en un dataset de mosaico o un servicio de imágenes. Este parámetro se aplica si el ráster de entrada es un dataset de mosaico o un servicio de imágenes.

  • PROCESS_AS_MOSAICKED_IMAGESe creará un mosaico con todos los elementos de ráster del dataset de mosaico o del servicio de imágenes y se procesarán. Esta es la opción predeterminada.
  • PROCESS_ITEMS_SEPARATELYTodos los elementos de ráster del dataset de mosaico o del servicio de imágenes se procesarán como imágenes separadas.
String
model_arguments
[model_arguments,...]
(Opcional)

La información del parámetro in_model_definition se utilizará para establecer los valores predeterminados de este parámetro. Estos argumentos varían en función de la arquitectura del modelo. Los siguientes son los argumentos de modelo admitidos para los modelos entrenados en ArcGIS. Los modelos preentrenados de ArcGIS y los modelos de aprendizaje profundo personalizados pueden tener argumentos adicionales compatibles con la herramienta.

  • batch_size: número de teselas de imágenes procesadas en cada paso de la inferencia del modelo. Esto depende de la memoria de la tarjeta gráfica. El argumento está disponible para todas las arquitecturas del modelo.
  • test_time_augmentation: aplica un aumento del tiempo de prueba durante la predicción. Si se establece en True, las predicciones de variantes rotadas y volteadas de la imagen de entrada se fusionarán en la salida final. El argumento está disponible para todas las arquitecturas del modelo.
  • score_threshold: las predicciones por encima de esta puntuación de confianza se incluyen en el resultado. Los valores permitidos son entre 0 y 1,0. El argumento está disponible para todas las arquitecturas del modelo.

Value Table
caption_field
(Opcional)

Nombre del campo que va a contener el texto o la leyenda en la clase de entidad de salida. Este parámetro solo se admite cuando se utiliza un modelo de subtitulador de imágenes.

Si no se especifica ningún nombre de campo, se generará un campo Caption en la clase de entidad de salida.

String

Muestra de código

Ejemplo 1 de ClassifyObjectsUsingDeepLearning (ventana de Python)

En este ejemplo se genera una nueva clase de entidad con un campo de etiqueta para clasificar edificios dañados y no dañados en una imagen.

# 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")
Ejemplo 2 de ClassifyObjectsUsingDeepLearning (script independiente)

En este ejemplo se genera una nueva clase de entidad con un campo de etiqueta para clasificar edificios dañados y no dañados en una imagen.

# 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)

Temas relacionados