Classificare oggetti di immagini utilizzando un riquadro di delimitazione - Amazon SageMaker AI

Classificare oggetti di immagini utilizzando un riquadro di delimitazione

Le immagini utilizzate per addestrare un modello di machine learning spesso contengono più di un oggetto. Per classificare e localizzare uno o più oggetti all'interno delle immagini, puoi utilizzare il tipo di attività di etichettatura del rettangolo di selezione Amazon SageMaker Ground Truth. In questo contesto, la localizzazione indica la posizione pixel del riquadro di delimitazione. È possibile creare un processo di etichettatura del riquadro di delimitazione utilizzando la sezione Ground Truth della console di Amazon SageMaker AI o l’operazione CreateLabelingJob.

Importante

Per questo tipo di attività, se si crea un file manifest personalizzato, utilizza "source-ref" per identificare la posizione di ciascun file immagine in Amazon S3 che desideri etichettare. Per ulteriori informazioni, consulta Dati di input.

Creazione di un processo di etichettatura del rettangolo di selezione (console)

È possibile seguire le istruzioni in Creare un processo di etichettatura (console) per scoprire come creare un processo di etichettatura del riquadro di delimitazione nella console SageMaker AI. Nella fase 10, scegli Immagine dal menu a discesa della categoria Attività e scegli Riquadro di delimitazione come tipo di attività.

Ground Truth fornisce un'interfaccia utente di lavoro simile alla seguente per le attività di etichettatura. Quando si crea il processo di etichettatura con la console, si specificano le istruzioni per consentire ai worker di completare il processo e un massimo di 50 etichette tra cui i worker possono scegliere.

GIF che mostra come disegnare un riquadro attorno a un oggetto per una categoria.

Creare un processo di etichettatura del riquadro di delimitazione (API)

Per creare un processo di etichettatura del riquadro di delimitazione, utilizzare l'operazione API SageMaker CreateLabelingJob. Questa API definisce l'operazione per tutti gli SDK AWS. Per visualizzare l'elenco degli SDK specifici del linguaggio supportati per questa operazione, consulta la sezione See Also di CreateLabelingJob.

Segui queste istruzioni su Creare un processo di etichettatura (API) ed effettua le seguenti operazioni durante la configurazione della richiesta:

  • Le funzioni Lambda di pre-annotazione per questo tipo di attività terminano con PRE-BoundingBox. Per trovare l'ARN Lamda di pre-annotazione per la Regione, consulta PreHumanTaskLambdaArn.

  • Le funzioni Lambda di consolidamento delle annotazioni per questo tipo di attività terminano con ACS-BoundingBox. Per trovare l'ARN Lamda di consolidamento delle annotazioni per la Regione, consulta AnnotationConsolidationLambdaArn.

Di seguito è riportato un esempio di richiesta AWS Python SDK (Boto3) per creare un processo di etichettatura nella Regione Stati Uniti orientali (Virginia settentrionale). Tutti i parametri in rosso devono essere sostituiti con le specifiche e le risorse.

response = client.create_labeling_job( LabelingJobName='example-bounding-box-labeling-job, LabelAttributeName='label', InputConfig={ 'DataSource': { 'S3DataSource': { 'ManifestS3Uri': 's3://bucket/path/manifest-with-input-data.json' } }, 'DataAttributes': { 'ContentClassifiers': [ 'FreeOfPersonallyIdentifiableInformation'|'FreeOfAdultContent', ] } }, OutputConfig={ 'S3OutputPath': 's3://bucket/path/file-to-store-output-data', 'KmsKeyId': 'string' }, RoleArn='arn:aws:iam::*:role/*, LabelCategoryConfigS3Uri='s3://bucket/path/label-categories.json', StoppingConditions={ 'MaxHumanLabeledObjectCount': 123, 'MaxPercentageOfInputDatasetLabeled': 123 }, HumanTaskConfig={ 'WorkteamArn': 'arn:aws:sagemaker:region:*:workteam/private-crowd/*', 'UiConfig': { 'UiTemplateS3Uri': 's3://bucket/path/worker-task-template.html' }, 'PreHumanTaskLambdaArn': 'arn:aws:lambda:us-east-1:432418664414:function:PRE-BoundingBox', 'TaskKeywords': [ 'Bounding Box', ], 'TaskTitle': 'Bounding Box task', 'TaskDescription': 'Draw bounding boxes around objects in an image', 'NumberOfHumanWorkersPerDataObject': 123, 'TaskTimeLimitInSeconds': 123, 'TaskAvailabilityLifetimeInSeconds': 123, 'MaxConcurrentTaskCount': 123, 'AnnotationConsolidationConfig': { 'AnnotationConsolidationLambdaArn': 'arn:aws:lambda:us-east-1:432418664414:function:ACS-BoundingBox' } }, Tags=[ { 'Key': 'string', 'Value': 'string' }, ] )

Fornire un modello per i processi di etichettatura dei riquadri di delimitazione

Se stai creando un'attività di etichettatura utilizzando l'API, devi fornire un modello di attività del worker in UiTemplateS3Uri. Copia e modifica il modello seguente. Modifica solo short-instructions, full-instructions e header. Carica questo modello in S3 e fornisci l'URI S3 per questo file in UiTemplateS3Uri.

<script src="https://assets.crowd.aws/crowd-html-elements.js"></script> <crowd-form> <crowd-bounding-box name="boundingBox" src="{{ task.input.taskObject | grant_read_access }}" header="please draw box" labels="{{ task.input.labels | to_json | escape }}" > <full-instructions header="Bounding box instructions"> <ol><li><strong>Inspect</strong> the image</li><li><strong>Determine</strong> if the specified label is/are visible in the picture.</li> <li><strong>Outline</strong> each instance of the specified label in the image using the provided “Box” tool.</li></ol> <ul><li>Boxes should fit tight around each object</li> <li>Do not include parts of the object are overlapping or that cannot be seen, even though you think you can interpolate the whole shape.</li> <li>Avoid including shadows.</li> <li>If the target is off screen, draw the box up to the edge of the image.</li> </full-instructions> <short-instructions> <h3><span style="color: rgb(0, 138, 0);">Good example</span></h3> <p>Enter description of a correct bounding box label and add images</p> <h3><span style="color: rgb(230, 0, 0);">Bad example</span></h3> <p>Enter description of an incorrect bounding box label and add images</p> </short-instructions> </crowd-bounding-box> </crowd-form>

Dati di output del riquadro di delimitazione

Dopo aver creato un processo di etichettatura del riquadro di delimitazione, i dati di output si troveranno nel bucket Amazon S3 specificato nel parametro S3OutputPath quando si utilizza l'API o nel campo Posizione del set di dati di output della sezione Panoramica dei processi della console.

Ad esempio, il file manifest di output di un'attività del riquadro di delimitazione a classe singola completato correttamente conterrà quanto segue:

[ { "boundingBox": { "boundingBoxes": [ { "height": 2832, "label": "bird", "left": 681, "top": 599, "width": 1364 } ], "inputImageProperties": { "height": 3726, "width": 2662 } } } ]

Il parametro boundingBoxes identifica la posizione del riquadro di delimitazione disegnato attorno a un oggetto identificato come «uccello» rispetto all'angolo in alto a sinistra dell'immagine che viene considerata la coordinata pixel (0,0). Nell'esempio precedente, left e top identifica la posizione del pixel nell'angolo in alto a sinistra del riquadro di delimitazione rispetto all'angolo in alto a sinistra dell'immagine. Le dimensioni del riquadro di delimitazione sono identificate con height e width. Il parametro inputImageProperties fornisce le dimensioni in pixel dell'immagine di input originale.

Quando utilizzi il tipo di attività di etichettatura del riquadro di delimitazione, puoi creare attività di etichettatura del riquadro di delimitazione a classe singola e multiclasse. Il file manifest di output di un riquadro di delimitazione multi-classe completato correttamente conterrà quanto segue:

[ { "boundingBox": { "boundingBoxes": [ { "height": 938, "label": "squirrel", "left": 316, "top": 218, "width": 785 }, { "height": 825, "label": "rabbit", "left": 1930, "top": 2265, "width": 540 }, { "height": 1174, "label": "bird", "left": 748, "top": 2113, "width": 927 }, { "height": 893, "label": "bird", "left": 1333, "top": 847, "width": 736 } ], "inputImageProperties": { "height": 3726, "width": 2662 } } } ]

Per ulteriori informazioni sul file manifest di output risultante da un processo di etichettatura del riquadro di delimitazione, consulta Output del processo di un riquadro di delimitazione.

Per ulteriori informazioni sul file manifest di output generato da Ground Truth e sulla struttura di file utilizzata da Ground Truth per archiviare i dati di output, consulta Etichettatura dei dati di output di un processo.