Dela via


Datascheman för att träna modeller för visuellt innehåll med automatiserad maskininlärning (v1)

GÄLLER FÖR: Python SDK azureml v1

Viktigt!

Några av Azure CLI-kommandona i den här artikeln använder azure-cli-mltillägget , eller v1, för Azure Machine Learning. Stödet för v1-tillägget upphör den 30 september 2025. Du kan installera och använda v1-tillägget fram till det datumet.

Vi rekommenderar att du övergår till mltillägget , eller v2, före den 30 september 2025. Mer information om v2-tillägget finns i Azure Machine Learning CLI-tillägget och Python SDK v2.

Viktigt!

Den här funktionen är för närvarande i allmänt tillgänglig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Lär dig hur du formaterar dina JSONL-filer för dataförbrukning i automatiserade ML-experiment för uppgifter med visuellt innehåll under träning och slutsatsdragning.

Dataschema för träning

Azure Machine Learning AutoML for Images kräver att indata från bilddata förbereds i JSONL-format (JSON Lines). I det här avsnittet beskrivs indataformat eller schema för bildklassificering i flera klasser, bildklassificering med flera etiketter, objektidentifiering och instanssegmentering. Vi tillhandahåller också ett exempel på den slutliga träningen eller valideringen av JSON Lines-filen.

Bildklassificering (binär/flera klasser)

Indataformat/schema på varje JSON-rad:

{
   "image_url":"AmlDatastore://data_directory/../Image_name.image_format",
   "image_details":{
      "format":"image_format",
      "width":"image_width",
      "height":"image_height"
   },
   "label":"class_name",
}
Nyckel beskrivning Exempel
image_url Avbildningsplats i Azure Machine Learning-datalager
Required, String
"AmlDatastore://data_directory/Image_01.jpg"
image_details Bildinformation
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Bildtyp (alla tillgängliga bildformat i Pillow-biblioteket stöds)
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 Bredd på bilden
Optional, String or Positive Integer
"400px" or 400
height Bildens höjd
Optional, String or Positive Integer
"200px" or 200
label Klass/etikett för bilden
Required, String
"cat"

Exempel på en JSONL-fil för bildklassificering i flera klasser:

{"image_url": "AmlDatastore://image_data/Image_01.jpg", "image_details":{"format": "jpg", "width": "400px", "height": "258px"}, "label": "can"}
{"image_url": "AmlDatastore://image_data/Image_02.jpg", "image_details": {"format": "jpg", "width": "397px", "height": "296px"}, "label": "milk_bottle"}
.
.
.
{"image_url": "AmlDatastore://image_data/Image_n.jpg", "image_details": {"format": "jpg", "width": "1024px", "height": "768px"}, "label": "water_bottle"}

Bildexempel för bildklassificering i flera klasser.

Fleretiketter för bildklassificering

Följande är ett exempel på indataformat/schema i varje JSON-rad för bildklassificering.

{
   "image_url":"AmlDatastore://data_directory/../Image_name.image_format",
   "image_details":{
      "format":"image_format",
      "width":"image_width",
      "height":"image_height"
   },
   "label":[
      "class_name_1",
      "class_name_2",
      "class_name_3",
      "...",
      "class_name_n"
        
   ]
}
Nyckel beskrivning Exempel
image_url Avbildningsplats i Azure Machine Learning-datalager
Required, String
"AmlDatastore://data_directory/Image_01.jpg"
image_details Bildinformation
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Bildtyp (alla bildformat som är tillgängliga i Pillow-biblioteket stöds)
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 Bredd på bilden
Optional, String or Positive Integer
"400px" or 400
height Bildens höjd
Optional, String or Positive Integer
"200px" or 200
label Lista över klasser/etiketter i bilden
Required, List of Strings
["cat","dog"]

Exempel på en JSONL-fil för Multi-label för bildklassificering:

{"image_url": "AmlDatastore://image_data/Image_01.jpg", "image_details":{"format": "jpg", "width": "400px", "height": "258px"}, "label": ["can"]}
{"image_url": "AmlDatastore://image_data/Image_02.jpg", "image_details": {"format": "jpg", "width": "397px", "height": "296px"}, "label": ["can","milk_bottle"]}
.
.
.
{"image_url": "AmlDatastore://image_data/Image_n.jpg", "image_details": {"format": "jpg", "width": "1024px", "height": "768px"}, "label": ["carton","milk_bottle","water_bottle"]}

Bildexempel för fleretiketter för bildklassificering.

Objektidentifiering

Följande är ett exempel på en JSONL-fil för objektidentifiering.

{
   "image_url":"AmlDatastore://data_directory/../Image_name.image_format",
   "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"
      },
      "..."
   ]
}

Här

  • xmin = x koordinat för det övre vänstra hörnet av avgränsningsrutan
  • ymin = y koordinat för det övre vänstra hörnet av avgränsningsrutan
  • xmax = x koordinat för det nedre högra hörnet av avgränsningsrutan
  • ymax = y koordinat för det nedre högra hörnet av avgränsningsrutan
Nyckel beskrivning Exempel
image_url Avbildningsplats i Azure Machine Learning-datalager
Required, String
"AmlDatastore://data_directory/Image_01.jpg"
image_details Bildinformation
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Bildtyp (alla bildformat som är tillgängliga i Pillow-biblioteket stöds. Men för YOLO stöds endast bildformat som tillåts av 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 Bredd på bilden
Optional, String or Positive Integer
"499px" or 499
height Bildens höjd
Optional, String or Positive Integer
"665px" or 665
label (yttre nyckel) Lista över avgränsningsrutor, där varje ruta är en ordlista över label, topX, topY, bottomX, bottomY, isCrowd deras koordinater överst till vänster och längst ned till höger
Required, List of dictionaries
[{"label": "cat", "topX": 0.260, "topY": 0.406, "bottomX": 0.735, "bottomY": 0.701, "isCrowd": 0}]
label (inre nyckel) Klass/etikett för objektet i avgränsningsrutan
Required, String
"cat"
topX Förhållandet mellan x koordinaten i det övre vänstra hörnet i avgränsningsrutan och bildens bredd
Required, Float in the range [0,1]
0.260
topY Förhållandet mellan y-koordinaten i det övre vänstra hörnet i avgränsningsrutan och bildens höjd
Required, Float in the range [0,1]
0.406
bottomX Förhållandet mellan x koordinaten i det nedre högra hörnet i avgränsningsrutan och bildens bredd
Required, Float in the range [0,1]
0.735
bottomY Förhållandet mellan y-koordinaten i det nedre högra hörnet av avgränsningsrutan och bildens höjd
Required, Float in the range [0,1]
0.701
isCrowd Anger om avgränsningsrutan är runt mängden objekt. Om den här särskilda flaggan har angetts hoppar vi över den här specifika avgränsningsrutan när måttet beräknas.
Optional, Bool
0

Exempel på en JSONL-fil för objektidentifiering:

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

Bildexempel för objektidentifiering.

Instanssegmentering

Till exempel segmentering stöder automatiserad ML endast polygon som indata och utdata, inga masker.

Följande är en JSONL-exempelfil för instanssegmentering.

{
   "image_url":"AmlDatastore://data_directory/../Image_name.image_format",
   "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"]]
      }
   ]
}
Nyckel beskrivning Exempel
image_url Avbildningsplats i Azure Machine Learning-datalager
Required, String
"AmlDatastore://data_directory/Image_01.jpg"
image_details Bildinformation
Optional, Dictionary
"image_details":{"format": "jpg", "width": "400px", "height": "258px"}
format Bildtyp
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 Bredd på bilden
Optional, String or Positive Integer
"499px" or 499
height Bildens höjd
Optional, String or Positive Integer
"665px" or 665
label (yttre nyckel) Lista över masker, där varje mask är en ordlista med 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 (inre nyckel) Klass/etikett för objektet i masken
Required, String
"cat"
isCrowd Anger om masken är runt mängden objekt
Optional, Bool
0
polygon Polygonkoordinater för objektet
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]]

Exempel på en JSONL-fil för instanssegmentering:

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

Bildexempel för instanssegmentering.

Dataformat för slutsatsdragning

I det här avsnittet dokumenterar vi det indataformat som krävs för att göra förutsägelser när du använder en distribuerad modell. Alla ovan nämnda bildformat accepteras med innehållstypen application/octet-stream.

Indataformat

Följande är det indataformat som behövs för att generera förutsägelser för alla aktiviteter med hjälp av en aktivitetsspecifik modellslutpunkt. När vi har distribuerat modellen kan vi använda följande kodfragment för att få förutsägelser för alla uppgifter.

# input image for inference
sample_image = './test_image.jpg'
# load image data
data = open(sample_image, 'rb').read()
# set the content type
headers = {'Content-Type': 'application/octet-stream'}
# if authentication is enabled, set the authorization header
headers['Authorization'] = f'Bearer {key}'
# make the request and display the response
response = requests.post(scoring_uri, data, headers=headers)

Utdataformat

Förutsägelser som görs på modellslutpunkter följer olika struktur beroende på aktivitetstyp. Det här avsnittet utforskar utdataformaten för bildklassificering med flera klasser, bildklassificering med flera etiketter, objektidentifiering och instanssegmenteringsuppgifter.

Bildklassificering

Slutpunkten för bildklassificering returnerar alla etiketter i datamängden och deras sannolikhetspoäng för indatabilden i följande format.

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

Fleretiketter för bildklassificering

För bildklassificering med flera etiketter returnerar modellslutpunkten etiketter och deras sannolikheter.

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

Objektidentifiering

Objektidentifieringsmodellen returnerar flera rutor med sina skalade koordinater uppe till vänster och längst ned till höger tillsammans med boxetikett och konfidenspoäng.

{
   "filename":"/tmp/tmpdkg2wkdy",
   "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
      }
   ]
}

Instanssegmentering

I instanssegmentering består utdata av flera rutor med sina skalade koordinater överst till vänster och längst ned till höger, etiketter, konfidenspoäng och polygoner (inte masker). Här är polygonvärdena i samma format som vi diskuterade i schemaavsnittet.

{
   "filename":"/tmp/tmpi8604s0h",
   "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
            ]
         ]
      }
   ]
}

Kommentar

Bilderna som används i den här artikeln kommer från datauppsättningen Fridge Objects, copyright © Microsoft Corporation och finns på computervision-recipes/01_training_introduction.ipynb under MIT-licensen.

Nästa steg