Comment puis-je utiliser un modèle d'interface utilisateur personnalisé avec des fonctions Lambda fournies par AWS dans Ground Truth ?

Date de la dernière mise à jour : 03/09/2020

Je souhaite utiliser un modèle d'interface utilisateur personnalisé Amazon SageMaker Ground Truth et des fonctions AWS Lambda pour un travail d'étiquetage.

Solution

1.    Créez un modèle d'interface utilisateur personnalisé pour le travail d'étiquetage, comme illustré dans l'exemple suivant. Pour les travaux de segmentation sémantique, définissez la variable name sur crowd-semantic-segmentation, comme le montre l'exemple suivant. Pour les travaux de cadre englobant, définissez la variable name sur boundingBox. Pour obtenir la liste complète des éléments HTML améliorés pour les modèles personnalisés, reportez-vous à la section Référence des éléments HTML crowd.

<script src="https://assets.crowd.aws/crowd-html-elements.js"></script>
<crowd-form>
    <crowd-semantic-segmentation name="crowd-semantic-segmentation" src="{{ task.input.taskObject | grant_read_access }}" header= "{{ task.input.header }}" labels="{{ task.input.labels | to_json | escape }}">

        <full-instructions header= "Segmentation Instructions">
            <ol>
                <li>Read the task carefully and inspect the image.</li>
                <li>Read the options and review the examples provided to understand more about the labels.</li>
                <li>Choose the appropriate label that best suits the image.</li>
            </ol>
        </full-instructions>

        <short-instructions>
            <p>Use the tools to label the requested items in the image</p>
        </short-instructions>
    </crowd-semantic-segmentation>
</crowd-form>

2.    Créez un fichier JSON pour les étiquettes. Exemple :

 {
        "labels": [
            {
                "label": "Chair"
            },
            ...
            {
                "label": "Oven"
            }
        ]

}

3.    Créez un fichier manifeste d'entrée pour les images. Exemple :

{"source-ref":"s3://awsdoc-example-bucket/input_manifest/apartment-chair.jpg"}
{"source-ref":"s3://awsdoc-example-bucket/input_manifest/apartment-carpet.jpg"}

4.    Chargez les fichiers HTML, manifeste et JSON sur Amazon Simple Storage Service (Amazon S3). Exemple :

import boto3
import os

bucket = 'awsdoc-example-bucket'
prefix = 'GroundTruthCustomUI'

boto3.Session().resource('s3').Bucket(bucket).Object(os.path.join(prefix, 'customUI.html')).upload_file('customUI.html')
boto3.Session().resource('s3').Bucket(bucket).Object(os.path.join(prefix, 'input.manifest')).upload_file('input.manifest')
boto3.Session().resource('s3').Bucket(bucket).Object(os.path.join(prefix, 'testLabels.json')).upload_file('testLabels.json')

5.    Récupérez les noms Amazon Resource Names (ARN) pour les fonctions Lambda de prétraitement et de consolidation des annotations. Par exemple, voici les ARN de segmentation sémantique :

arn:aws:lambda:eu-west-1:111122223333:function:PRE-SemanticSegmentation
arn:aws:lambda:eu-west-1:111122223333:function:ACS-SemanticSegmentation

6.    Créez la tâche d'étiquetage à l'aide d'un kit SDK AWS, tel que boto3. Remplacez ces valeurs dans l'exemple suivant :

INPUT_MANIFEST_IN_S3
S3_OUTPUT_PATH
IAM_ROLE_ARN
LABELS_JSON_FILE_IN_S3
WORKTEAM_ARN
HTML_TEMPLATE_IN_S3

import boto3

client = boto3.client('sagemaker')
client.create_labeling_job(LabelingJobName='SemanticSeg-CustomUI',
    LabelAttributeName='output-ref',
    InputConfig={
        'DataSource': {
            'S3DataSource': {
                'ManifestS3Uri': 'INPUT_MANIFEST_IN_S3'
            }
        },
        'DataAttributes': {
            'ContentClassifiers' : [
                'FreeOfPersonallyIdentifiableInformation',
            ]
        }
    },
    OutputConfig={
        'S3OutputPath' : 'S3_OUTPUT_PATH' 
    },
    RoleArn='IAM_ROLE_ARN',
    LabelCategoryConfigS3Uri='LABELS_JSON_FILE_IN_S3,
    StoppingConditions={
        'MaxPercentageOfInputDatasetLabeled': 100
    },
    HumanTaskConfig={
        'WorkteamArn': 'WORKTEAM_ARN',
        'UiConfig': {
            'UiTemplateS3Uri' : 'HTML_TEMPLATE_IN_S3'
        },
        'PreHumanTaskLambdaArn' : 'arn:aws:lambda:eu-west-1:111122223333:function:PRE-SemanticSegmentation',
        'TaskKeywords': [
            'SemanticSegmentation',
        ],
        'TaskTitle': 'Semantic Segmentation',
        'TaskDescription': 'Draw around the specified labels using the tools',
        'NumberOfHumanWorkersPerDataObject': 1,
        'TaskTimeLimitInSeconds': 3600,
        'TaskAvailabilityLifetimeInSeconds': 1800,
        'MaxConcurrentTaskCount': 1,
        'AnnotationConsolidationConfig': {
            'AnnotationConsolidationLambdaArn': 'arn:aws:lambda:eu-west-1:111122223333:function:ACS-SemanticSegmentation'
        }
    
    },
    Tags=[
        {
            'Key': 'reason',
            'Value': 'CustomUI'
        }
    ])

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?