다음을 통해 공유


자동화된 Machine Learning으로 Computer Vision 모델을 학습하기 위한 데이터 스키마

적용 대상:Azure CLI ml 확장 v2(현재)Python SDK azure-ai-ml v2(현재)

학습 및 유추 중 Computer Vision 작업에 대한 자동화된 ML 실험에서 데이터 사용을 위해 JSONL 파일 형식을 지정하는 방법을 알아봅니다.

학습용 데이터 스키마

이미지용 Azure Machine Learning AutoML을 사용하려면 입력 이미지 데이터를 JSONL(JSON Line) 형식으로 준비해야 합니다. 이 섹션에서는 이미지 분류 다중 클래스, 이미지 분류 다중 레이블, 개체 감지 및 인스턴스 분할을 위한 입력 데이터 서식 또는 스키마에 대해 설명합니다. 또한 최종 학습 또는 유효성 검사 JSON Line 파일의 샘플을 제공합니다.

이미지 분류(이진/다중 클래스)

각 JSON Line의 데이터 서식/스키마 입력:

{
   "image_url":"azureml://subscriptions/<my-subscription-id>/resourcegroups/<my-resource-group>/workspaces/<my-workspace>/datastores/<my-datastore>/paths/<path_to_image>",
   "image_details":{
      "format":"image_format",
      "width":"image_width",
      "height":"image_height"
   },
   "label":"class_name",
}
설명 예시
image_url Azure Machine Learning 데이터 저장소의 이미지 위치입니다.
my-subscription-id를 이미지가 있는 Azure 구독으로 바꿔야 합니다. Azure 구독에 대한 자세한 내용은 여기에서 찾을 수 있습니다. 마찬가지로 my-resource-group, my-workspace, my-datastore리소스 그룹 이름, 작업 영역 이름데이터 저장소 이름으로 각각 바꿔야 합니다.
path_to_image는 데이터 저장소의 이미지에 대한 전체 경로여야 합니다.
Required, String
"azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_01.jpg"
image_details 이미지 세부 정보
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format 이미지 유형(Pillow 라이브러리에서 사용 가능한 모든 이미지 형식이 지원됨)
Optional, String from {"jpg", "jpeg", "png", "jpe", "jfif","bmp", "tif", "tiff"}
"jpg" or "jpeg" or "png" or "jpe" or "jfif" or "bmp" or "tif" or "tiff"
width 이미지의 너비
Optional, String or Positive Integer
"400px" or 400
height 이미지의 높이
Optional, String or Positive Integer
"200px" or 200
label 이미지의 클래스/레이블
Required, String
"cat"

다중 클래스 이미지 분류를 위한 JSONL 파일의 예:

{"image_url": "azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_01.jpg", "image_details":{"format": "jpg", "width": "400px", "height": "258px"}, "label": "can"}
{"image_url": "azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_02.jpg", "image_details": {"format": "jpg", "width": "397px", "height": "296px"}, "label": "milk_bottle"}
.
.
.
{"image_url": "azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_n.jpg", "image_details": {"format": "jpg", "width": "1024px", "height": "768px"}, "label": "water_bottle"}

이미지 분류 다중 클래스에 대한 이미지 예.

이미지 분류 다중 레이블

다음은 이미지 분류를 위한 JSON Line별 입력 데이터 서식/스키마의 예입니다.

{
   "image_url":"azureml://subscriptions/<my-subscription-id>/resourcegroups/<my-resource-group>/workspaces/<my-workspace>/datastores/<my-datastore>/paths/<path_to_image>",
   "image_details":{
      "format":"image_format",
      "width":"image_width",
      "height":"image_height"
   },
   "label":[
      "class_name_1",
      "class_name_2",
      "class_name_3",
      "...",
      "class_name_n"
        
   ]
}
설명 예시
image_url Azure Machine Learning 데이터 저장소의 이미지 위치입니다.
my-subscription-id를 이미지가 있는 Azure 구독으로 바꿔야 합니다. Azure 구독에 대한 자세한 내용은 여기에서 찾을 수 있습니다. 마찬가지로 my-resource-group, my-workspace, my-datastore리소스 그룹 이름, 작업 영역 이름데이터 저장소 이름으로 각각 바꿔야 합니다.
path_to_image는 데이터 저장소의 이미지에 대한 전체 경로여야 합니다.
Required, String
"azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_01.jpg"
image_details 이미지 세부 정보
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format 이미지 유형(Pillow 라이브러리에서 사용 가능한 모든 이미지 형식이 지원됨)
Optional, String from {"jpg", "jpeg", "png", "jpe", "jfif", "bmp", "tif", "tiff"}
"jpg" or "jpeg" or "png" or "jpe" or "jfif" or "bmp" or "tif" or "tiff"
width 이미지의 너비
Optional, String or Positive Integer
"400px" or 400
height 이미지의 높이
Optional, String or Positive Integer
"200px" or 200
label 이미지의 클래스/레이블 목록
Required, List of Strings
["cat","dog"]

이미지 분류 다중 레이블에 대한 JSONL 파일의 예:

{"image_url": "azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_01.jpg", "image_details":{"format": "jpg", "width": "400px", "height": "258px"}, "label": ["can"]}
{"image_url": "azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_02.jpg", "image_details": {"format": "jpg", "width": "397px", "height": "296px"}, "label": ["can","milk_bottle"]}
.
.
.
{"image_url": "azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_n.jpg", "image_details": {"format": "jpg", "width": "1024px", "height": "768px"}, "label": ["carton","milk_bottle","water_bottle"]}

이미지 분류 다중 레이블에 대한 이미지 예.

개체 감지

다음은 개체 감지를 위한 JSONL 파일의 예입니다.

{
   "image_url":"azureml://subscriptions/<my-subscription-id>/resourcegroups/<my-resource-group>/workspaces/<my-workspace>/datastores/<my-datastore>/paths/<path_to_image>",
   "image_details":{
      "format":"image_format",
      "width":"image_width",
      "height":"image_height"
   },
   "label":[
      {
         "label":"class_name_1",
         "topX":"xmin/width",
         "topY":"ymin/height",
         "bottomX":"xmax/width",
         "bottomY":"ymax/height",
         "isCrowd":"isCrowd"
      },
      {
         "label":"class_name_2",
         "topX":"xmin/width",
         "topY":"ymin/height",
         "bottomX":"xmax/width",
         "bottomY":"ymax/height",
         "isCrowd":"isCrowd"
      },
      "..."
   ]
}

여기서,

  • xmin = 경계 상자의 왼쪽 상단 모서리의 x 좌표
  • ymin = 경계 상자의 왼쪽 상단 모서리의 y 좌표
  • xmax = 경계 상자의 오른쪽 하단 모서리의 x 좌표
  • ymax = 경계 상자의 오른쪽 하단 모서리의 y 좌표
설명 예시
image_url Azure Machine Learning 데이터 저장소의 이미지 위치입니다.
my-subscription-id를 이미지가 있는 Azure 구독으로 바꿔야 합니다. Azure 구독에 대한 자세한 내용은 여기에서 찾을 수 있습니다. 마찬가지로 my-resource-group, my-workspace, my-datastore리소스 그룹 이름, 작업 영역 이름데이터 저장소 이름으로 각각 바꿔야 합니다.
path_to_image는 데이터 저장소의 이미지에 대한 전체 경로여야 합니다.
Required, String
"azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_01.jpg"
image_details 이미지 세부 정보
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format 이미지 유형(Pillow 라이브러리에서 사용할 수 있는 모든 이미지 형식이 지원됩니다. 그러나 YOLO의 경우 opencv 에서 허용하는 이미지 형식만 지원됨)
Optional, String from {"jpg", "jpeg", "png", "jpe", "jfif", "bmp", "tif", "tiff"}
"jpg" or "jpeg" or "png" or "jpe" or "jfif" or "bmp" or "tif" or "tiff"
width 이미지의 너비
Optional, String or Positive Integer
"499px" or 499
height 이미지의 높이
Optional, String or Positive Integer
"665px" or 665
label(외부 키) 각 상자가 왼쪽 위 및 오른쪽 아래 좌표의 label, topX, topY, bottomX, bottomY, isCrowd 사전인 경계 상자 목록
Required, List of dictionaries
[{"label": "cat", "topX": 0.260, "topY": 0.406, "bottomX": 0.735, "bottomY": 0.701, "isCrowd": 0}]
label(내부 키) 경계 상자에 있는 개체의 클래스/레이블
Required, String
"cat"
topX 경계 상자의 왼쪽 위 모서리의 x 좌표와 이미지 너비의 비율
Required, Float in the range [0,1]
0.260
topY 경계 상자의 왼쪽 위 모서리의 y 좌표와 이미지 높이의 비율
Required, Float in the range [0,1]
0.406
bottomX 경계 상자의 오른쪽 하단 모서리의 x 좌표와 이미지 너비의 비율
Required, Float in the range [0,1]
0.735
bottomY 경계 상자의 오른쪽 하단 모서리의 y 좌표와 이미지 높이의 비율
Required, Float in the range [0,1]
0.701
isCrowd 경계 상자가 개체의 종류 주위에 있는지 여부를 나타냅니다. 이 특수 플래그가 설정되면 메트릭을 계산할 때 이 특정 경계 상자를 건너뜁니다.
Optional, Bool
0

개체 감지를 위한 JSONL 파일의 예:

{"image_url": "azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_01.jpg", "image_details": {"format": "jpg", "width": "499px", "height": "666px"}, "label": [{"label": "can", "topX": 0.260, "topY": 0.406, "bottomX": 0.735, "bottomY": 0.701, "isCrowd": 0}]}
{"image_url": "azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_02.jpg", "image_details": {"format": "jpg", "width": "499px", "height": "666px"}, "label": [{"label": "carton", "topX": 0.172, "topY": 0.153, "bottomX": 0.432, "bottomY": 0.659, "isCrowd": 0}, {"label": "milk_bottle", "topX": 0.300, "topY": 0.566, "bottomX": 0.891, "bottomY": 0.735, "isCrowd": 0}]}
.
.
.
{"image_url": "azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_n.jpg", "image_details": {"format": "jpg", "width": "499px", "height": "666px"}, "label": [{"label": "carton", "topX": 0.0180, "topY": 0.297, "bottomX": 0.380, "bottomY": 0.836, "isCrowd": 0}, {"label": "milk_bottle", "topX": 0.454, "topY": 0.348, "bottomX": 0.613, "bottomY": 0.683, "isCrowd": 0}, {"label": "water_bottle", "topX": 0.667, "topY": 0.279, "bottomX": 0.841, "bottomY": 0.615, "isCrowd": 0}]}

개체 감지를 위한 이미지 예.

인스턴스 구분

예를 들어 세분화의 경우 자동화된 ML은 마스크가 아닌 입력 및 출력으로 다각형만 지원합니다.

다음은 예시 JSONL 파일(예: 구분)입니다.

{
   "image_url":"azureml://subscriptions/<my-subscription-id>/resourcegroups/<my-resource-group>/workspaces/<my-workspace>/datastores/<my-datastore>/paths/<path_to_image>",
   "image_details":{
      "format":"image_format",
      "width":"image_width",
      "height":"image_height"
   },
   "label":[
      {
         "label":"class_name",
         "isCrowd":"isCrowd",
         "polygon":[["x1", "y1", "x2", "y2", "x3", "y3", "...", "xn", "yn"]]
      }
   ]
}
설명 예시
image_url Azure Machine Learning 데이터 저장소의 이미지 위치입니다.
my-subscription-id를 이미지가 있는 Azure 구독으로 바꿔야 합니다. Azure 구독에 대한 자세한 내용은 여기에서 찾을 수 있습니다. 마찬가지로 my-resource-group, my-workspace, my-datastore리소스 그룹 이름, 작업 영역 이름데이터 저장소 이름으로 각각 바꿔야 합니다.
path_to_image는 데이터 저장소의 이미지에 대한 전체 경로여야 합니다.
Required, String
"azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_01.jpg"
image_details 이미지 세부 정보
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format 이미지 유형
Optional, String from {"jpg", "jpeg", "png", "jpe", "jfif", "bmp", "tif", "tiff" }
"jpg" or "jpeg" or "png" or "jpe" or "jfif" or "bmp" or "tif" or "tiff"
width 이미지의 너비
Optional, String or Positive Integer
"499px" or 499
height 이미지의 높이
Optional, String or Positive Integer
"665px" or 665
label(외부 키) 각 마스크가 label, isCrowd, polygon coordinates의 사전인 마스크 목록
Required, List of dictionaries
[{"label": "can", "isCrowd": 0, "polygon": [[0.577, 0.689,
0.562, 0.681,
0.559, 0.686]]}]
label(내부 키) 마스크에 있는 개체의 클래스/레이블
Required, String
"cat"
isCrowd 마스크가 개체의 종류 주위에 있는지 여부를 나타냅니다.
Optional, Bool
0
polygon 개체의 다각형 좌표
Required, List of list for multiple segments of the same instance. Float values in the range [0,1]
[[0.577, 0.689, 0.567, 0.689, 0.559, 0.686]]

인스턴스 분할을 위한 JSONL 파일의 예:

{"image_url": "azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_01.jpg", "image_details": {"format": "jpg", "width": "499px", "height": "666px"}, "label": [{"label": "can", "isCrowd": 0, "polygon": [[0.577, 0.689, 0.567, 0.689, 0.559, 0.686, 0.380, 0.593, 0.304, 0.555, 0.294, 0.545, 0.290, 0.534, 0.274, 0.512, 0.2705, 0.496, 0.270, 0.478, 0.284, 0.453, 0.308, 0.432, 0.326, 0.423, 0.356, 0.415, 0.418, 0.417, 0.635, 0.493, 0.683, 0.507, 0.701, 0.518, 0.709, 0.528, 0.713, 0.545, 0.719, 0.554, 0.719, 0.579, 0.713, 0.597, 0.697, 0.621, 0.695, 0.629, 0.631, 0.678, 0.619, 0.683, 0.595, 0.683, 0.577, 0.689]]}]}
{"image_url": "azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_02.jpg", "image_details": {"format": "jpg", "width": "499px", "height": "666px"}, "label": [{"label": "carton", "isCrowd": 0, "polygon": [[0.240, 0.65, 0.234, 0.654, 0.230, 0.647, 0.210, 0.512, 0.202, 0.403, 0.182, 0.267, 0.184, 0.243, 0.180, 0.166, 0.186, 0.159, 0.198, 0.156, 0.396, 0.162, 0.408, 0.169, 0.406, 0.217, 0.414, 0.249, 0.422, 0.262, 0.422, 0.569, 0.342, 0.569, 0.334, 0.572, 0.320, 0.585, 0.308, 0.624, 0.306, 0.648, 0.240, 0.657]]}, {"label": "milk_bottle",  "isCrowd": 0, "polygon": [[0.675, 0.732, 0.635, 0.731, 0.621, 0.725, 0.573, 0.717, 0.516, 0.717, 0.505, 0.720, 0.462, 0.722, 0.438, 0.719, 0.396, 0.719, 0.358, 0.714, 0.334, 0.714, 0.322, 0.711, 0.312, 0.701, 0.306, 0.687, 0.304, 0.663, 0.308, 0.630, 0.320, 0.596, 0.32, 0.588, 0.326, 0.579]]}]}
.
.
.
{"image_url": "azureml://subscriptions/my-subscription-id/resourcegroups/my-resource-group/workspaces/my-workspace/datastores/my-datastore/paths/image_data/Image_n.jpg", "image_details": {"format": "jpg", "width": "499px", "height": "666px"}, "label": [{"label": "water_bottle", "isCrowd": 0, "polygon": [[0.334, 0.626, 0.304, 0.621, 0.254, 0.603, 0.164, 0.605, 0.158, 0.602, 0.146, 0.602, 0.142, 0.608, 0.094, 0.612, 0.084, 0.599, 0.080, 0.585, 0.080, 0.539, 0.082, 0.536, 0.092, 0.533, 0.126, 0.530, 0.132, 0.533, 0.144, 0.533, 0.162, 0.525, 0.172, 0.525, 0.186, 0.521, 0.196, 0.521 ]]}, {"label": "milk_bottle", "isCrowd": 0, "polygon": [[0.392, 0.773, 0.380, 0.732, 0.379, 0.767, 0.367, 0.755, 0.362, 0.735, 0.362, 0.714, 0.352, 0.644, 0.352, 0.611, 0.362, 0.597, 0.40, 0.593, 0.444,  0.494, 0.588, 0.515, 0.585, 0.621, 0.588, 0.671, 0.582, 0.713, 0.572, 0.753 ]]}]}

인스턴스 세분화를 위한 이미지 예.

온라인 채점을 위한 데이터 스키마

이 섹션에서는 배포된 모델을 사용할 때 예측을 수행하는 데 필요한 입력 데이터 서식을 문서화합니다.

입력 형식

다음 JSON은 작업별 모델 엔드포인트를 사용하여 모든 작업에 대한 예측을 생성하는 데 필요한 입력 형식입니다.

{
   "input_data": {
      "columns": [
         "image"
      ],
      "data": [
         "image_in_base64_string_format"
      ]
   }
}

이 json은 다음 표에 설명된 대로 외부 키 input_data 및 내부 키 columns, data가 있는 사전입니다. 엔드포인트는 위의 형식으로 json 문자열을 수락하고 채점 스크립트에 필요한 샘플의 데이터 프레임으로 변환합니다. json 섹션의 각 입력 이미지는 request_json["input_data"]["data"]base64로 인코딩된 문자열입니다.

설명
input_data
(외부 키)
json 요청의 외부 키입니다. input_data 은 입력 이미지 샘플을 허용하는 사전입니다.
Required, Dictionary
columns
(내부 키)
데이터 프레임을 만드는 데 사용할 열 이름입니다. image를 열 이름으로 사용하는 하나의 열만 허용합니다.
Required, List
data
(내부 키)
base64로 인코딩된 이미지 목록
Required, List

mlflow 모델을 배포한 후 다음 코드 조각을 사용하여 모든 작업에 대한 예측을 얻을 수 있습니다.

# Create request json
import base64

sample_image = os.path.join(dataset_dir, "images", "1.jpg")


def read_image(image_path):
    with open(image_path, "rb") as f:
        return f.read()


request_json = {
    "input_data": {
        "columns": ["image"],
        "data": [base64.encodebytes(read_image(sample_image)).decode("utf-8")],
    }
}
import json

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

출력 형식

모델 엔드포인트에 대한 예측은 작업 종류에 따라 다른 구조를 따릅니다. 이 섹션에서는 다중 클래스, 다중 레이블 이미지 분류, 개체 감지 및 인스턴스 분할 작업을 위한 출력 데이터 서식을 살펴봅니다.

입력 요청에 하나의 이미지가 포함된 경우 다음 스키마가 적용됩니다.

이미지 분류(이진/다중 클래스)

이미지 분류를 위한 엔드포인트는 데이터 세트의 모든 레이블과 입력 이미지에 대한 확률 점수를 다음 형식으로 반환합니다. visualizationsattributions는 설명 가능성과 관련이 있으며 요청이 채점 전용인 경우 이러한 키는 출력에 포함되지 않습니다. 이미지 분류의 설명 가능성 입력 및 출력 스키마에 대한 자세한 내용은 이미지 분류에 대한 설명 섹션을 참조하세요.

[
   {
      "probs": [
         2.098e-06,
         4.783e-08,
         0.999,
         8.637e-06
      ],
      "labels": [
         "can",
         "carton",
         "milk_bottle",
         "water_bottle"
      ]
   }
]

이미지 분류 다중 레이블

이미지 분류 다중 레이블의 경우 모델 엔드포인트는 레이블과 해당 확률을 반환합니다. visualizationsattributions는 설명 가능성과 관련이 있으며 요청이 채점 전용인 경우 이러한 키는 출력에 포함되지 않습니다. 다중 레이블 분류에 대한 설명 가능성 입력 및 출력 스키마에 대한 자세한 내용은 이미지 분류 다중 레이블 섹션에 대한 설명 섹션을 참조하세요.

[
   {
      "probs": [
         0.997,
         0.960,
         0.982,
         0.025
      ],
      "labels": [
         "can",
         "carton",
         "milk_bottle",
         "water_bottle"
      ]
   }
]

개체 감지

개체 감지 모델은 상자 레이블 및 신뢰도 점수와 함께 크기가 조정된 왼쪽 위 및 오른쪽 아래 좌표가 있는 여러 상자를 반환합니다.

[
   {
      "boxes": [
         {
            "box": {
               "topX": 0.224,
               "topY": 0.285,
               "bottomX": 0.399,
               "bottomY": 0.620
            },
            "label": "milk_bottle",
            "score": 0.937
         },
         {
            "box": {
               "topX": 0.664,
               "topY": 0.484,
               "bottomX": 0.959,
               "bottomY": 0.812
            },
            "label": "can",
            "score": 0.891
         },
         {
            "box": {
               "topX": 0.423,
               "topY": 0.253,
               "bottomX": 0.632,
               "bottomY": 0.725
            },
            "label": "water_bottle",
            "score": 0.876
         }
      ]
   }
]

인스턴스 구분

인스턴스 분할에서 출력은 크기가 조정된 왼쪽 상단 및 오른쪽 하단 좌표, 레이블, 신뢰도 점수 및 다각형(마스크 아님)이 있는 여러 상자로 구성됩니다. 여기서 다각형 값은 스키마 섹션에서 설명한 것과 동일한 형식입니다.

[
    {
       "boxes": [
          {
             "box": {
                "topX": 0.679,
                "topY": 0.491,
                "bottomX": 0.926,
                "bottomY": 0.810
             },
             "label": "can",
             "score": 0.992,
             "polygon": [
                [
                   0.82, 0.811, 0.771, 0.810, 0.758, 0.805, 0.741, 0.797, 0.735, 0.791, 0.718, 0.785, 0.715, 0.778, 0.706, 0.775, 0.696, 0.758, 0.695, 0.717, 0.698, 0.567, 0.705, 0.552, 0.706, 0.540, 0.725, 0.520, 0.735, 0.505, 0.745, 0.502, 0.755, 0.493
                ]
             ]
          },
          {
             "box": {
                "topX": 0.220,
                "topY": 0.298,
                "bottomX": 0.397,
                "bottomY": 0.601
             },
             "label": "milk_bottle",
             "score": 0.989,
             "polygon": [
                [
                   0.365, 0.602, 0.273, 0.602, 0.26, 0.595, 0.263, 0.588, 0.251, 0.546, 0.248, 0.501, 0.25, 0.485, 0.246, 0.478, 0.245, 0.463, 0.233, 0.442, 0.231, 0.43, 0.226, 0.423, 0.226, 0.408, 0.234, 0.385, 0.241, 0.371, 0.238, 0.345, 0.234, 0.335, 0.233, 0.325, 0.24, 0.305, 0.586, 0.38, 0.592, 0.375, 0.598, 0.365
                ]
             ]
          },
          {
             "box": {
                "topX": 0.433,
                "topY": 0.280,
                "bottomX": 0.621,
                "bottomY": 0.679
             },
             "label": "water_bottle",
             "score": 0.988,
             "polygon": [
                [
                   0.576, 0.680, 0.501, 0.680, 0.475, 0.675, 0.460, 0.625, 0.445, 0.630, 0.443, 0.572, 0.440, 0.560, 0.435, 0.515, 0.431, 0.501, 0.431, 0.433, 0.433, 0.426, 0.445, 0.417, 0.456, 0.407, 0.465, 0.381, 0.468, 0.327, 0.471, 0.318
                ]
             ]
          }
       ]
    }
]

XAI(온라인 점수 매기기 및 설명) 데이터 형식

Important

이러한 설정은 현재 공개 미리 보기로 제공됩니다. 서비스 수준 계약 없이 제공됩니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.

Warning

설명은 다중 클래스 분류 및 다중 레이블 분류대해서만 지원됩니다. 온라인 엔드포인트에 대한 설명을 생성하는 동안 시간 초과 문제가 발생하면 일괄 처리 채점 Notebook(SDK v1을 사용하여 설명을 생성합니다.

이 섹션에서는 배포된 모델을 사용하여 예측을 수행하고 예측 클래스/클래스에 대한 설명을 생성하는 데 필요한 입력 데이터 형식을 문서화합니다. 설명을 위해 별도의 배포가 필요하지 않습니다. 온라인 채점과 동일한 엔드포인트를 사용하여 설명을 생성할 수 있습니다. 입력 스키마에 몇 가지 추가 설명 관련 매개 변수를 전달하고 설명 및/또는 특성 점수 행렬의 시각화(픽셀 수준 설명)를 가져와야 합니다.

지원되는 설명 방법:

입력 형식(XAI)

다음 입력 형식은 작업별 모델 엔드포인트를 사용하여 분류 작업에 대한 예측 및 설명을 생성하는 데 지원됩니다. 모델을 배포한 후 다음 스키마를 사용하여 예측 및 설명을 가져올 수 있습니다.

{
   "input_data": {
      "columns": ["image"],
      "data": [json.dumps({"image_base64": "image_in_base64_string_format", 
                           "model_explainability": True,
                           "xai_parameters": {}
                         })
      ]
   }
}

이미지와 함께 입력 스키마에 설명을 생성하는 데 필요한 두 개의 추가 매개 변수(model_explainabilityxai_parameters)가 있습니다.

설명 기본값
image_base64 base64 형식의 입력 이미지
Required, String
-
model_explainability 설명을 생성할지 아니면 점수만 생성할지 여부
Optional, Bool
False
xai_parameters True xai_parameters 이면 model_explainability , attributions visualizationsask 키를 사용하여 설명 알고리즘 관련 매개 변수를 xai_algorithm포함하는 사전입니다.
Optional, Dictionary
xai_parameters 전달 xrai 되지 않으면 설명 알고리즘이 기본값과 함께 사용됩니다.
{"xai_algorithm": "xrai", "visualizations": True, "attributions": False}
xai_algorithm 사용할 설명성 알고리즘의 이름입니다. 지원되는 XAI 알고리즘은 {xrai, integrated_gradients, guided_gradcam} guided_backprop
Optional, String
xrai
visualizations 설명의 시각화를 반환할지 여부입니다.
Optional, Bool
True
attributions 기능 특성을 반환할지 여부입니다.
Optional, Bool
False
confidence_score_threshold_multilabel 다중 레이블 분류에서 설명을 생성하기 위해 상위 클래스를 선택하는 신뢰도 점수 임계값입니다.
Optional, Float
0.5

다음 표에서는 설명 편의성을 위해 지원되는 스키마에 대해 설명합니다.

Type 스키마
base64 형식의 단일 이미지 유추 image_base64 키 및 값이 base64로 인코딩된 이미지인 사전
model_explainability XAI 알고리즘 특정 매개 변수가 있는 True 또는 False 및 xai_parameters 사전이 있는 키
Required, Json String
Works for one or more images

아래 코드에 request_json정의된 각 입력 이미지는 목록에 request_json["input_data"]["data"]추가된 base64로 인코딩된 문자열입니다.

import base64
import json
# Get the details for online endpoint
endpoint = ml_client.online_endpoints.get(name=online_endpoint_name)

sample_image = "./test_image.jpg"

# Define explainability (XAI) parameters
model_explainability = True
xai_parameters = {"xai_algorithm": "xrai",
                  "visualizations": True,
                  "attributions": False}

def read_image(image_path):
    with open(image_path, "rb") as f:
        return f.read()

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

출력 형식(XAI)

모델 엔드포인트에 대한 예측은 작업 유형에 따라 다른 스키마를 따릅니다. 이 섹션에서는 다중 클래스 다중 레이블 이미지 분류 작업에 대한 출력 데이터 형식에 대해 설명합니다.

다음 스키마는 두 입력 이미지의 경우 정의됩니다.

이미지 분류(이진/다중 클래스)

출력 스키마는 요청에서 visualizationsattributions 키 값이 True로 설정된 경우 포함된다는 점을 제외하면 위에 설명된 것과 동일합니다.

visualizationsattributions 입력 요청에서 설정된 True 경우 model_explainability출력 visualizations 에는 다음과 같은 attributions값이 있습니다. 이러한 매개 변수에 대한 자세한 내용은 다음 표에 설명되어 있습니다. 확률 점수가 가장 높은 클래스에 대해 시각화 및 특성이 생성됩니다.

출력 키 설명
visualizations base64 문자열 형식의 단일 이미지 형식(형식)
Optional, String
attributions 픽셀 단위 특성 점수가 셰이프인 다차원 배열 [3, valid_crop_size, valid_crop_size]
Optional, List
[
    {
       "probs": [
          0.006,
          9.345e-05,
          0.992,
          0.003
       ],
       "labels": [
          "can",
          "carton",
          "milk_bottle",
          "water_bottle"
       ],
       "visualizations": "iVBORw0KGgoAAAAN.....",
       "attributions": [[[-4.2969e-04, -1.3090e-03,  7.7791e-04,  ...,  2.6677e-04,
                          -5.5195e-03,  1.7989e-03],
                          .
                          .
                          .
                         [-5.8236e-03, -7.9108e-04, -2.6963e-03,  ...,  2.6517e-03,
                           1.2546e-03,  6.6507e-04]]]
    }
]

이미지 분류 다중 레이블

다중 클래스 분류에 비해 다중 레이블 분류출력 스키마의 유일한 차이점은 설명을 생성할 수 있는 각 이미지에 여러 클래스가 있을 수 있다는 것입니다. visualizations 따라서 base64 이미지 문자열의 목록이며 attributions 선택한 각 클래스 confidence_score_threshold_multilabel 에 대한 특성 점수 목록입니다(기본값은 0.5).

visualizationsattributions 입력 요청에서 설정된 True 경우 model_explainability출력 visualizations 에는 다음과 같은 attributions값이 있습니다. 이러한 매개 변수에 대한 자세한 내용은 다음 표에 설명되어 있습니다. 확률 점수가 1보다 크거나 같은 confidence_score_threshold_multilabel모든 클래스에 대해 시각화 및 특성이 생성됩니다.

출력 키 설명
visualizations base64 문자열 형식의 이미지 목록(형식 포함)
Optional, String
attributions 각 다차원 배열이 셰이프인 각 클래스에 대해 픽셀 단위 특성 점수가 있는 다차원 배열 목록 [3, valid_crop_size, valid_crop_size]
Optional, List

Warning

온라인 엔드포인트에 대한 설명을 생성하는 동안 엔드포인트에서 시간 제한 문제를 방지하거나 GPU 인스턴스 유형이 있는 엔드포인트를 사용하려면 신뢰도 점수에 따라 몇 가지 클래스만 선택해야 합니다. 다중 레이블 분류에서 많은 수의 클래스에 대한 설명을 생성하려면 일괄 처리 채점 Notebook(SDK v1을 참조하세요.

[
    {
       "probs": [
          0.994,
          0.994,
          0.843,
          0.166
       ],
       "labels": [
          "can",
          "carton",
          "milk_bottle",
          "water_bottle"
       ],
       "visualizations": ["iVBORw0KGgoAAAAN.....", "iVBORw0KGgoAAAAN......", .....],
       "attributions": [
                        [[[-4.2969e-04, -1.3090e-03,  7.7791e-04,  ...,  2.6677e-04,
                           -5.5195e-03,  1.7989e-03],
                           .
                           .
                           .
                          [-5.8236e-03, -7.9108e-04, -2.6963e-03,  ...,  2.6517e-03,
                            1.2546e-03,  6.6507e-04]]],
                        .
                        .
                        .
                       ]
    }
]

개체 감지

Warning

XAI는 지원되지 않습니다. 따라서 점수만 반환됩니다. 점수 매기기 예제는 온라인 채점 섹션을 참조 하세요.

인스턴스 구분

Warning

XAI는 지원되지 않습니다. 따라서 점수만 반환됩니다. 점수 매기기 예제는 온라인 채점 섹션을 참조 하세요.

참고 항목

이 문서에 사용된 이미지는 Fridge Objects 데이터 세트에서 가져왔으며, 저작권은 Microsoft Corporation이며 MIT 라이선스에 따라 computervision-recipes/01_training_introduction.ipynb에서 사용할 수 있습니다.

다음 단계