設定 AutoML,以使用 Python (第 1 版) 將電腦視覺模型定型

適用於:Python SDK azureml v1

重要

本文中的 Azure CLI 命令使用 azure-cli-ml 或 v1 (Azure Machine Learning 的擴充功能)。 v1 擴充功能的支援將於 2025 年 9 月 30 日終止。 您將能安裝並使用 v1 擴充功能,直到該日期為止。

建議您在 2025 年 9 月 30 日之前轉換至 ml 或 v2 擴充功能。 如需有關 v2 擴充功能的詳細資訊,請參閱 Azure ML CLI 擴充功能和 Python SDK v2

重要

此功能目前處於公開預覽。 在此提供的這個預覽版本並無服務等級協定。 可能不支援特定功能,或可能已經限制功能。 如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款

在本文中,您會了解如何使用 Azure Machine Learning Python SDK 中的自動化 ML,在影像資料上定型電腦視覺模型。

自動化 ML 支援對電腦視覺工作 (例如影像分類、物件偵測和執行個體分割) 進行模型定型。 目前透過 Azure Machine Learning Python SDK 支援編寫電腦視覺工作的 AutoML 模型。 可以從 Azure Machine Learning 工作室 UI 存取產生的實驗執行、模型和輸出。 深入了解影像資料上電腦視覺工作的自動化 ML

注意

電腦視覺工作的自動化 ML 只能透過 Azure Machine Learning Python SDK 來使用。

必要條件

選取您的工作類型

影像的自動化 ML 支援下列工作類型:

工作類型 AutoMLImage 設定語法
影像分類 ImageTask.IMAGE_CLASSIFICATION
影像分類多標籤 ImageTask.IMAGE_CLASSIFICATION_MULTILABEL
影像物件偵測 ImageTask.IMAGE_OBJECT_DETECTION
影像執行個體分割 ImageTask.IMAGE_INSTANCE_SEGMENTATION

此工作類型是必要參數,且會在 AutoMLImageConfig 中使用 task 參數進行傳遞。

例如:

from azureml.train.automl import AutoMLImageConfig
from azureml.automl.core.shared.constants import ImageTask
automl_image_config = AutoMLImageConfig(task=ImageTask.IMAGE_OBJECT_DETECTION)

定型及驗證資料

為了產生電腦視覺模型,您必須以 Azure Machine Learning TabularDataset 的形式,攜帶標記的影像資料作為模型定型的輸入。 您可以使用已從資料標記專案匯出TabularDataset,或使用您已標記的定型資料來建立新的 TabularDataset

如果您的定型資料採用不同的格式 (例如,pascal VOC 或 COCO),您可以套用範例筆記本隨附的協助程式指令碼,將資料轉換為 JSONL。 深入了解如何使用自動化 ML 來準備用於電腦視覺工作的資料

警告

僅支援使用 SDK 從 JSONL 格式的資料建立 TabularDatasets。 目前不支援透過 UI 建立資料集。 到目前為止,UI 無法辨識 StreamInfo 資料類型,這是用於 JSONL 格式映像 URL 的資料類型。

注意

定型資料集必須至少有 10 個映像,才能提交 AutoML 執行。

JSONL 結構描述範例

TabularDataset 的結構取決於手邊的工作。 對於電腦視覺工作類型,其是由下列欄位組成:

欄位 描述
image_url 包含檔案路徑作為 StreamInfo 物件
image_details 影像中繼資料資訊由高度、寬度和格式組成。 這是選擇性欄位,因此不一定存在。
label 影像標籤的 JSONL 表示法 (以工作類型為基礎)。

以下是用於影像分類的範例 JSONL 檔案:

{
      "image_url": "AmlDatastore://image_data/Image_01.png",
      "image_details":
      {
          "format": "png",
          "width": "2230px",
          "height": "4356px"
      },
      "label": "cat"
  }
  {
      "image_url": "AmlDatastore://image_data/Image_02.jpeg",
      "image_details":
      {
          "format": "jpeg",
          "width": "3456px",
          "height": "3467px"
      },
      "label": "dog"
  }

下列程式碼是用於物件偵測的範例 JSONL 檔案:

{
    "image_url": "AmlDatastore://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": "AmlDatastore://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",
    }
}

取用資料

一旦您的資料採用 JSONL 格式,您就可以使用下列程式碼來建立 TabularDataset:

ws = Workspace.from_config()
ds = ws.get_default_datastore()
from azureml.core import Dataset

training_dataset = Dataset.Tabular.from_json_lines_files(
        path=ds.path('odFridgeObjects/odFridgeObjects.jsonl'),
        set_column_types={'image_url': DataType.to_stream(ds.workspace)})
training_dataset = training_dataset.register(workspace=ws, name=training_dataset_name)

自動化 ML 不會對電腦視覺工作的定型或驗證資料大小強加任何限制。 資料集大小上限僅受資料集背後的儲存層所限制 (亦即 Blob 存放區)。 影像或標籤數目沒有下限。 不過,我們建議您從每個標籤最少 10-15 個範例開始,以確保輸出模型足以進行定型。 標籤/類別總數愈高,每個標籤所需的範例越多。

定型資料是必要的,而且會使用參數 training_data 傳入。 您可以選擇性地使用 AutoMLImageConfig 的 validation_data 參數,將另一個 TabularDataset 指定為要用於模型的驗證資料集。 如果未指定驗證資料集,則預設會使用 20% 的定型資料來進行驗證,除非您使用不同值傳遞 validation_size 引數。

例如:

from azureml.train.automl import AutoMLImageConfig
automl_image_config = AutoMLImageConfig(training_data=training_dataset)

計算要執行的實驗

提供自動化 ML 的計算目標來進行模型定型。 電腦視覺工作的自動化 ML 模型需要 GPU SKU 並支援 NC 和 ND 系列。 我們建議 NCsv3 系列 (含 v100 GPU),以進行更快的定型。 具有多重 GPU VM SKU 的計算目標會利用多個 GPU 來加速定型。 此外,當設定具有多個節點的計算目標時,您可以在調整模型的超參數時,透過平行處理原則進行更快的模型定型。

注意

如果您使用計算執行個體作為計算目標,請確定不會同時執行多項 AutoML 作業。 此外,請確定 max_concurrent_iterations 已在實驗資源中設定為 1。

計算目標是必要參數,且會使用 AutoMLImageConfigcompute_target 參數傳入。 例如:

from azureml.train.automl import AutoMLImageConfig
automl_image_config = AutoMLImageConfig(compute_target=compute_target)

設定模型演算法和超參數

透過電腦視覺工作的支援,您可以控制模型演算法和掃掠超參數。 這些模型演算法和超參數會傳入作為參數空間進行掃掠。

模型演算法是必要的,而且會透過 model_name 參數傳入。 您可以指定單一 model_name,或在多個之間選擇。

支援的模型演算法

下表摘要說明每一個電腦視覺工作支援的模型。

Task 模型演算法 字串常值語法
以 * 表示的 default_model*
影像分類
(多類別和多標籤)
MobileNet:行動應用程式的輕加權模型
ResNet:殘差網路
ResNeSt:分散注意力網路
SE-ResNeXt50:Squeeze-and-Excitation 網路
ViT:視覺轉換器網路
mobilenetv2
resnet18
resnet34
resnet50
resnet101
resnet152
resnest50
resnest101
seresnext
vits16r224 (小型)
vitb16r224* (基礎)
vitl16r224 (大型)
物件偵測 YOLOv5:一個階段物件偵測模型
更快的 RCNN ResNet FPN:兩個階段物件偵測模型
RetinaNet ResNet FPN:失去焦點的位址類別不平衡

注意:如需 YOLOv5 模型大小,請參閱model_size超參數
yolov5*
fasterrcnn_resnet18_fpn
fasterrcnn_resnet34_fpn
fasterrcnn_resnet50_fpn
fasterrcnn_resnet101_fpn
fasterrcnn_resnet152_fpn
retinanet_resnet50_fpn
執行個體分割 MaskRCNN ResNet FPN maskrcnn_resnet18_fpn
maskrcnn_resnet34_fpn
maskrcnn_resnet50_fpn*
maskrcnn_resnet101_fpn
maskrcnn_resnet152_fpn
maskrcnn_resnet50_fpn

除了控制模型演算法,您也可以調整用於模型定型的超參數。 雖然許多公開的超參數都與模型無關,但還是有一些執行個體,其中的超參數是工作特有的或模型特有的。 深入了解這些執行個體可用的超參數

資料增強

一般來說,深度學習模型效能通常可以藉由更多資料來改善。 資料增強是一種實用的技巧,可擴大資料集的資料大小和變化性,有助於防止過度學習,並改善模型對未見資料的一般化能力。 自動 ML 會根據電腦視覺工作,在將輸入影像饋送至模型之前,先套用不同的資料增強技巧。 目前,沒有任何公開的超參數可控制資料增強。

Task 受影響的資料集 已套用資料增強技巧
影像分類 (多類別和多標籤) 訓練


驗證和測試
隨機大小調整和裁切、水平翻轉、色彩抖動 (亮度、對比、飽和度和色調)、使用全通道 ImageNet 平均值和標準差的正規化


調整大小、置中裁切、正規化
物件偵測、執行個體分割 訓練

驗證和測試
隨機裁切周框方塊、展開、水平翻轉、正規化、調整大小


正規化、調整大小
使用 yolov5 的物件偵測 訓練

驗證和測試
馬賽克、隨機仿射 (旋轉、平移、縮放、剪切)、水平翻轉


上下黑邊調整大小

設定您的實驗設定

在進行大型掃掠以搜尋最佳模型和超參數之前,建議您先嘗試預設值來取得第一個基準。 接下來,您可以在掃掠多個模型及其參數之前,探索相同模型的多個超參數。 如此一來,您就可以採用更反覆的方法,因為有多個模型且每一個模型有多個超參數,所以搜尋空間會以指數方式成長,而您需要更多反覆運算以找出最佳設定。

如果想要將預設超參數值 (譬如 yolov5) 用於給定的演算法,您可以指定 AutoML 影像執行的設定,如下所示:

from azureml.train.automl import AutoMLImageConfig
from azureml.train.hyperdrive import GridParameterSampling, choice
from azureml.automl.core.shared.constants import ImageTask

automl_image_config_yolov5 = AutoMLImageConfig(task=ImageTask.IMAGE_OBJECT_DETECTION,
                                               compute_target=compute_target,
                                               training_data=training_dataset,
                                               validation_data=validation_dataset,
                                               hyperparameter_sampling=GridParameterSampling({'model_name': choice('yolov5')}),
                                               iterations=1)

一旦建置了基準模型,您可能就會想要將模型效能最佳化,以便掃掠模型演算法和超參數空間。 您可以使用下列範例設定來掃掠每個演算法的超參數、從 learning_rate、最佳化工具、lr_scheduler 等範圍的值中進行選擇,以產生具有最佳主要計量的模型。 如果未指定超參數值,則會針對指定的演算法使用預設值。

主要計量

用於模型最佳化和超參數調整的主要計量取決於工作類型。 目前不支援使用其他主要計量值。

  • accuracy 用於 IMAGE_CLASSIFICATION
  • iou 用於 IMAGE_CLASSIFICATION_MULTILABEL
  • mean_average_precision 用於 IMAGE_OBJECT_DETECTION
  • mean_average_precision 用於 IMAGE_INSTANCE_SEGMENTATION

實驗預算

您可以使用 experiment_timeout_hours,為您的 AutoML 視覺實驗選擇性地指定最長時間預算 - 實驗終止前的時間量,以小時為單位。 如果未指定,則預設實驗逾時為七天 (最長 60 天)。

為您的模型掃掠超參數

定型電腦視覺模型時,模型效能主要取決於選取的超參數值。 通常,您可能會想要調整超參數以取得最佳效能。 透過支援自動化 ML 中的電腦視覺工作,您可以掃掠超參數,以找出模型的最佳設定。 這項功能會在 Azure Machine Learning 中套用超參數調整功能。 了解如何調整超參數

定義參數搜尋空間

您可以定義要在參數空間中掃掠的模型演算法和超參數。

用於掃掠的取樣方法

在掃掠超參數時,您必須指定取樣方法,以用於掃掠定義的參數空間。 目前,參數支援下列取樣方法搭配 hyperparameter_sampling 參數:

注意

目前只有隨機和網格取樣支援條件式超參數空間。

提前終止原則

您可以使用提前終止原則自動結束效果不佳的執行。 提早終止可改善計算效率,節省原本花費在較不具期望設定上的計算資源。 影像的自動化 ML 支援使用 early_termination_policy 參數的下列提早終止原則。 如果未指定終止原則,則會執行所有設定,直到完成。

深入了解如何為您的超參數掃掠設定提早終止原則

掃掠的資源

您可以指定 iterationsmax_concurrent_iterations 進行掃掠,來控制超參數掃掠上所花費的資源。

參數 詳細資料
iterations 要掃掠的設定數目上限所需的參數。 必須為介於 1 到 1000 之間的整數。 只探索給定模型演算法的預設超參數時,請將此參數設定為 1。
max_concurrent_iterations 可同時執行的執行數目上限。 如果未指定,則會以平行方式啟動所有執行。 如果已指定,必須是介於 1 到 100 之間的整數。

注意:同時執行的數目會受限於指定計算目標中的可用資源。 請確保計算目標有資源可用於所需的並行作業。

注意

如需完整的掃掠設定範例,請參閱這個教學課程

引數

您可以將未在參數空間掃掠期間變更的固定設定或參數當作引數傳遞。 引數會以成對的名稱和數值傳遞,且名稱前面必須加上雙破折號。

from azureml.train.automl import AutoMLImageConfig
arguments = ["--early_stopping", 1, "--evaluation_frequency", 2]
automl_image_config = AutoMLImageConfig(arguments=arguments)

累加式定型 (選擇性)

完成定型執行之後,您可以選擇載入已定型的模型檢查點來進一步將模型定型。 您可以使用相同的資料集或不同的資料集進行累加式定型。

累加式定型有兩個可用的選項。 您可以在,

  • 傳遞您想要從中載入檢查點的執行識別碼。
  • 透過 FileDataset 傳遞檢查點。

透過執行識別碼傳遞檢查點

若要從所需的模型尋找執行識別碼,您可以使用下列程式碼。

# find a run id to get a model checkpoint from
target_checkpoint_run = automl_image_run.get_best_child()

若要透過執行識別碼傳遞檢查點,您必須使用 checkpoint_run_id 參數。

automl_image_config = AutoMLImageConfig(task='image-object-detection',
                                        compute_target=compute_target,
                                        training_data=training_dataset,
                                        validation_data=validation_dataset,
                                        checkpoint_run_id= target_checkpoint_run.id,
                                        primary_metric='mean_average_precision',
                                        **tuning_settings)

automl_image_run = experiment.submit(automl_image_config)
automl_image_run.wait_for_completion(wait_post_processing=True)

透過 FileDataset 傳遞檢查點

若要透過 FileDataset 傳遞檢查點,您必須使用 checkpoint_dataset_idcheckpoint_filename 參數。

# download the checkpoint from the previous run
model_name = "outputs/model.pt"
model_local = "checkpoints/model_yolo.pt"
target_checkpoint_run.download_file(name=model_name, output_file_path=model_local)

# upload the checkpoint to the blob store
ds.upload(src_dir="checkpoints", target_path='checkpoints')

# create a FileDatset for the checkpoint and register it with your workspace
ds_path = ds.path('checkpoints/model_yolo.pt')
checkpoint_yolo = Dataset.File.from_files(path=ds_path)
checkpoint_yolo = checkpoint_yolo.register(workspace=ws, name='yolo_checkpoint')

automl_image_config = AutoMLImageConfig(task='image-object-detection',
                                        compute_target=compute_target,
                                        training_data=training_dataset,
                                        validation_data=validation_dataset,
                                        checkpoint_dataset_id= checkpoint_yolo.id,
                                        checkpoint_filename='model_yolo.pt',
                                        primary_metric='mean_average_precision',
                                        **tuning_settings)

automl_image_run = experiment.submit(automl_image_config)
automl_image_run.wait_for_completion(wait_post_processing=True)

提交執行

AutoMLImageConfig 物件就緒時,即可提交實驗。

ws = Workspace.from_config()
experiment = Experiment(ws, "Tutorial-automl-image-object-detection")
automl_image_run = experiment.submit(automl_image_config)

輸出和評估計量

自動化 ML 定型執行會產生輸出模型檔案、評估計量、記錄與部署成品,例如評分檔案與環境檔案,您可以從子執行的輸出以及記錄和計量索引標籤檢視這些檔案。

提示

請檢查如何瀏覽至檢視作業結果區段中的執行結果。

如需每次執行所提供效能圖表與計量的定義和範例,請參閱評估自動化機器學習實驗結果

註冊和部署模型

一旦執行完成,您就可以註冊從最佳執行 (產生最佳主要計量的設定) 建立的模型

best_child_run = automl_image_run.get_best_child()
model_name = best_child_run.properties['model_name']
model = best_child_run.register_model(model_name = model_name, model_path='outputs/model.pt')

在註冊您想要使用的模型之後,您可以在 Azure 容器執行個體 (ACI)Azure Kubernetes Service (AKS) 上,將該模型部署為 Web 服務。 ACI 是測試部署的最佳選項,而 AKS 則更適合大規模的生產環境使用。

此範例會將模型部署為 AKS 中的 Web 服務。 若要在 AKS 中部署,首先建立 AKS 計算叢集,或使用現有的 AKS 叢集。 您可以針對您的部署叢集使用 GPU 或 CPU VM SKU。


from azureml.core.compute import ComputeTarget, AksCompute
from azureml.exceptions import ComputeTargetException

# Choose a name for your cluster
aks_name = "cluster-aks-gpu"

# Check to see if the cluster already exists
try:
    aks_target = ComputeTarget(workspace=ws, name=aks_name)
    print('Found existing compute target')
except ComputeTargetException:
    print('Creating a new compute target...')
    # Provision AKS cluster with GPU machine
    prov_config = AksCompute.provisioning_configuration(vm_size="STANDARD_NC6", 
                                                        location="eastus2")
    # Create the cluster
    aks_target = ComputeTarget.create(workspace=ws, 
                                      name=aks_name, 
                                      provisioning_configuration=prov_config)
    aks_target.wait_for_completion(show_output=True)

接下來,您可以定義推斷設定,描述如何設定包含模型的 Web 服務。 您可以在推斷設定中,使用定型執行的評分指令碼和環境。

from azureml.core.model import InferenceConfig

best_child_run.download_file('outputs/scoring_file_v_1_0_0.py', output_file_path='score.py')
environment = best_child_run.get_environment()
inference_config = InferenceConfig(entry_script='score.py', environment=environment)

然後,您可以將模型部署為 AKS Web 服務。

# Deploy the model from the best run as an AKS web service
from azureml.core.webservice import AksWebservice
from azureml.core.webservice import Webservice
from azureml.core.model import Model
from azureml.core.environment import Environment

aks_config = AksWebservice.deploy_configuration(autoscale_enabled=True,                                                    
                                                cpu_cores=1,
                                                memory_gb=50,
                                                enable_app_insights=True)

aks_service = Model.deploy(ws,
                           models=[model],
                           inference_config=inference_config,
                           deployment_config=aks_config,
                           deployment_target=aks_target,
                           name='automl-image-test',
                           overwrite=True)
aks_service.wait_for_deployment(show_output=True)
print(aks_service.state)

或者,您也可以從 Azure Machine Learning 工作室 UI 部署模型。 在自動化 ML 執行的 [模型] 索引標籤中,瀏覽至您想要部署的模型,然後選取 [部署]

Select model from the automl runs in studio UI

您可以在 [部署模型] 窗格中,設定模型部署端點名稱和要用於模型部署的推斷叢集。

Deploy configuration

更新推斷設定

在上一個步驟中,我們已將評分檔案 outputs/scoring_file_v_1_0_0.py 從最佳模型下載到本機 score.py 檔案,並使用其來建立 InferenceConfig 物件。 您可以修改此指令碼,以在下載了模型之後,並在建立 InferenceConfig 之前,視需要變更該模型特定的推斷設定。 例如,這是初始化評分檔案中模型的程式碼區段:

...
def init():
    ...
    try:
        logger.info("Loading model from path: {}.".format(model_path))
        model_settings = {...}
        model = load_model(TASK_TYPE, model_path, **model_settings)
        logger.info("Loading successful.")
    except Exception as e:
        logging_utilities.log_traceback(e, logger)
        raise
...

每個工作 (和某些模型) 在 model_settings 字典中都有一組參數。 根據預設,我們會針對定型和驗證期間所使用的參數使用相同的值。 我們可以變更這些參數,取決於使用模型進行推斷時所需的行為。 您可以在下方找到每個工作類型和模型的參數清單。

Task 參數名稱 預設
影像分類 (多類別和多標籤) valid_resize_size
valid_crop_size
256
224
物件偵測 min_size
max_size
box_score_thresh
nms_iou_thresh
box_detections_per_img
600
1333
0.3
0.5
100
使用 yolov5 的物件偵測 img_size
model_size
box_score_thresh
nms_iou_thresh
640
medium
0.1
0.5
執行個體分割 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
False
JPG

如需工作專有超參數的詳細描述,請參閱自動化機器學習中電腦視覺工作的超參數

如果您想要使用並排,並且想要控制並排行為,則可以使用下列參數:tile_grid_sizetile_overlap_ratiotile_predictions_nms_thresh。 如需這些參數的詳細資訊,請參閱使用 AutoML 定型小型物件偵測模型

Notebook 範例

自動化機器學習範例的 GitHub 筆記本存放庫中,檢閱詳細的程式碼範例和使用案例。 請使用前置詞 'image-' 檢查資料夾,以取得建置電腦視覺模型的特定範例。

下一步