Configuración de AutoML para entrenar modelos de Computer Vision

SE APLICA A:Extensión ML de la CLI de Azure v2 (actual)SDK de Python azure-ai-ml v2 (actual)

En este artículo, aprenderá a entrenar modelos de Computer Vision en datos de imagen con ML automatizado. Puede entrenar modelos mediante la extensión de la CLI de Azure Machine Learning v2 o el SDK de Python de Azure Machine Learning v2.

ML automatizado admite el entrenamiento de modelos para tareas de Computer Vision, como la clasificación de imágenes, la detección de objetos y la segmentación de instancias. La creación de modelos de AutoML para tareas de Computer Vision se admite actualmente a través del SDK de Python de Azure Machine Learning. Se puede acceder a las pruebas, modelos y salidas de experimentación resultantes desde la interfaz de usuario de Estudio de Azure Machine Learning. Obtenga más información sobre ML automatizado para tareas de Computer Vision en datos de imagen.

Requisitos previos

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

Selección de su tipo de tarea

ML automatizado para imágenes admite los siguientes tipos de tareas:

Tipo de tarea Sintaxis de trabajo de AutoML
clasificación de imágenes CLI v2: image_classification
SDK v2: image_classification()
clasificación de imágenes con varias etiquetas CLI v2: image_classification_multilabel
SDK v2: image_classification_multilabel()
detección de objetos de imagen CLI v2: image_object_detection
SDK v2: image_object_detection()
segmentación de instancias de imagen CLI v2: image_instance_segmentation
SDK v2: image_instance_segmentation()

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

Este tipo de tarea es un parámetro obligatorio y se puede establecer mediante la clave task.

Por ejemplo:

task: image_object_detection

Datos de entrenamiento y validación

Para generar modelos para Computer Vision, debe traer datos de imagen etiquetados como entrada para el entrenamiento del modelo en forma de MLTable. Puede crear un objeto MLTable a partir de datos de entrenamiento en formato JSONL.

Si los datos de entrenamiento están en un formato diferente (por ejemplo, Pascal VOC o COCO), puede aplicar los scripts auxiliares incluidos con los cuadernos de ejemplo para convertir los datos a JSONL. Obtenga más información sobre la preparación de datos para tareas de Computer Vision con ML automatizado.

Nota:

Los datos de entrenamiento deben tener al menos 10 imágenes para poder enviar un trabajo de ML automatizado.

Advertencia

La creación de MLTable a partir de datos en formato JSONL solo se admite mediante el SDK y la CLI para esta funcionalidad. En este momento no se admite la creación de MLTable a través de la interfaz de usuario.

Ejemplos de esquemas JSONL

La estructura del TabularDataset depende de la tarea que se vaya a realizar. Para los tipos de tareas de Computer Vision, consta de los siguientes campos:

Campo Descripción
image_url Contiene filepath como un objeto StreamInfo.
image_details La información de metadatos de imagen consta de alto, ancho y formato. Este campo es opcional y, por tanto, puede existir o no.
label Representación json de la etiqueta de imagen, basada en el tipo de tarea.

El siguiente código es un archivo JSONL de ejemplo para la clasificación de imágenes:

{
      "image_url": "azureml://subscriptions/<my-subscription-id>/resourcegroups/<my-resource-group>/workspaces/<my-workspace>/datastores/<my-datastore>/paths/image_data/Image_01.png",
      "image_details":
      {
          "format": "png",
          "width": "2230px",
          "height": "4356px"
      },
      "label": "cat"
  }
  {
      "image_url": "azureml://subscriptions/<my-subscription-id>/resourcegroups/<my-resource-group>/workspaces/<my-workspace>/datastores/<my-datastore>/paths/image_data/Image_02.jpeg",
      "image_details":
      {
          "format": "jpeg",
          "width": "3456px",
          "height": "3467px"
      },
      "label": "dog"
  }

El código siguiente es un archivo JSONL de ejemplo para la detección de objetos:

{
    "image_url": "azureml://subscriptions/<my-subscription-id>/resourcegroups/<my-resource-group>/workspaces/<my-workspace>/datastores/<my-datastore>/paths/image_data/Image_01.png",
    "image_details":
    {
        "format": "png",
        "width": "2230px",
        "height": "4356px"
    },
    "label":
    {
        "label": "cat",
        "topX": "1",
        "topY": "0",
        "bottomX": "0",
        "bottomY": "1",
        "isCrowd": "true",
    }
}
{
    "image_url": "azureml://subscriptions/<my-subscription-id>/resourcegroups/<my-resource-group>/workspaces/<my-workspace>/datastores/<my-datastore>/paths/image_data/Image_02.png",
    "image_details":
    {
        "format": "jpeg",
        "width": "1230px",
        "height": "2356px"
    },
    "label":
    {
        "label": "dog",
        "topX": "0",
        "topY": "1",
        "bottomX": "0",
        "bottomY": "1",
        "isCrowd": "false",
    }
}

Consumo de datos

Una vez que los datos estén en formato JSONL, puede crear un objeto MLTable de entrenamiento y validación, como se muestra a continuación.

paths:
  - file: ./train_annotations.jsonl
transformations:
  - read_json_lines:
        encoding: utf8
        invalid_lines: error
        include_path_column: false
  - convert_column_types:
      - columns: image_url
        column_type: stream_info

ML automatizado no impone ninguna restricción en el tamaño de los datos de entrenamiento o validación para las tareas de Computer Vision. El tamaño máximo del conjunto de datos solo está limitado por la capa de almacenamiento detrás del conjunto de datos (ejemplo: el almacén de blobs). No hay ningún número mínimo de imágenes o etiquetas. Sin embargo, se recomienda empezar con un mínimo de 10 a 15 muestras por etiqueta para asegurarse de que el modelo de salida está suficientemente entrenado. Cuanto mayor sea el número total de etiquetas o clases, más ejemplos necesitará por etiqueta.

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

Los datos de entrenamiento son un parámetro obligatorio y se pasan mediante la clave training_data. Opcionalmente, puede especificar otra tabla MLtable como datos de validación con la clave validation_data. Si no se especifican datos de validación, el 20 % de los datos de entrenamiento se usa para la validación de forma predeterminada, a menos que pase el argumento validation_data_size con un valor diferente.

El nombre de columna de destino es un parámetro necesario y se usa como destino para la tarea de ML supervisada. Se pasan mediante la clave target_column_name. Por ejemplo,

target_column_name: label
training_data:
  path: data/training-mltable-folder
  type: mltable
validation_data:
  path: data/validation-mltable-folder
  type: mltable

Proceso para ejecutar el experimento

Proporcione un destino de proceso para que ML automatizado realice el entrenamiento del modelo. Los modelos de ML automatizado para tareas de Computer Vision requieren SKU de GPU y son compatibles con las familias NC y ND. Se recomienda la serie NCsv3 (con GPU v100) para un entrenamiento más rápido. Un destino de proceso con una SKU de máquina virtual con varias GPU usa varias GPU para acelerar también el entrenamiento. Además, al configurar un destino de proceso con varios nodos, puede realizar un entrenamiento del modelo más rápido a través del paralelismo al ajustar hiperparámetros para el modelo.

Nota

Si usa una instancia de proceso como destino de proceso, asegúrese de que varios trabajos de AutoML no se ejecuten al mismo tiempo. Además, asegúrese de que max_concurrent_trials esté establecido en 1 en los límites de trabajo.

El destino de proceso se pasa mediante el parámetro compute. Por ejemplo:

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

compute: azureml:gpu-cluster

Configuración de experimentos

En el caso de las tareas de Computer Vision, puede iniciar pruebas individuales, barridos manuales o barridos automáticos. Se recomienda comenzar con un barrido automático para obtener un primer modelo de línea base. A continuación, puede probar las pruebas individuales con determinados modelos y configuraciones de hiperparámetros. Por último, con los barridos manuales, puede explorar varios valores de hiperparámetros cerca de los modelos y las configuraciones de hiperparámetros más prometedores. Este flujo de trabajo de tres pasos (barrido automático, pruebas individuales, barridos manuales) evita buscar la totalidad del espacio de hiperparámetros, que crece exponencialmente con el número de hiperparámetros.

Los barridos automáticos pueden producir resultados competitivos para muchos conjuntos de datos. Además, no requieren conocimientos avanzados de las arquitecturas de modelos, tienen en cuenta las correlaciones de los hiperparámetros y funcionan sin problemas en diferentes configuraciones de hardware. Todas estas razones hacen que sean una opción sólida para la fase temprana del proceso de experimentación.

Métrica principal

Un trabajo de entrenamiento de AutoML usa una métrica principal para la optimización del modelo y el ajuste de los hiperparámetros. La métrica principal depende del tipo de tarea, como se muestra a continuación; actualmente, no se admiten otros valores para la métrica principal.

Límites del trabajo

Puede controlar los recursos invertidos en el trabajo de entrenamiento de imágenes de AutoML especificando timeout_minutes, max_trials y max_concurrent_trials para el trabajo en la configuración del límite, tal como se describe en el ejemplo siguiente.

Parámetro Detalle
max_trials Parámetro para el número máximo de pruebas que se deben barrer. Debe ser un entero entre 1 y 1000. Al explorar solo los hiperparámetros predeterminados para una arquitectura de modelos determinada, establezca este parámetro en 1. El valor predeterminado es 1.
max_concurrent_trials Número máximo de pruebas que se pueden ejecutar simultáneamente. Si se especifica, el tiempo de espera debe ser un entero comprendido entre 1 y 100. El valor predeterminado es 1.

NOTA:
  • El número de pruebas simultáneas viene determinado por los recursos disponibles en el destino de proceso especificado. Asegúrese de que el destino de proceso tenga los recursos disponibles para la simultaneidad deseada.
  • max_concurrent_trials está limitado internamente a max_trials. Por ejemplo, si el usuario establece max_concurrent_trials=4 y max_trials=2, los valores se actualizarían internamente como max_concurrent_trials=2 y max_trials=2.
  • timeout_minutes Cantidad de tiempo en minutos antes de que se finalice el experimento. Si no se especifica ninguno, el valor de timeout_minutes predeterminado del experimento es de siete días (máximo de 60 días).

    SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

    limits:
      timeout_minutes: 60
      max_trials: 10
      max_concurrent_trials: 2
    

    Barrido automático de los hiperparámetros del modelo (modo automático)

    Importante

    Esta característica actualmente está en su versión preliminar pública. Esta versión preliminar se proporciona sin un contrato de nivel de servicio. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas. Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.

    Es difícil predecir la mejor arquitectura del modelo y los hiperparámetros para un conjunto de datos. Además, en algunos casos, el tiempo humano asignado a la optimización de hiperparámetros puede ser limitado. En el caso de las tareas de Computer Vision, puede especificar cualquier número de pruebas y el sistema determinará automáticamente la región del espacio de hiperparámetros que se va a barrer. No es necesario definir un espacio de búsqueda de hiperparámetros, un método de muestreo ni una directiva de terminación anticipada.

    Desencadenamiento del modo automático

    Puede ejecutar barridos automáticos estableciendo max_trials en un valor mayor que 1 en limits y no especificando el espacio de búsqueda, el método de muestreo ni la directiva de terminación. Llamamos a esta funcionalidad modo automático; consulte un ejemplo a continuación.

    SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

    limits:
      max_trials: 10
      max_concurrent_trials: 2
    

    Es probable que un número de pruebas entre 10 y 20 funcionen bien en muchos conjuntos de datos. Se puede establecer el presupuesto de tiempo para el trabajo de AutoML, pero se recomienda hacerlo solo si cada prueba puede tardar mucho tiempo.

    Advertencia

    En este momento, no se admite el inicio de barridos automáticos mediante la interfaz de usuario.

    Pruebas individuales

    En las pruebas individuales, el usuario controla directamente la arquitectura de modelos y los hiperparámetros. La arquitectura de modelos se pasa mediante el parámetro model_name.

    Arquitecturas de modelo admitidas

    En la tabla siguiente se resumen los modelos heredados admitidos para cada tarea de Computer Vision. El uso de solo estos modelos heredados desencadenará ejecuciones mediante el entorno de ejecución heredado (donde cada ejecución individual o prueba se envía como un trabajo de comando). Consulte a continuación la compatibilidad con HuggingFace y MMDetection.

    Tarea arquitecturas de modelos Sintaxis de literal de cadena
    default_model* indicado con *
    Clasificación de imágenes
    (varias clases y varias etiquetas)
    MobileNet: modelos ligeros para aplicaciones móviles
    ResNet: redes residuales
    ResNeSt: redes de atención dividida
    SE-ResNeXt50: redes de compresión y excitación
    ViT: redes de transformadores de visión
    mobilenetv2
    resnet18
    resnet34
    resnet50
    resnet101
    resnet152
    resnest50
    resnest101
    seresnext
    vits16r224 (pequeña)
    vitb16r224* (base)
    vitl16r224 (grande)
    Detección de objetos YOLOv5: modelo de detección de objetos de una fase
    Faster RCNN ResNet FPN: modelos de detección de objetos de dos fases
    RetinaNet ResNet FPN: desequilibrio de la clase de dirección con pérdida focal

    Nota: Consulte el hiperparámetro model_size para ver los tamaños de modelo YOLOv5.
    yolov5*
    fasterrcnn_resnet18_fpn
    fasterrcnn_resnet34_fpn
    fasterrcnn_resnet50_fpn
    fasterrcnn_resnet101_fpn
    fasterrcnn_resnet152_fpn
    retinanet_resnet50_fpn
    Segmentación de instancias MaskRCNN ResNet FPN maskrcnn_resnet18_fpn
    maskrcnn_resnet34_fpn
    maskrcnn_resnet50_fpn*
    maskrcnn_resnet101_fpn
    maskrcnn_resnet152_fpn

    Arquitecturas de modelos compatibles: HuggingFace y MMDetection (versión preliminar)

    Con el nuevo back-end que se ejecuta en canalizaciones de Azure Machine Learning, también puede usar cualquier modelo de clasificación de imágenes del Centro de HuggingFace que forme parte de la biblioteca de transformadores (como microsoft/beit-base-patch16-224), así como cualquier modelo de segmentación instancias o de detección de objetos de MMDetection Versión 3.1.0 Model Zoo (por ejemplo, atss_r50_fpn_1x_coco).

    Además de admitir cualquier modelo de transformadores de HuggingFace y MMDetection 3.1.0, también ofrecemos una lista de modelos mantenidos de estas bibliotecas en el registro azureml. Estos modelos mantenidos se han probado exhaustivamente y usan hiperparámetros predeterminados seleccionados a partir de una amplia prueba comparativa para garantizar un entrenamiento eficaz. En la tabla siguiente se resumen estos modelos mantenidos.

    Tarea arquitecturas de modelos Sintaxis de literal de cadena
    Clasificación de imágenes
    (varias clases y varias etiquetas)
    BEiT
    ViT
    DeiT
    SwinV2
    microsoft/beit-base-patch16-224-pt22k-ft22k
    google/vit-base-patch16-224
    facebook/deit-base-patch16-224
    microsoft/swinv2-base-patch4-window12-192-22k
    Detección de objetos Sparse R-CNN
    Deformable DETR
    VFNet
    YOLOF
    Swin
    mmd-3x-sparse-rcnn_r50_fpn_300-proposals_crop-ms-480-800-3x_coco
    mmd-3x-sparse-rcnn_r101_fpn_300-proposals_crop-ms-480-800-3x_coco
    mmd-3x-deformable-detr_refine_twostage_r50_16xb2-50e_coco
    mmd-3x-vfnet_r50-mdconv-c3-c5_fpn_ms-2x_coco
    mmd-3x-vfnet_x101-64x4d-mdconv-c3-c5_fpn_ms-2x_coco
    mmd-3x-yolof_r50_c5_8x8_1x_coco
    Segmentación de instancias Swin mmd-3x-mask-rcnn_swin-t-p4-w7_fpn_1x_coco

    Actualizamos constantemente la lista de modelos mantenidos. Puede obtener la lista más actualizada de los modelos mantenidos para una tarea determinada mediante el SDK de Python:

    credential = DefaultAzureCredential()
    ml_client = MLClient(credential, registry_name="azureml")
    
    models = ml_client.models.list()
    classification_models = []
    for model in models:
        model = ml_client.models.get(model.name, label="latest")
        if model.tags['task'] == 'image-classification': # choose an image task
            classification_models.append(model.name)
    
    classification_models
    

    Salida:

    ['google-vit-base-patch16-224',
     'microsoft-swinv2-base-patch4-window12-192-22k',
     'facebook-deit-base-patch16-224',
     'microsoft-beit-base-patch16-224-pt22k-ft22k']
    

    El uso de cualquier modelo HuggingFace o MMDetection desencadenará ejecuciones mediante componentes de canalización. Si se usan modelos heredados y HuggingFace/MMdetection, todas las ejecuciones o pruebas se desencadenarán mediante componentes.

    Además de controlar la arquitectura de modelos, también puede ajustar los hiperparámetros usados para el entrenamiento del modelo. Aunque muchos de los hiperparámetros expuestos son independientes del modelo, hay instancias en las que los hiperparámetros son específicos de la tarea o el modelo. Obtenga más información sobre los hiperparámetros disponibles para estas instancias.

    SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

    Si desea usar los valores de hiperparámetros predeterminados para una arquitectura determinada (por ejemplo, yolov5), puede especificarlos mediante la clave model_name en la sección training_parameters. Por ejemplo,

    training_parameters:
        model_name: yolov5
    

    Barrido manual de los hiperparámetros del modelo

    Al entrenar modelos de Computer Vision, el rendimiento del modelo depende en gran medida de los valores de hiperparámetro seleccionados. A menudo, es posible que desee optimizar los hiperparámetros para obtener un rendimiento óptimo. En el caso de las tareas de Computer Vision, puede barrer los hiperparámetros para encontrar la configuración óptima para el modelo. Esta característica aplica las funcionalidades de ajuste de hiperparámetros en Azure Machine Learning. Aprenda a ajustar los hiperparámetros.

    SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

    search_space:
      - model_name:
          type: choice
          values: [yolov5]
        learning_rate:
          type: uniform
          min_value: 0.0001
          max_value: 0.01
        model_size:
          type: choice
          values: [small, medium]
    
      - model_name:
          type: choice
          values: [fasterrcnn_resnet50_fpn]
        learning_rate:
          type: uniform
          min_value: 0.0001
          max_value: 0.001
        optimizer:
          type: choice
          values: [sgd, adam, adamw]
        min_size:
          type: choice
          values: [600, 800]
    

    Definir el espacio de búsqueda de parámetros

    Puede definir las arquitecturas de modelos y los hiperparámetros para barrido en el espacio de parámetros. Puede especificar una única arquitectura de modelos o varias.

    Métodos de muestreo para el barrido

    Al realizar el barrido de hiperparámetros, debe especificar el método de muestreo que se usará para el barrido en el espacio de parámetros definido. Actualmente, se admiten los siguientes métodos de muestreo con el parámetro sampling_algorithm:

    Tipo de muestreo Sintaxis de trabajo de AutoML
    Muestreo aleatorio random
    Muestreo de cuadrícula grid
    Muestreo bayesiano bayesian

    Nota:

    Actualmente solo el muestreo aleatorio y de cuadrícula admiten espacios condicionales de hiperparámetros.

    Directivas de terminación anticipada

    Puede terminar de forma automática las pruebas con un bajo rendimiento con la ayuda de una directiva de terminación anticipada. La terminación anticipada mejora la eficacia computacional, lo que ahorra recursos de proceso que, de lo contrario, se habrían invertido en pruebas menos prometedoras. ML automatizado para imágenes admite las siguientes directivas de terminación anticipada mediante el parámetro early_termination. Si no se especifica ninguna directiva de terminación, todas las pruebas se ejecutan hasta su finalización.

    Directiva de terminación anticipada Sintaxis de trabajo de AutoML
    Directiva de bandidos CLI v2: bandit
    SDK v2: BanditPolicy()
    Directiva de mediana de detención CLI v2: median_stopping
    SDK v2: MedianStoppingPolicy()
    Directiva de selección de truncamiento CLI v2: truncation_selection
    SDK v2: TruncationSelectionPolicy()

    Obtenga más información sobre cómo configurar la directiva de terminación anticipada para el barrido de hiperparámetros.

    Nota

    Para obtener un ejemplo completo de configuración de barrido, consulte este tutorial.

    Puede configurar todos los parámetros relacionados con el barrido, como se muestra en el ejemplo siguiente.

    SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

    sweep:
      sampling_algorithm: random
      early_termination:
        type: bandit
        evaluation_interval: 2
        slack_factor: 0.2
        delay_evaluation: 6
    

    Configuración fija

    Puede pasar valores o parámetros fijos que no cambian durante el barrido del espacio de parámetros como se muestra en el siguiente ejemplo.

    SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

    training_parameters:
      early_stopping: True
      evaluation_frequency: 1
    

    Aumento de datos

    En general, el rendimiento del modelo de aprendizaje profundo a menudo puede mejorar con más datos. El aumento de datos es una técnica práctica para ampliar el tamaño y la variabilidad de los datos de un conjunto de datos que ayuda a evitar el sobreajuste y a mejorar la capacidad de generalización del modelo en datos no vistos. ML automatizado aplica diferentes técnicas de aumento de datos en función de la tarea de Computer Vision, antes de proporcionar las imágenes de entrada al modelo. Actualmente, no existe ningún hiperparámetro expuesto para controlar los aumentos de datos.

    Tarea Conjunto de datos afectado Técnicas de aumento de datos aplicadas
    Clasificación de imágenes (varias clases y varias etiquetas) Formación


    Validación y prueba
    Cambio de tamaño y recorte aleatorios, volteo horizontal, vibración de color (brillo, contraste, saturación y matiz), normalización mediante la media y la desviación estándar de ImageNet por canal


    Cambio de tamaño, recorte central, normalización
    Detección de objetos, segmentación de instancias Formación

    Validación y prueba
    Recorte aleatorio alrededor de rectángulos delimitadores, expansión, volteo horizontal, normalización, cambio de tamaño


    Normalización, cambio de tamaño
    Detección de objetos mediante yolov5 Formación

    Validación y prueba
    Mosaico, afín aleatorio (rotación, traslación, escala, distorsión), volteo horizontal


    Cambio de tamaño de formato letterbox

    Actualmente, los aumentos definidos anteriormente se aplican de forma predeterminada para un ML automatizado para el trabajo de imagen. Para proporcionar control sobre las aumentos, ML automatizado para imágenes expone a continuación dos marcas para desactivar determinados aumentos. Actualmente, estas marcas solo se admiten para las tareas de segmentación de instancias y detección de objetos.

    1. apply_mosaic_for_yolo: esta marca solo es específica del modelo Yolo. Si se establece en False, se desactiva el aumento de datos de mosaico que se aplica en el tiempo de entrenamiento.
    2. apply_automl_train_augmentations: si esta marca se establece en False, se desactiva el aumento aplicado durante el tiempo de entrenamiento para los modelos de segmentación de instancias y detección de objetos. Para obtener aumentos, consulte los detalles en la tabla anterior.
      • En el caso de los modelos de segmentación de instancias y el modelo de detección de objetos que no son Yolo, esta marca solamente desactiva los tres primeros aumentos. Por ejemplo: Recorte aleatorio alrededor de rectángulos delimitadores, expansión, volteo horizontal. Los aumentos de normalización y cambio de tamaño se siguen aplicando independientemente de esta marca.
      • Para el modelo Yolo, esta marca desactiva los aumentos de afinidad aleatoria y volteo horizontal.

    Estas dos marcas se admiten a través de advanced_settings en training_parameters y se pueden controlar de la siguiente manera.

    SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

    training_parameters:
      advanced_settings: >
        {"apply_mosaic_for_yolo": false}
    
    training_parameters:
      advanced_settings: >
        {"apply_automl_train_augmentations": false}
    

    Tenga en cuenta que estas dos marcas son independientes entre sí y también se pueden usar en combinación con la siguiente configuración.

    training_parameters:
     advanced_settings: >
       {"apply_automl_train_augmentations": false, "apply_mosaic_for_yolo": false}
    

    En nuestros experimentos, encontramos que estos aumentos ayudan al modelo a generalizar mejor. Por lo tanto, cuando estos aumentos se desactivan, se recomienda a los usuarios combinarlos con otros aumentos sin conexión para obtener mejores resultados.

    Entrenamiento incremental (opcional)

    Una vez realizado el trabajo de entrenamiento, puede optar por seguir entrenando el modelo si carga el punto de control del modelo entrenado. Puede usar el mismo conjunto de datos u otro diferente para el entrenamiento incremental. Si está satisfecho con el modelo, puede optar por detener el entrenamiento y usar el modelo actual.

    Pasar el punto de control a través del identificador de trabajo

    Puede pasar el id. del trabajo desde el que quiere cargar el punto de control.

    SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

    training_parameters:
      checkpoint_run_id : "target_checkpoint_run_id"
    

    Envío del trabajo de AutoML

    SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

    Para enviar el trabajo de AutoML, ejecute el siguiente comando de la CLI v2 con la ruta de acceso al archivo .yml, el nombre del área de trabajo, el grupo de recursos y el id. de suscripción.

    az ml job create --file ./hello-automl-job-basic.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
    

    Salidas y métricas de evaluación

    Los trabajos de entrenamiento de ML automatizado generan archivos de modelo de salida, métricas de evaluación, registros y artefactos de implementación, como el archivo de puntuación y el archivo de entorno. Estos archivos y métricas se pueden ver en la pestaña salidas y registros y métricas de los trabajos secundarios.

    Sugerencia

    Compruebe cómo navegar a los resultados del trabajo en la sección Visualización de los resultados de los trabajos.

    Para obtener definiciones y ejemplos de las métricas y los gráficos de rendimiento que se proporcionan en cada trabajo, consulte Evaluación de los resultados del experimento de aprendizaje automático automatizado.

    Registrar e implementar el modelo

    Una vez que se ha completado el trabajo, puede registrar el modelo que se creó a partir de la mejor evaluación (la configuración que dio lugar a la mejor métrica principal). Puede registrar el modelo después de descargarlo o bien al especificar la ruta de acceso "azureml" con el jobid correspondiente. Nota: cuando desee cambiar la configuración de inferencia que se describe a continuación, deberá descargar el modelo y cambiar settings.json, así como registrarse con la carpeta del modelo actualizada.

    Obtención de la mejor prueba

    SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

    CLI example not available, please use Python SDK.
    

    Registre el modelo

    Registre el modelo mediante la ruta de acceso "azureml" o bien mediante la que se ha descargado localmente.

    SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

     az ml model create --name od-fridge-items-mlflow-model --version 1 --path azureml://jobs/$best_run/outputs/artifacts/outputs/mlflow-model/ --type mlflow_model --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
    

    Después de registrar el modelo que quiere usar, puede implementarlo mediante el punto de conexión en línea administrado deploy-managed-online-endpoint

    Configuración del punto de conexión en línea

    SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

    $schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
    name: od-fridge-items-endpoint
    auth_mode: key
    

    Creación del punto de conexión

    Con el elemento MLClient creado anteriormente, creamos el punto de conexión en el área de trabajo. Este comando inicia la creación del punto de conexión y devuelve una respuesta de confirmación mientras continúa la creación del punto de conexión.

    SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

    az ml online-endpoint create --file .\create_endpoint.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
    

    Configuración de la implementación en línea

    Una implementación es un conjunto de recursos necesarios para hospedar el modelo que realiza la inferencia real. Crearemos una implementación para nuestro punto de conexión mediante la clase ManagedOnlineDeployment. Puede usar las SKU de máquina virtual de CPU o GPU para el clúster de implementación.

    SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

    name: od-fridge-items-mlflow-deploy
    endpoint_name: od-fridge-items-endpoint
    model: azureml:od-fridge-items-mlflow-model@latest
    instance_type: Standard_DS3_v2
    instance_count: 1
    liveness_probe:
        failure_threshold: 30
        success_threshold: 1
        timeout: 2
        period: 10
        initial_delay: 2000
    readiness_probe:
        failure_threshold: 10
        success_threshold: 1
        timeout: 10
        period: 10
        initial_delay: 2000 
    

    Creación de la implementación

    Con el elemento MLClient creado anteriormente, ahora crearemos la implementación en el área de trabajo. Este comando iniciará la creación de la implementación y devolverá una respuesta de confirmación mientras continúa la creación de la implementación.

    SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

    az ml online-deployment create --file .\create_deployment.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
    

    Actualización del tráfico:

    La implementación actual está establecida para recibir un 0 % de tráfico de manera predeterminada. Puede establecer el porcentaje de tráfico que debe recibir la implementación actual. La suma de porcentajes de tráfico de todas las implementaciones con un punto de conexión no debe superar el 100 %.

    SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

    az ml online-endpoint update --name 'od-fridge-items-endpoint' --traffic 'od-fridge-items-mlflow-deploy=100' --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
    

    Como alternativa, también puede implementar el modelo desde la interfaz de usuario de Estudio de Azure Machine Learning. Vaya al modelo que quiere implementar en la pestaña Modelos del trabajo de ML automatizado y seleccione Implementar e Implementar en el punto de conexión en tiempo real .

    Screenshot of how the Deployment page looks like after selecting the Deploy option..

    Este es el aspecto de la página de revisión. Se puede seleccionar el tipo de instancia, el recuento de instancias y establecer el porcentaje de tráfico para la implementación actual.

    Screenshot of how the top of review page looks like after selecting the options to deploy.. Screenshot of how the bottom of review page looks like after selecting the options to deploy..

    Actualización de la configuración de inferencia

    En el paso anterior, se ha descargado un archivo mlflow-model/artifacts/settings.json del mejor modelo. que se puede usar para actualizar la configuración de inferencia antes de registrar el modelo. Aunque se recomienda usar los mismos parámetros que el entrenamiento para obtener el mejor rendimiento.

    Cada una de las tareas (y algunos modelos) tiene un conjunto de parámetros. De forma predeterminada, usamos los mismos valores para los parámetros que se usaron durante el entrenamiento y la validación. Dependiendo del comportamiento que necesitemos al usar el modelo para la inferencia, podemos cambiar estos parámetros. A continuación puede encontrar una lista de parámetros para cada tipo de tarea y modelo.

    Tarea Nombre de parámetro Valor predeterminado
    Clasificación de imágenes (varias clases y varias etiquetas) valid_resize_size
    valid_crop_size
    256
    224
    Detección de objetos min_size
    max_size
    box_score_thresh
    nms_iou_thresh
    box_detections_per_img
    600
    1333
    0,3
    0.5
    100
    Detección de objetos con yolov5 img_size
    model_size
    box_score_thresh
    nms_iou_thresh
    640
    medio
    0,1
    0.5
    Segmentación de instancias min_size
    max_size
    box_score_thresh
    nms_iou_thresh
    box_detections_per_img
    mask_pixel_score_threshold
    max_number_of_polygon_points
    export_as_image
    image_type
    600
    1333
    0,3
    0.5
    100
    0.5
    100
    Falso
    JPG

    Para obtener una descripción detallada sobre los hiperparámetros específicos de la tarea, consulte Hiperparámetros para tareas de Computer Vision en aprendizaje automático automatizado.

    Si desea usar la colocación en mosaico y desea controlar su comportamiento, están disponibles los parámetros tile_grid_size, tile_overlap_ratio y tile_predictions_nms_thresh. Para más información sobre estos parámetros, consulte Entrenamiento de un modelo de detección de objetos pequeños mediante AutoML.

    Prueba de la implementación

    Consulte esta sección Prueba de la implementación para probar la implementación y visualizar las detecciones del modelo.

    Generación de explicaciones para las predicciones

    Importante

    Esta configuración se encuentra actualmente en versión preliminar pública. Se proporciona sin un contrato de nivel de servicio. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas. Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.

    Advertencia

    La explicación del modelo solo se admite para la clasificación de varias clases y la clasificación de varias etiquetas.

    Algunas de las ventajas de usar inteligencia artificial explicable (XAI) con AutoML para imágenes son:

    • Mejora la transparencia en las predicciones de los modelos de visión complejos.
    • Ayuda a los usuarios a comprender las características o píxeles importantes de la imagen de entrada que contribuyen a las predicciones del modelo.
    • Ayuda en la solución de problemas de los modelos.
    • Ayuda a detectar el sesgo.

    Explicaciones

    Las explicaciones son las ponderaciones o atribuciones de características dadas a cada píxel de la imagen de entrada en función de su contribución a la predicción del modelo. Cada ponderación puede ser negativa (correlacionada negativamente con la predicción) o positiva (correlacionada positivamente con la predicción). Estas atribuciones se calculan con respecto a la clase predicha. Para la clasificación de varias clases, se genera exactamente una matriz de atribución de tamaño [3, valid_crop_size, valid_crop_size] por cada muestra, mientras que para la clasificación de varias etiquetas, se genera una matriz de atribución de tamaño [3, valid_crop_size, valid_crop_size] para cada etiqueta o clase predicha para cada muestra.

    Mediante el uso de la IA explicable en AutoML para imágenes en el punto de conexión implementado, los usuarios pueden obtener visualizaciones de las explicaciones (atribuciones superpuestas en una imagen de entrada) o atribuciones ( matriz multidimensional de tamaño [3, valid_crop_size, valid_crop_size]) para cada imagen. Además de las visualizaciones, los usuarios también pueden obtener matrices de atribuciones para obtener más control sobre las explicaciones (como generar visualizaciones personalizadas mediante las atribuciones o el escrutinio de los segmentos de atribuciones). Todos los algoritmos de explicación usan imágenes cuadradas recortadas de tamaño valid_crop_size para generar atribuciones.

    Las explicaciones se pueden generar desde el punto de conexión en línea o el punto de conexión por lotes. Una vez finalizada la implementación, este punto de conexión se puede usar para generar las explicaciones de las predicciones. En las implementaciones en línea, asegúrese de pasar el parámetro request_settings = OnlineRequestSettings(request_timeout_ms=90000) a ManagedOnlineDeployment y establecer request_timeout_ms en su valor máximo para evitar problemas de tiempo de espera al generar las explicaciones (consulte la sección Registro e implementación del modelo). Algunos de los métodos de explicación (XAI), como xrai, consumen más tiempo (especialmente para la clasificación de varias etiquetas, ya que es necesario generar atribuciones o visualizaciones para cada etiqueta predicha). Por lo tanto, se recomienda el uso de cualquier instancia de GPU para obtener explicaciones más rápidas. Para obtener más información sobre el esquema de entrada y salida para generar explicaciones, consulte la documentación del esquema.

    Se admiten los siguientes algoritmos de explicación de última generación en AutoML para imágenes:

    En la tabla siguiente, se describen los parámetros de ajuste específicos del algoritmo de explicación para XRAI y gradientes integrados. La retropropagación guiada y GradCAM guiado no requieren el ajuste de ningún parámetro.

    Algoritmo de inteligencia artificial explicable (XAI) Parámetros específicos del algoritmo Valores predeterminados
    xrai 1. n_steps: número de pasos utilizados por el método de aproximación. Un mayor número de pasos lleva a mejores aproximaciones de las atribuciones (explicaciones). El intervalo de n_steps es [2, inf), pero el rendimiento de las atribuciones comienza a converger después de 50 pasos.
    Optional, Int

    2. xrai_fast: indica si se va a usar una versión más rápida de XRAI. Si es True, el tiempo de cálculo de las explicaciones es más rápido, pero conlleva explicaciones menos precisas (atribuciones).
    Optional, Bool
    n_steps = 50
    xrai_fast = True
    integrated_gradients 1. n_steps: número de pasos utilizados por el método de aproximación. Un mayor número de pasos lleva a mejores atribuciones (explicaciones). El intervalo de n_steps es [2, inf), pero el rendimiento de las atribuciones comienza a converger después de 50 pasos.
    Optional, Int

    2. approximation_method: método para aproximar la integral. Los métodos de aproximación disponibles son riemann_middle y gausslegendre.
    Optional, String
    n_steps = 50
    approximation_method = riemann_middle

    Internamente, el algoritmo XRAI usa gradientes integrados. Por lo tanto, se requiere el parámetro n_steps tanto para los gradientes integrados como para XRAI. Un mayor número de pasos consume más tiempo para aproximar las explicaciones y puede dar lugar a problemas de tiempo de espera en el punto de conexión en línea.

    Se recomienda utilizar los algoritmos XRAI > GradCAM guiado > Gradientes integrados > Retropropagación guiada para obtener mejores explicaciones, mientras que se recomienda Retropropagación guiada > GradCAM guiado > Gradientes integrados > XRAI para obtener explicaciones más rápidas, en el orden especificado.

    Una solicitud de ejemplo al punto de conexión en línea tiene un aspecto similar al siguiente. Esta solicitud genera explicaciones cuando se establece model_explainability en True. La siguiente solicitud genera visualizaciones y atribuciones con una versión más rápida del algoritmo XRAI con 50 pasos.

    import base64
    import json
    
    def read_image(image_path):
        with open(image_path, "rb") as f:
            return f.read()
    
    sample_image = "./test_image.jpg"
    
    # Define explainability (XAI) parameters
    model_explainability = True
    xai_parameters = {"xai_algorithm": "xrai",
                      "n_steps": 50,
                      "xrai_fast": True,
                      "visualizations": True,
                      "attributions": True}
    
    # Create request json
    request_json = {"input_data": {"columns":  ["image"],
                                   "data": [json.dumps({"image_base64": base64.encodebytes(read_image(sample_image)).decode("utf-8"),
                                                        "model_explainability": model_explainability,
                                                        "xai_parameters": xai_parameters})],
                                   }
                    }
    
    request_file_name = "sample_request_data.json"
    
    with open(request_file_name, "w") as request_file:
        json.dump(request_json, request_file)
    
    resp = ml_client.online_endpoints.invoke(
        endpoint_name=online_endpoint_name,
        deployment_name=deployment.name,
        request_file=request_file_name,
    )
    predictions = json.loads(resp)
    

    Para más información sobre cómo generar explicaciones, consulte Repositorio de cuadernos de GitHub de ejemplos de aprendizaje automático automatizado.

    Interpretación de las visualizaciones

    El punto de conexión implementado devuelve una cadena de imagen codificada en base 64 si model_explainability y visualizations se han establecido en True. Descodifique la cadena en base 64 como se describe en los cuadernos o utilice el código siguiente para descodificar y visualizar las cadenas de imagen en base 64 en la predicción.

    import base64
    from io import BytesIO
    from PIL import Image
    
    def base64_to_img(base64_img_str):
        base64_img = base64_img_str.encode("utf-8")
        decoded_img = base64.b64decode(base64_img)
        return BytesIO(decoded_img).getvalue()
    
    # For Multi-class classification:
    # Decode and visualize base64 image string for explanations for first input image
    # img_bytes = base64_to_img(predictions[0]["visualizations"])
    
    # For  Multi-label classification:
    # Decode and visualize base64 image string for explanations for first input image against one of the classes
    img_bytes = base64_to_img(predictions[0]["visualizations"][0])
    image = Image.open(BytesIO(img_bytes))
    

    En la imagen siguiente, se describe la visualización de las explicaciones de una imagen de entrada de ejemplo. Screenshot of visualizations generated by XAI for AutoML for images.

    La figura en base 64 descodificada tiene cuatro secciones de imagen dentro de una cuadrícula de 2x2.

    • La imagen de la esquina superior izquierda (0, 0) es la imagen de entrada recortada.
    • La imagen de la esquina superior derecha (0, 1) es el mapa térmico de las atribuciones en una escala de colores bgyw (azul, verde, amarillo, blanco), donde la contribución de los píxeles blancos en la clase predicha es la más alta y los píxeles azules son la más baja.
    • La imagen de la esquina inferior izquierda (1, 0) es el mapa térmico de atribuciones combinado con la imagen de entrada recortada.
    • La imagen de la esquina inferior derecha (1, 1) es la imagen de entrada recortada con el 30 % superior de los píxeles en función de las puntuaciones de las atribuciones.

    Interpretación de las atribuciones

    El punto de conexión implementado devuelve las atribuciones si model_explainability y attributions se han establecido en True. Para más información, consulte los cuadernos de clasificación de varias clases y de clasificación de varias etiquetas.

    Estas atribuciones proporcionan más control a los usuarios para generar visualizaciones personalizadas o para hacer un escrutinio de las puntuaciones de las atribuciones en el nivel de píxel. El fragmento de código siguiente describe una manera de generar visualizaciones personalizadas mediante una matriz de atribuciones. Para obtener más información sobre el esquema de las atribuciones para la clasificación de varias clases y la clasificación de varias etiquetas, consulte la documentación del esquema.

    Use los valores exactos de valid_resize_size y valid_crop_size del modelo seleccionado para generar las explicaciones (los valores predeterminados son 256 y 224 respectivamente). El código siguiente utiliza la funcionalidad de visualización de Captum para generar visualizaciones personalizadas. Los usuarios pueden utilizar cualquier otra biblioteca para generar visualizaciones. Para obtener más información, consulte las utilidades de visualización de Captum.

    import colorcet as cc
    import numpy as np
    from captum.attr import visualization as viz
    from PIL import Image
    from torchvision import transforms
    
    def get_common_valid_transforms(resize_to=256, crop_size=224):
    
        return transforms.Compose([
            transforms.Resize(resize_to),
            transforms.CenterCrop(crop_size)
        ])
    
    # Load the image
    valid_resize_size = 256
    valid_crop_size = 224
    sample_image = "./test_image.jpg"
    image = Image.open(sample_image)
    # Perform common validation transforms to get the image used to generate attributions
    common_transforms = get_common_valid_transforms(resize_to=valid_resize_size,
                                                    crop_size=valid_crop_size)
    input_tensor = common_transforms(image)
    
    # Convert output attributions to numpy array
    
    # For Multi-class classification:
    # Selecting attribution matrix for first input image
    # attributions = np.array(predictions[0]["attributions"])
    
    # For  Multi-label classification:
    # Selecting first attribution matrix against one of the classes for first input image
    attributions = np.array(predictions[0]["attributions"][0])
    
    # visualize results
    viz.visualize_image_attr_multiple(np.transpose(attributions, (1, 2, 0)),
                                      np.array(input_tensor),
                                      ["original_image", "blended_heat_map"],
                                      ["all", "absolute_value"],
                                      show_colorbar=True,
                                      cmap=cc.cm.bgyw,
                                      titles=["original_image", "heatmap"],
                                      fig_size=(12, 12))
    

    Conjuntos de datos de gran tamaño

    Si usa AutoML para entrenar en conjuntos de datos grandes, hay algunas opciones experimentales que pueden resultar útiles.

    Importante

    Esta configuración se encuentra actualmente en versión preliminar pública. Se proporciona sin un contrato de nivel de servicio. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas. Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.

    Entrenamiento con varias GPU y varios nodos

    De manera predeterminada, cada modelo se entrena en una sola máquina virtual. Si el entrenamiento de un modelo tarda demasiado tiempo, el uso de máquinas virtuales que contienen varias GPU puede ayudar. El tiempo para entrenar un modelo en conjuntos de datos debería disminuir más o menos en proporción lineal respecto del número de GPU usadas. (Por ejemplo, un modelo se debería entrenar aproximadamente dos veces más rápido en una máquina virtual con dos GPU en comparación con hacerlo en una máquina virtual con una GPU). Si el tiempo para entrenar un modelo sigue siendo alto en una máquina virtual con varias GPU, puede aumentar el número de máquinas virtuales que se usan para entrenar cada modelo. Al igual que ocurre con el entrenamiento con varias GPU, el tiempo para entrenar un modelo en conjuntos de datos grandes también debería disminuir más o menos en proporción lineal respecto del número de máquinas virtuales usadas. Al entrenar un modelo en varias máquinas virtuales, asegúrese de usar una SKU de proceso que admita InfiniBand para obtener los mejores resultados. Para configurar el número de máquinas virtuales que se usan para entrenar un modelo único, establezca la propiedad node_count_per_trial del trabajo de AutoML.

    SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

    properties:
      node_count_per_trial: "2"
    

    Streaming de archivos de imagen desde el almacenamiento

    De manera predeterminada, todos los archivos de imagen se descargan en el disco antes del entrenamiento del modelo. Si el tamaño de los archivos de imagen es mayor que el espacio disponible en disco, se produce un error en el trabajo. En lugar de descargar todas las imágenes en el disco, puede seleccionar transmitir los archivos de imagen desde Azure Storage cuando sea necesario durante el entrenamiento. Los archivos de imagen se transmiten directamente desde Azure Storage a la memoria del sistema, sin pasar por el disco. Al mismo tiempo, se almacenan en caché en el disco tantos archivos como sea posible desde el almacenamiento a fin de minimizar el número de solicitudes al almacenamiento.

    Nota

    Si el streaming está habilitado, asegúrese de que la cuenta de Azure Storage se encuentra en la misma región que el proceso para minimizar el costo y la latencia.

    SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

    training_parameters:
      advanced_settings: >
        {"stream_image_files": true}
    

    Cuadernos de ejemplo

    Revise los ejemplos de código y los casos de uso detallados en el repositorio del cuaderno de GitHub para obtener muestras de aprendizaje automático automatizado. Consulte las carpetas con el prefijo "automl-image-" para ver ejemplos específicos de la creación de modelos de Computer Vision.

    Ejemplos de código

    Revise los ejemplos de código y los casos de uso detallados en el repositorio azureml-examples para obtener muestras de aprendizaje automático automatizado.

    Pasos siguientes