適用対象:
Azure CLI ML 拡張機能 v2 (現行)
Python SDK azure-ai-ml v2 (現行)
この記事では、自動 ML を使用して画像データに対してコンピューター ビジョン モデルをトレーニングする方法について説明します。 モデルは、Azure Machine Learning CLI 拡張機能 v2 または Azure Machine Learning Python SDK v2 を使用してトレーニングできます。
自動 ML では、画像分類、物体検出、インスタンス セグメント化などの Computer Vision タスク用のモデル トレーニングがサポートされています。 現在、コンピューター ビジョン タスク用の AutoML モデルの作成は、Azure Machine Learning Python SDK を通じてサポートされています。 Azure Machine Learning Studio UI から、結果として得られる実験の試用版、モデル、出力にアクセスできます。 画像データに対する Computer Vision タスク用の自動 ML の詳細を確認します。
前提条件
適用対象:
Azure CLI ml 拡張機能 v2 (現行)
- Azure Machine Learning ワークスペース。 ワークスペースを作成するには、「ワークスペース リソースの作成」を参照してください。
-
CLI (v2) をインストールして設定します。必ず、
ml拡張機能をインストールしてください。
タスクの種類の選択
画像の自動 ML では、次のタスクの種類がサポートされています。
| タスクの種類 | AutoML ジョブの構文 |
|---|---|
| 画像分類 | CLI v2: image_classification SDK v2: image_classification() |
| 画像分類の複数ラベル | CLI v2: image_classification_multilabel SDK v2: image_classification_multilabel() |
| 画像の物体検出 | CLI v2: image_object_detection SDK v2: image_object_detection() |
| 画像インスタンスのセグメント化 | CLI v2: image_instance_segmentation SDK v2: image_instance_segmentation() |
適用対象:
Azure CLI ml 拡張機能 v2 (現行)
タスクの種類を必須パラメーターとして設定します。 このパラメーターを設定するには、 task キーを使用します。
次に例を示します。
task: image_object_detection
データをトレーニングして検証する
コンピューター ビジョン モデルを生成するには、モデル トレーニングの入力としてラベル付けされた画像データを MLTableの形式で取り込みます。
MLTable は JSONL 形式のトレーニング データから作成できます。
トレーニング データがパスカル VOC や COCO などの別の形式の場合は、サンプル ノートブックに含まれているヘルパー スクリプトを使用して、データを JSONL に変換できます。 詳細については、「 自動 ML を使用したコンピューター ビジョン タスクのデータの準備」を参照してください。
注
AutoML ジョブを送信するには、トレーニング データに少なくとも 10 個の画像が必要です。
警告
この機能では、SDK と CLI では、JSONL 形式のデータからの MLTable の作成がサポートされています。 現時点では、UI を使用した MLTable の作成はサポートされていません。
JSONL スキーマのサンプル
TabularDataset の構造は、手元のタスクによって異なります。 Computer Vision タスクの種類の場合、次のフィールドで構成されます。
| フィールド | 説明 |
|---|---|
image_url |
StreamInfo オブジェクトとしてファイルパスが含まれます |
image_details |
画像メタデータ情報は、高さ、幅、および形式で構成されます。 このフィールドは省略可能です。 |
label |
タスクの種類に基づく画像ラベルの JSON 表現。 |
次のコードは、画像分類のサンプル JSONL ファイルです:
{
"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"
}
次のコードは、物体検出のサンプル JSONL ファイルです。
{
"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",
}
}
データの使用
データを JSONL 形式に変換した後、次の例に示すように、トレーニングファイルと検証 MLTable ファイルを作成します。
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 では、Computer Vision タスク用のトレーニングまたは検証データのサイズに制約はありません。 データセットの背後にあるストレージ レイヤー (BLOB ストアなど) は、データセットの最大サイズを設定します。 画像またはラベルの最小数はありません。 ただし、ラベルあたり少なくとも 10 ~ 15 個のサンプルから始めて、出力モデルが十分にトレーニングされていることを確認します。 ラベルまたはクラスの合計数が多いほど、ラベルごとに必要なサンプルが多くなります。
適用対象:
Azure CLI ml 拡張機能 v2 (現行)
training_data キーを使用して、必要なトレーニング データ パラメーターを渡します。 必要に応じて、 validation_data キーを使用して、検証データとして別の MLTable を指定します。 検証データを指定しない場合は、別の値で引数 validation_data_size 渡さない限り、トレーニング データの 20% が既定で検証に使用されます。
target_column_name キーを使用して、必要なターゲット列名パラメーターを渡します。 このパラメーターは、監視対象 ML タスクのターゲットとして使用します。 たとえば、次のように入力します。
target_column_name: label
training_data:
path: data/training-mltable-folder
type: mltable
validation_data:
path: data/validation-mltable-folder
type: mltable
実験を実行するために計算する
モデル トレーニングを実施する自動 ML のコンピューティング ターゲットを指定します。 Computer Vision タスク用の自動 ML モデルでは、GPU SKU が必要であり、NC ファミリと ND ファミリがサポートされています。 トレーニングを高速化するには、NCsv3 シリーズ (v100 GPU を含む) を使用します。 マルチ GPU VM SKU を使用するコンピューティング ターゲットで、複数の GPU を利用することでもトレーニングが高速化されます。 さらに、複数のノードでコンピューティング ターゲットを設定する場合に、モデルのハイパーパラメーターを調整するときに、並列処理を使用してモデルのトレーニングを高速化できます。
注
コンピューティング 先として コンピューティング インスタンス を使用している場合は、複数の AutoML ジョブが同時に実行されないようにします。 また、max_concurrent_trialsでが 1 に設定されていることを確認します。
compute パラメーターを使用して計算ターゲットを渡します。 次に例を示します。
適用対象:
Azure CLI ml 拡張機能 v2 (現行)
compute: azureml:gpu-cluster
実験を構成する
コンピューター ビジョン タスクの場合は、個々の 試用版、 手動スイープ、または 自動スイープを起動できます。 自動スイープから始めて、最初のベースライン モデルを取得します。 次に、特定のモデルとハイパーパラメーター構成で個々の試用版を試します。 最後に、手動スイープを使用して、より有望なモデルとハイパーパラメーター構成の近くにある複数のハイパーパラメーター値を調べることができます。 この 3 つのステップ ワークフロー (自動スイープ、個々の試行、手動スイープ) により、ハイパーパラメーターの数が指数関数的に増加するハイパーパラメーター空間全体の検索を回避できます。
自動スイープを使用すると、多くのデータセットで競争力のある結果が得られます。 さらに、モデル アーキテクチャに関する高度な知識は必要ありません。 ハイパーパラメーターの相関関係を考慮に入れ、異なるハードウェア セットアップ間でシームレスに動作します。 これらすべての理由により、実験プロセスの初期段階で強力なオプションになります。
主要メトリック
AutoML トレーニング ジョブは、モデルの最適化とハイパーパラメーターのチューニングにプライマリ メトリックを使用します。 プライマリ メトリックは、次の一覧に示すように、タスクの種類によって異なります。 その他の主要メトリック値は現在サポートされていません。
ジョブの制限
次の例で説明するように、制限設定でジョブの timeout_minutes、 max_trials、および max_concurrent_trials を指定することで、AutoML Image トレーニング ジョブに費やされるリソースを制御できます。
| パラメーター | Detail |
|---|---|
max_trials |
スイープする試行の最大数のパラメーター。 1 ~ 1,000 の整数である必要があります。 特定のモデル アーキテクチャの既定のハイパーパラメーターのみを調べる場合は、このパラメーターを 1 に設定します。 既定値は 1 です。 |
max_concurrent_trials |
同時に実行される試用版の最大数。 指定する場合は、1 ~ 100 の整数にする必要があります。 既定値は 1 です。 注: max_concurrent_trials は内部的に max_trials に制限されます。 たとえば、 max_concurrent_trials=4 と max_trials=2を設定した場合、値は max_concurrent_trials=2 および max_trials=2として内部的に更新されます。 |
timeout_minutes |
実験が終了するまでの時間 (分単位)。 値を指定しない場合、既定の実験timeout_minutesは 7 日間 (最大 60 日間) です。 |
適用対象:
Azure CLI ml 拡張機能 v2 (現行)
limits:
timeout_minutes: 60
max_trials: 10
max_concurrent_trials: 2
モデルのハイパーパラメーターの自動スイープ (AutoMode)
重要
現在、この機能はパブリック プレビュー段階にあります。 このプレビュー バージョンは、サービス レベル アグリーメントなしに提供されます。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。
データセットに最適なモデル アーキテクチャとハイパーパラメーターを予測するのは困難です。 また、ハイパーパラメーターのチューニングに割り当てられる人間の時間が制限される場合もあります。 コンピュータ ビジョン タスクの場合、試行回数を指定すると、スイープするハイパーパラメーター空間の領域がシステムによって自動的に決定されます。 ハイパーパラメーター検索スペース、サンプリング メソッド、または早期終了ポリシーを定義する必要はありません。
AutoMode のトリガー
max_trialsを limits の 1 より大きい値に設定し、検索領域、サンプリング 方法、終了ポリシーを指定しないことで、自動スイープを実行します。 この機能は AutoMode です。 次の例を参照してください。
適用対象:
Azure CLI ml 拡張機能 v2 (現行)
limits:
max_trials: 10
max_concurrent_trials: 2
10 ~ 20 回の試行を実行すると、多くのデータセットで適切に動作します。 AutoML ジョブの 時間予算 を設定することはできますが、各試用版に時間がかかる場合にのみ、この値を設定します。
警告
現在、UI では自動スイープの起動はサポートされていません。
個々の試行
個々の試行では、モデル アーキテクチャとハイパーパラメーターを直接制御します。
model_name パラメーターを使用してモデル アーキテクチャを渡します。
サポートされているモデル アーキテクチャ
次の表は、各 Computer Vision タスクでサポートされている従来版モデルをまとめたものです。 これらのレガシ モデルのみを使用すると、レガシ ランタイムを使用する実行がトリガーされます。ここで、個々の実行または試用版はコマンド ジョブとして送信されます。 HuggingFace と MMDetection のサポートについては、次のセクションを参照してください。
| タスク | モデル アーキテクチャ | 文字列リテラル構文default_model* を * で示す |
|---|---|---|
| 画像の分類 (複数クラスおよび複数ラベル) |
MobileNet: モバイル アプリケーション用の軽量モデル ResNet: 残差ネットワーク ResNeSt: スプリット アテンション ネットワーク SE-ResNeXt50: スクイーズおよび励起ネットワーク ViT: Vision Transformer ネットワーク |
mobilenetv2 resnet18 resnet34 resnet50 resnet101 resnet152 resnest50 resnest101 seresnext vits16r224 (小) vitb16r224* (ベース) vitl16r224 (大) |
| オブジェクトの検出 |
YOLOv5: 1 ステージ オブジェクト検出モデル Faster RCNN ResNet FPN: 2 ステージ オブジェクト検出モデル RetinaNet ResNet FPN: Focal Loss によってクラスの不均衡に対処する 注: 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 |
サポートされているモデル アーキテクチャ - HuggingFace と MMDetection
Azure Machine Learning パイプラインで実行される新しいバックエンドを使用すると、トランスフォーマー ライブラリの一部である HuggingFace Hub の画像分類モデル (microsoft/beit-base-patch16-224 など) を使用できます。
MMDetection バージョン 3.1.0 Model Zoo (atss_r50_fpn_1x_coco など) のオブジェクト検出またはインスタンスセグメント化モデルを使用することもできます。
HuggingFace Transformers および MMDetection 3.1.0 のモデルをサポートするだけでなく、Azure Machine Learning レジストリには、これらのライブラリからキュレーションされたモデルの一覧が用意されています。 これらのキュレーションされたモデルは徹底的にテストされ、広範なベンチマークから選択された既定のハイパーパラメーターを使用して、効果的なトレーニングを保証します。 次の表は、これらのキュレーションされたモデルをまとめたものです。
| タスク | モデル アーキテクチャ | 文字列リテラル構文 |
|---|---|---|
| 画像の分類 (複数クラスおよび複数ラベル) |
BEiT ViT DeiT SwinV2 |
microsoft/beit-base-patch16-224-pt22k-ft22kgoogle/vit-base-patch16-224facebook/deit-base-patch16-224microsoft/swinv2-base-patch4-window12-192-22k |
| 物体検出 |
スパース R-CNN 変形可能な DETR VFNet YOLOF |
mmd-3x-sparse-rcnn_r50_fpn_300-proposals_crop-ms-480-800-3x_cocommd-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 |
| インスタンスのセグメント化 | マスク R-CNN | mmd-3x-mask-rcnn_swin-t-p4-w7_fpn_1x_coco |
キュレーションされたモデルの一覧は常に更新されます。 Python SDK を使用すると、特定のタスクのための最新のキュレーションされたモデルの一覧を取得できます。
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
Output:
['google-vit-base-patch16-224',
'microsoft-swinv2-base-patch4-window12-192-22k',
'facebook-deit-base-patch16-224',
'microsoft-beit-base-patch16-224-pt22k-ft22k']
HuggingFace または MMDetection モデルを使用すると、パイプライン コンポーネントを使用する実行がトリガーされます。 レガシ モデルと HuggingFace/MMdetection モデルの両方を使用する場合、すべての実行と試用版でコンポーネントが使用されます。
モデル アーキテクチャの制御に加えて、モデルのトレーニングに使用されるハイパーパラメーターも調整できます。 公開されているハイパーパラメーターの多くはモデルに依存しませんが、一部のハイパーパラメーターはタスク固有またはモデル固有です。 これらのインスタンスで使用できるハイパーパラメーターの詳細について確認してください。
適用対象:
Azure CLI ml 拡張機能 v2 (現行)
yolov5 などの特定のアーキテクチャに対して既定のハイパーパラメーター値を使用するには、model_name セクションで training_parameters キーを使用してアーキテクチャを指定します。 たとえば、次のように入力します。
training_parameters:
model_name: yolov5
モデル ハイパーパラメーターの手動スイープ
コンピューター ビジョン モデルをトレーニングする場合、モデルのパフォーマンスは、選択したハイパーパラメーター値に大きく依存します。 多くの場合、最適なパフォーマンスを得るにはハイパーパラメーターを調整する必要があります。 Computer Vision タスクの場合、ハイパーパラメーターをスイープして、モデルに最適な設定を見つけることができます。 この機能は、Azure Machine Learning のハイパーパラメーター調整機能に該当します。 ハイパーパラメーターを調整する方法を確認してください。
適用対象:
Azure CLI ml 拡張機能 v2 (現行)
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]
パラメーター検索空間を定義する
パラメーター空間でスイープするモデル アーキテクチャとハイパーパラメーターを定義します。 1 つのモデル アーキテクチャまたは複数のアーキテクチャを指定できます。
- 各タスクの種類でサポートされているモデル アーキテクチャの一覧については、「 個々の試用版」を参照してください。
- コンピューター ビジョン タスクの種類ごとのハイパーパラメーターについては、コンピューター ビジョン タスク のハイパーパラメーターを参照してください。
- 不連続ハイパーパラメーターと連続ハイパーパラメーターでサポートされるディストリビューションの詳細については、 ハイパーパラメーターを調整する方法を参照してください。
スイープのサンプリング方法
ハイパーパラメーターをスイープする場合は、定義されたパラメーター空間をスイープするために使用するサンプリング方法を指定します。 現在、 sampling_algorithm パラメーターでは、次のサンプリング メソッドがサポートされています。
| サンプリングの種類 | AutoML ジョブの構文 |
|---|---|
| ランダム サンプリング | random |
| グリッド サンプリング | grid |
| ベイジアン サンプリング | bayesian |
注
現在、条件付きハイパーパラメーター空間は、ランダム サンプリングとグリッド サンプリングでのみサポートされています。
早期終了ポリシー
早期終了ポリシーを使用して、パフォーマンスの低い試用版を自動的に終了します。 早期終了では、計算リソースを節約することで計算効率が向上します。それ以外の場合は、期待の低い試みに費やされる可能性があります。 イメージの自動 ML では、 early_termination パラメーターを使用して、次の早期終了ポリシーがサポートされます。 終了ポリシーを指定しない場合、すべての試用版は完了まで実行されます。
| 早期終了ポリシー | AutoML ジョブの構文 |
|---|---|
| バンディット ポリシー | CLI v2: bandit SDK v2: BanditPolicy() |
| 中央値の停止ポリシー | コマンドラインインターフェース (CLI) v2: median_stopping SDK v2: MedianStoppingPolicy() |
| 切り捨て選択ポリシー | CLI v2: truncation_selection SDK v2: TruncationSelectionPolicy() |
詳細については、 ハイパーパラメーター スイープの早期終了ポリシーを構成する方法を参照してください。
注
スイープ構成の完全なサンプルについては、 チュートリアルを参照してください。
下の例に示すように、スイープ関連のすべてのパラメーターを構成できます。
適用対象:
Azure CLI ml 拡張機能 v2 (現行)
sweep:
sampling_algorithm: random
early_termination:
type: bandit
evaluation_interval: 2
slack_factor: 0.2
delay_evaluation: 6
固定設定
次の例に示すように、パラメーター空間スイープ中に変更されない固定設定またはパラメーターを渡します。
適用対象:
Azure CLI ml 拡張機能 v2 (現行)
training_parameters:
early_stopping: True
evaluation_frequency: 1
データの拡張
一般に、ディープ ラーニング モデルのパフォーマンスは、多くの場合にデータが多いほど向上する可能性があります。 データ拡張は、データセットのデータ サイズと変動性を増幅するための実用的な手法です。 この手法は、オーバーフィットを防ぐのに役立ち、見えないデータに対するモデルの一般化機能を向上させます。 自動 ML では、入力画像をモデルにフィードする前に、Computer Vision タスクに基づいてさまざまなデータ拡張手法が適用されます。 現時点では、ハイパーパラメーターはデータ拡張を制御しません。
| タスク | 影響を受けるデータセット | 適用されるデータ拡張手法 |
|---|---|---|
| 画像分類 (多クラスと多ラベル) | トレーニング 検証とテスト |
ランダムなサイズ変更とトリミング、水平フリップ、カラー ジッター (明るさ、コントラスト、彩度、色相)、チャネルごとの ImageNet の平均と標準偏差を使用した正規化 サイズ変更、中心のトリミング、正規化 |
| 物体検出、インスタンスのセグメント化 | トレーニング 検証とテスト |
境界ボックス周囲のランダムなトリミング、展開、左右反転、正規化、サイズ変更 正規化、サイズ変更 |
| yolov5 を使用した物体検出 | トレーニング 検証とテスト |
モザイク、ランダム アフィン (回転、平行移動、スケーリング、傾斜)、左右反転 レターボックスのサイズ変更 |
モデルは、イメージ ジョブ用の自動 ML に対して、前の表で定義された拡張を既定で適用します。 拡張を制御するために、イメージの自動 ML では、次の 2 つのフラグが公開され、特定の拡張が無効になります。 現時点では、これらのフラグはオブジェクト検出タスクとインスタンスセグメント化タスクのみをサポートしています。
- apply_mosaic_for_yolo: このフラグは Yolo モデルに固有です。 モザイク データ拡張をオフにするには、False に設定します。 モデルでは、トレーニング時にこの拡張が適用されます。
-
apply_automl_train_augmentations: オブジェクト検出モデルとインスタンスセグメント化モデルのトレーニング時間中にモデルが適用される拡張をオフにするには、このフラグを false に設定します。 拡張については、上の表の詳細を参照してください。
- 非 yolo 物体検出モデルとインスタンス セグメント化モデルの場合、このフラグにより最初の 3 つの拡張のみがオフになります。 例: 境界ボックスの周囲をランダムにトリミングし、拡大し、水平方向に反転します。 正規化とサイズ変更の拡張は、このフラグに関係なく適用されます。
- Yolo モデルの場合、このフラグによりランダム アフィンと左右反転の拡張がオフになります。
これらの 2 つのフラグは、advanced_settingsのtraining_parametersで設定できます。
適用対象:
Azure CLI ml 拡張機能 v2 (現行)
training_parameters:
advanced_settings: >
{"apply_mosaic_for_yolo": false}
training_parameters:
advanced_settings: >
{"apply_automl_train_augmentations": false}
これら 2 つのフラグは互いに独立しています。 次の設定を使用して、それらを組み合わせて使用することもできます。
training_parameters:
advanced_settings: >
{"apply_automl_train_augmentations": false, "apply_mosaic_for_yolo": false}
実験では、これらの拡張がモデルの一般化を改善するのに役立ちます。 これらの拡張をオフにした場合は、それらを他のオフライン拡張と組み合わせて、より良い結果を得ることができます。
増分トレーニング (省略可能)
トレーニング ジョブが完了したら、トレーニング済みのモデル チェックポイントを読み込むことで、モデルをさらにトレーニングできます。 増分トレーニングには、同じデータセットまたは別のデータセットを使用します。 モデルに満足している場合は、トレーニングを停止し、現在のモデルを使用します。
ジョブ ID を使用してチェックポイントを渡す
チェックポイントを読み込むジョブ ID を渡します。
適用対象:
Azure CLI ml 拡張機能 v2 (現行)
training_parameters:
checkpoint_run_id : "target_checkpoint_run_id"
AutoML ジョブを送信する
適用対象:
Azure CLI ml 拡張機能 v2 (現行)
AutoML ジョブを送信するには、.yml ファイル、ワークスペース名、リソース グループ、サブスクリプション ID へのパスを指定して、次の CLI v2 コマンドを実行します。
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]
出力と評価のメトリック
自動 ML トレーニング ジョブでは、出力モデル ファイル、評価メトリック、ログ、およびスコアリング ファイルや環境ファイルなどのデプロイ成果物が生成されます。 これらのファイルとメトリックは、子ジョブの出力とログとメトリック タブから表示できます。
ヒント
「ジョブ結果の表示」セクションからジョブ結果に移動する方法を確認してください。
ジョブごとに提供されるパフォーマンス グラフおよびメトリックの定義と例については、「自動化機械学習実験の結果を評価する」を参照してください。
モデルを登録して展開する
ジョブが完了したら、最適な評価版から作成されたモデルを登録します (最適なプライマリ メトリックが生成される構成)。 モデルをダウンロードした後、または対応するジョブ ID で azureml パスを指定することで、モデルを登録できます。 推論設定を変更する場合は、モデルをダウンロードし、 settings.jsonを変更して、更新されたモデル フォルダーを登録します。
最適な試行を取得する
適用対象:
Azure CLI ml 拡張機能 v2 (現行)
CLI example not available, please use Python SDK.
モデルを登録する
azureml パスまたはローカルでダウンロードしたパスを使用して、モデルを登録します。
適用対象:
Azure CLI ml 拡張機能 v2 (現行)
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]
モデルを登録したら、マネージド オンライン エンドポイント deploy-managed-online-endpoint を使用してモデルをデプロイできます。
オンライン エンドポイントを構成する
適用対象:
Azure CLI ml 拡張機能 v2 (現行)
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: od-fridge-items-endpoint
auth_mode: key
エンドポイントを作成する
以前に作成した MLClient を使用して、ワークスペースにエンドポイントを作成します。 このコマンドでは、エンドポイントの作成を開始し、エンドポイントの作成が続行されている間に確認応答を返します。
適用対象:
Azure CLI ml 拡張機能 v2 (現行)
az ml online-endpoint create --file .\create_endpoint.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
オンライン デプロイを構成する
デプロイは、実際の推論を実行するモデルをホストするのに必要なリソースのセットです。
ManagedOnlineDeployment クラスを使用して、エンドポイントのデプロイを作成します。 デプロイ クラスターには、GPU または CPU VM のバージョンを使用できます。
適用対象:
Azure CLI ml 拡張機能 v2 (現行)
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
配置を作成する
前に作成した MLClient を使用して、ワークスペースにデプロイを作成します。 このコマンドでは、デプロイの作成を開始し、デプロイの作成が続行されている間に確認応答を返します。
適用対象:
Azure CLI ml 拡張機能 v2 (現行)
az ml online-deployment create --file .\create_deployment.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
トラフィックを更新する
既定では、現在のデプロイは 0% トラフィックを受信するように設定されています。 現在のデプロイで受信するトラフィックの割合を設定します。 1 つのエンドポイントを持つすべてのデプロイのトラフィックの割合の合計は、100%を超えることはできません。
適用対象:
Azure CLI ml 拡張機能 v2 (現行)
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]
または、Azure Machine Learning スタジオ UI からモデルをデプロイすることもできます。 自動 ML ジョブの [ モデル ] タブで、デプロイするモデルに移動します。 [ デプロイ ] を選択し、[ リアルタイム エンドポイントにデプロイ] を選択します。
。
レビュー ページの外観は次のようになります。 インスタンスの種類、インスタンス数を選択し、現在のデプロイのトラフィックの割合を設定できます。
。
。
推論設定を更新する
前の手順では、最適なモデルから mlflow-model/artifacts/settings.json ファイルをダウンロードしました。 このファイルを使用して、モデルを登録する前に推論設定を更新します。 最適なパフォーマンスを得る場合は、トレーニングと同じパラメーターを使用します。
各タスク (および一部のモデル) には、一連のパラメーターがあります。 既定では、トレーニングと検証中にパラメーターに同じ値が使用されます。 推論にモデルを使用するときに必要な動作に応じて、これらのパラメーターを変更できます。 次の一覧は、各タスクの種類とモデルのパラメーターを示しています。
| タスク | パラメーター名 | 既定値 |
|---|---|---|
| 画像分類 (多クラスと多ラベル) | valid_resize_sizevalid_crop_size |
256 224 |
| オブジェクトの検出 | min_sizemax_sizebox_score_threshnms_iou_threshbox_detections_per_img |
600 1333 0.3 0.5 100 |
yolov5 を使用した物体検出 |
img_sizemodel_sizebox_score_threshnms_iou_thresh |
640 中間 0.1 0.5 |
| インスタンスのセグメント化 | min_sizemax_sizebox_score_threshnms_iou_threshbox_detections_per_imgmask_pixel_score_thresholdmax_number_of_polygon_pointsexport_as_imageimage_type |
600 1333 0.3 0.5 100 0.5 100 いいえ JPG |
タスク固有のハイパーパラメーターの詳細については、「自動機械学習におけるコンピューター ビジョン タスクのハイパーパラメーター」を参照してください。
タイリングを使用してタイリング動作を制御する場合は、 tile_grid_size、 tile_overlap_ratio、 tile_predictions_nms_threshの各パラメーターを使用できます。 これらのパラメーターの詳細については、「 AutoML を使用して小さな物体検出モデルをトレーニングする」を参照してください。
展開をテスト
デプロイをテストし、モデルからの検出を視覚化するには、「 デプロイのテスト」を参照してください。
予測の説明を生成する
重要
これらの設定は、現在、パブリック プレビューの段階にあります。 これらは、サービス レベル アグリーメントなしで提供されます。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。
警告
モデルの説明可能性 では、 多クラス分類 と 多ラベル分類のみがサポートされます。
イメージの AutoML で Explainable AI (XAI) を使用する利点には、次のようなものがあります。
- 複雑なビジョン モデルの予測における透明性の向上
- ユーザーが、モデル予測に寄与する入力画像の重要な特徴またはピクセルを理解するのに役立ちます
- モデルのトラブルシューティングに役立ちます
- バイアスの検出に役立ちます
説明
説明は、モデルの予測への貢献に基づいて入力画像の各ピクセルに与える 特徴の属性 または重みです。 各重み付けは、負 (予測と負の相関) または正 (予測と正の相関) の値になります。 これらの属性は、予測されたクラスに対して計算します。 多クラス分類の場合は、サンプルごとにサイズ [3, valid_crop_size, valid_crop_size] の属性マトリックスを 1 つだけ生成します。 複数ラベル分類の場合、各サンプルの予測ラベルまたはクラスごとに、サイズ [3, valid_crop_size, valid_crop_size] の属性マトリックスを生成します。
デプロイされたエンドポイントの AutoML for Images で Explainable AI を使用すると、各画像の説明 (入力画像に重ね合わされた属性) と属性 (サイズの多次元配列) を[3, valid_crop_size, valid_crop_size]できます。 視覚化とは別に、属性マトリックスを取得して、属性を使用したカスタム視覚化の生成や属性のセグメントの調査など、説明をより細かく制御することもできます。 すべての説明アルゴリズムは、属性を生成するためにサイズ valid_crop_size のトリミングされた正方形のイメージを使用します。
説明は、 オンライン エンドポイント または バッチ エンドポイントから生成できます。 エンドポイントをデプロイしたら、それを使用して予測の説明を生成できます。 オンラインデプロイでは、説明の生成中にrequest_settings = OnlineRequestSettings(request_timeout_ms=90000)を回避するために、ManagedOnlineDeploymentパラメーターをrequest_timeout_msに渡し、を最大値に設定してください (「register and deploy model」セクションを参照してください)。
xraiなどの一部の説明容易性 (XAI) メソッドでは、予測された各ラベルに対して属性と視覚化を生成する必要がある場合に、特にマルチラベル分類に時間がかかります。 任意の GPU インスタンスを使用して、より迅速な説明を行います。 説明を生成するための入力スキーマと出力スキーマの詳細については、スキーマのドキュメントを参照してください。
画像の AutoML では、次の最先端の説明アルゴリズムがサポートされています。
- XRAI (xrai)
- 統合グラデーション (integrated_gradients)
- ガイド付き GradCAM (guided_gradcam)
- ガイド付き BackPropagation (guided_backprop)
次の表では、XRAI と統合グラデーションの説明アルゴリズム固有のチューニング パラメーターについて説明します。 ガイド付き BackPropagation とガイド付き GradCAM にはチューニング パラメーターは必要ありません。
| XAI アルゴリズム | アルゴリズム固有のパラメーター | 既定値 |
|---|---|---|
xrai |
1. n_steps: 概算法が使用するステップの数。 ステップの数が多いほど、属性の近似が向上します (説明)。 n_stepsの範囲は [2, inf)] ですが、属性のパフォーマンスは 50 ステップ後に収束し始めます。 Optional, Int 2. xrai_fast: より高速なバージョンの XRAI を使用するかどうか。
True の場合、説明の計算時間は速くなりますが、正確でない説明 (属性) につながります。Optional, Bool |
n_steps = 50 xrai_fast = True |
integrated_gradients |
1. n_steps: 概算法が使用するステップの数。 手順の数が多いほど、属性 (説明) が向上します。 n_stepsの範囲は [2, inf)] ですが、属性のパフォーマンスは 50 ステップ後に収束し始めます。Optional, Int 2. approximation_method: 積分を概算する方法。 使用可能な概算法は riemann_middle と gausslegendre です。Optional, String |
n_steps = 50 approximation_method = riemann_middle |
内部的には、XRAI アルゴリズムは統合されたグラデーションを使用します。 そのため、統合されたグラデーションと XRAI アルゴリズムの両方に、 n_steps パラメーターが必要です。 手順の数が多いほど、説明を近似するために時間が長くなり、オンライン エンドポイントでタイムアウトの問題が発生する可能性があります。
詳しい説明を得るために、XRAI > ガイド付き GradCAM > 統合勾配 > ガイド付きバックプロパゲーションのアルゴリズムを使用します。 説明を迅速にするために、ガイド付きバックプロパゲーション > ガイド付きGradCAM > 統合された勾配 > XRAI を指定された順序で使用します。
オンライン エンドポイントに対するサンプル要求は次のようになります。
model_explainability が True に設定されている場合、この要求によって説明が生成されます。 次の要求では、50 ステップの高速バージョンの XRAI アルゴリズムを使用して、視覚化と属性を生成します。
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)
説明の生成の詳細については、自動化された機械学習サンプルの GitHub ノートブック リポジトリに関するページを参照してください。
視覚化の解釈
model_explainabilityとvisualizationsの両方がTrueに設定されている場合、デプロイされたエンドポイントは base64 でエンコードされたイメージ文字列を返します。
ノートブックの説明に従って base64 文字列をデコードするか、次のコードを使用して予測の base64 画像文字列をデコードして視覚化します。
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))
次の図は、サンプル入力画像の説明の視覚化を示しています。
デコードされた base64 図には、2 x 2 グリッド内に 4 つの画像セクションがあります。
- 左上隅の画像 (0, 0) は、トリミングされた入力画像です。
- 右上のイメージ (0, 1) は、予測クラスの白いピクセルの寄与が最も高く、青いピクセルの寄与が最も低いカラー スケール bgyw (青緑黄白) の属性のヒートマップです。
- 左下隅の画像 (1, 0) には、トリミングされた入力画像の属性のヒートマップがブレンドされています。
- 右下隅 (1、1) の画像は、属性スコアに基づいてピクセルの上位 30% を持つトリミングされた入力画像です。
属性の解釈
デプロイされたエンドポイントは、 model_explainability と attributions の両方が Trueに設定されている場合、属性を返します。 詳細については、 複数クラス分類と複数ラベル分類ノートブックを参照してください。
これらの属性を使用すると、ユーザーはカスタム視覚化を生成したり、ピクセル レベルの属性スコアを詳しく調べるために、より細かく制御できます。 次のコード スニペットでは、属性マトリックスを使用してカスタム視覚化を生成する方法について説明します。 複数クラス分類と複数ラベル分類の属性のスキーマの詳細については、スキーマのドキュメントを参照してください。
選択したモデルの valid_resize_size と valid_crop_size の正確な値を使用して説明を生成します (既定値はそれぞれ 256 と 224 です)。 次のコードでは 、Captum 視覚化機能を使用してカスタム視覚エフェクトを生成します。 ユーザーは他のライブラリを利用して視覚化を生成できます。 詳細については、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))
大規模なデータセット
AutoML を使用して大規模なデータセットをトレーニングする場合は、いくつかの試験的な設定が役立つ場合があります。
重要
これらの設定は、現在、パブリック プレビューの段階にあります。 これらは、サービス レベル アグリーメントなしで提供されます。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。
マルチ GPU とマルチノードのトレーニング
既定では、各モデルは 1 つの VM でトレーニングされます。 モデルのトレーニングに時間がかかりすぎる場合は、複数の GPU を含む VM を使用すると役立つ可能性があります。 大規模なデータセットでモデルをトレーニングする時間は、使用される GPU の数に対してほぼ直線的な割合で減少します。 たとえば、モデルは、2 つの GPU を持つ VM で、1 つの GPU を持つ VM の約 2 倍の速度でトレーニングします。 複数の GPU を搭載した VM でモデルのトレーニング時間が長い場合は、各モデルのトレーニングに使用される VM の数を増やすことができます。 マルチ GPU トレーニングと同様に、大規模なデータセットでモデルをトレーニングする時間も、使用される VM の数に対してほぼ直線的な割合で減少します。 複数の VM 間でモデルをトレーニングする場合は、最適な結果を得るために InfiniBand をサポートするコンピューティング SKU を必ず使用してください。 AutoML ジョブの node_count_per_trial プロパティを設定することで、1 つのモデルのトレーニングに使われる VM の数を構成できます。
適用対象:
Azure CLI ml 拡張機能 v2 (現行)
properties:
node_count_per_trial: "2"
ストレージからの画像ファイルのストリーミング
既定では、トレーニング プロセスでは、開始前にすべてのイメージ ファイルがディスクにダウンロードされます。 イメージ ファイルのサイズが使用可能なディスク領域より大きい場合、ジョブは失敗します。 この問題を回避するには、トレーニング中に Azure Storage からイメージ ファイルをストリーミングするオプションを選択します。 トレーニング プロセスでは、ディスクをバイパスして、Azure Storage からシステム メモリにイメージ ファイルを直接ストリーミングします。 同時に、プロセスはディスク上のストレージからできるだけ多くのファイルをキャッシュして、ストレージへの要求の数を最小限に抑えます。
注
ストリーミングを有効にする場合は、コストと待機時間を最小限に抑えるために、Azure ストレージ アカウントがコンピューティング リソースと同じリージョンにあることを確認します。
適用対象:
Azure CLI ml 拡張機能 v2 (現行)
training_parameters:
advanced_settings: >
{"stream_image_files": true}
サンプルの Notebook
コード例とユース ケースの詳細については、 自動化された機械学習サンプルの GitHub ノートブック リポジトリを参照してください。 コンピューター ビジョン モデルの構築に固有のサンプルについては、"automl-image-" プレフィックスが付いたフォルダーを確認します。
コード例
コード例とユース ケースの詳細については、 自動化された機械学習サンプルの azureml-examples リポジトリを参照してください。