Je veux utiliser un modèle d'interface utilisateur personnalisé Amazon SageMaker Ground Truth et des fonctions AWS Lambda pour une tâche d'étiquetage.
Solution
1. Créez un modèle d'interface utilisateur personnalisé pour la tâche d'étiquetage, comme illustré dans l'exemple suivant. Pour les tâches de segmentation sémantique, définissez la variable name (nom) sur crowd-semantic-segmentation, comme indiqué dans l'exemple suivant. Pour les tâches de cadre englobant, définissez la variable name (nom) sur boundingBox. Pour obtenir la liste complète des éléments HTML améliorés pour les modèles personnalisés, consultez 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 Amazon Resource Names (ARN) pour les fonctions Lambda de pre-processing (prétraitement) et d'annotation consolidation (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'
}
])
Informations connexes
Algorithme de segmentation sémantique