Module d’auto-étiquetage pour les systèmes d’assistance avancée à la conduite basés sur l’apprentissage approfondi sur AWS

Module d'auto-étiquetage pour les systèmes d'assistance à la conduite basés sur l'apprentissage approfondi sur AWS.

En vision par ordinateur (CV), l’ajout de balises pour identifier les objets d’intérêt ou de cadres de délimitation pour localiser les objets est appelé étiquetage. C’est l’une des tâches préalables pour préparer les données d’entraînement d’un modèle d’apprentissage profond. Des centaines de milliers d’heures de travail sont consacrées à générer des étiquettes de haute qualité à partir d’images et de vidéos pour divers cas d’utilisation de CV. Vous pouvez utiliser Amazon SageMaker Data Labeling de deux manières pour créer ces étiquettes :

  • Amazon SageMaker Ground Truth Plus – Ce service fournit une main-d’œuvre experte formée aux tâches de ML et peut vous aider à répondre à vos exigences en matière de sécurité des données, de confidentialité et de conformité. Vous téléchargez vos données et l’équipe Ground Truth Plus crée et gère les flux de travail d’étiquetage des données ainsi que la main-d’œuvre en votre nom.
  • Amazon SageMaker Ground Truth – Alternativement, vous pouvez gérer vos propres flux de travail d’étiquetage de données et la main-d’œuvre pour étiqueter les données.

Plus précisément, pour les systèmes de véhicules autonomes (AV) et les systèmes d’aide à la conduite avancée (ADAS) basés sur l’apprentissage profond, il est nécessaire d’étiqueter à partir de zéro des données multimodales complexes, y compris des flux synchronisés de LiDAR, de RADAR et de caméras multiples. Par exemple, la figure suivante montre une boîte englobante en 3D autour d’une voiture dans la vue du nuage de points pour les données LiDAR, des vues LiDAR orthogonales alignées sur le côté et sept flux de caméras différents avec des étiquettes projetées de la boîte englobante.

Les équipes AV/ADAS doivent étiqueter plusieurs milliers de trames à partir de zéro et s’appuient sur des techniques telles que la consolidation d’étiquettes, le calibrage automatique, la sélection de trames, l’interpolation de séquences de trames et l’apprentissage actif pour obtenir un seul ensemble de données étiquetées. Ground Truth prend en charge ces fonctionnalités. Pour une liste complète des fonctionnalités, consultez les fonctionnalités d’étiquetage de données Amazon SageMaker. Cependant, il peut être difficile, coûteux et chronophage d’étiqueter des dizaines de milliers de miles de vidéos enregistrées et de données LiDAR pour les entreprises qui créent des systèmes AV/ADAS. Une technique utilisée pour résoudre ce problème aujourd’hui est l’étiquetage automatique, qui est mis en évidence dans le diagramme suivant pour une conception de fonctions modulaires pour ADAS sur AWS.

Dans cet article, nous démontrons comment utiliser les fonctionnalités de SageMaker telles que les modèles Amazon SageMaker JumpStart et les capacités d’inférence asynchrones ainsi que les fonctionnalités de Ground Truth pour effectuer l’étiquetage automatique.

Aperçu de l’étiquetage automatique

L’étiquetage automatique (parfois appelé pré-étiquetage) se produit avant ou en parallèle des tâches d’étiquetage manuel. Dans ce module, le modèle le meilleur jusqu’à présent entraîné pour une tâche spécifique (par exemple, la détection des piétons ou la segmentation des voies) est utilisé pour générer des étiquettes de haute qualité. Les étiqueteurs manuels vérifient simplement ou ajustent les étiquettes créées automatiquement à partir de l’ensemble de données résultant. Cela est plus facile, plus rapide et moins cher que d’étiqueter ces grands ensembles de données à partir de zéro. Les modules en aval tels que les modules d’entraînement ou de validation peuvent utiliser ces étiquettes telles quelles.

L’apprentissage actif est un autre concept étroitement lié à l’étiquetage automatique. C’est une technique d’apprentissage automatique (ML) qui identifie les données qui doivent être étiquetées par vos travailleurs. La fonctionnalité d’étiquetage de données automatisée de Ground Truth est un exemple d’apprentissage actif. Lorsque Ground Truth lance une tâche d’étiquetage de données automatisée, il sélectionne un échantillon aléatoire d’objets de données d’entrée et les envoie à des travailleurs humains. Lorsque les données étiquetées sont retournées, elles sont utilisées pour créer un ensemble d’entraînement et un ensemble de validation. Ground Truth utilise ces ensembles de données pour former et valider le modèle utilisé pour l’étiquetage automatique. Ground Truth lance ensuite une tâche de transformation par lots pour générer des étiquettes pour les données non étiquetées, ainsi que des scores de confiance pour de nouvelles données. Les données étiquetées avec des scores de confiance faibles sont envoyées aux étiqueteurs humains. Ce processus de formation, de validation et de transformation par lots est répété jusqu’à ce que l’ensemble de données complet soit étiqueté.

En revanche, l’étiquetage automatique suppose qu’un modèle pré-entraîné de haute qualité existe (soit en interne au sein de l’entreprise, soit publiquement dans un hub). Ce modèle est utilisé pour générer des étiquettes qui peuvent être fiables et utilisées pour des tâches en aval telles que la vérification des étiquettes, la formation ou la simulation. Ce modèle pré-entraîné dans le cas des systèmes AV/ADAS est déployé sur la voiture au niveau de la périphérie, et peut être utilisé dans des tâches d’inférence par lots à grande échelle sur le cloud pour générer des étiquettes de haute qualité.

JumpStart propose des modèles pré-entraînés et open-source pour une large gamme de types de problèmes pour vous aider à démarrer avec l’apprentissage automatique. Vous pouvez utiliser JumpStart pour partager des modèles au sein de votre organisation. Commençons !

Aperçu de la solution

Pour cet article, nous décrivons les principales étapes sans passer en revue chaque cellule de notre notebook d’exemple. Pour suivre ou essayer vous-même, vous pouvez exécuter le notebook Jupyter dans Amazon SageMaker Studio.

Le diagramme suivant donne un aperçu de la solution.

Configuration du rôle et de la session

Pour cet exemple, nous avons utilisé un noyau Data Science 3.0 dans Studio sur une instance de type ml.m5.large. Tout d’abord, nous effectuons quelques imports de base et configurons le rôle et la session pour une utilisation ultérieure dans le notebook :

import sagemaker, boto3, json
from sagemaker import get_execution_role
from utils import *

Créer votre modèle en utilisant SageMaker

Dans cette étape, nous créons un modèle pour la tâche d’étiquetage automatique. Vous pouvez choisir parmi trois options pour créer un modèle :

  • Créer un modèle à partir de JumpStart – Avec JumpStart, nous pouvons effectuer une inférence sur le modèle pré-entraîné, même sans l’avoir affiné au préalable sur un nouvel ensemble de données
  • Utiliser un modèle partagé via JumpStart avec votre équipe ou votre organisation – Vous pouvez utiliser cette option si vous souhaitez utiliser un modèle développé par l’une des équipes de votre organisation
  • Utiliser un endpoint existant – Vous pouvez utiliser cette option si vous avez déjà déployé un modèle existant dans votre compte

Pour utiliser la première option, nous sélectionnons un modèle à partir de JumpStart (ici, nous utilisons mxnet-is-mask-rcnn-fpn-resnet101-v1d-coco. Une liste de modèles est disponible dans le fichier models_manifest.json fourni par JumpStart.

Nous utilisons ce modèle JumpStart qui est disponible publiquement et entraîné sur la tâche de segmentation d’instance, mais vous pouvez également utiliser un modèle privé. Dans le code suivant, nous utilisons les image_uris, model_uris et script_uris pour récupérer les bonnes valeurs de paramètres à utiliser dans l’API sagemaker.model.Model pour créer le modèle MXNet :

from sagemaker import image_uris, model_uris, script_uris, hyperparameters
from sagemaker.model import Model
from sagemaker.predictor import Predictor
from sagemaker.utils import name_from_base

endpoint_name = name_from_base(f"jumpstart-example-infer-{model_id}")
inference_instance_type = "ml.p3.2xlarge"

# Récupérer l'URI du conteneur Docker d'inférence
deploy_image_uri = image_uris.retrieve(
    region=None,
    framework=None,  # inféré automatiquement à partir de model_id
    image_scope="inference",
    model_id=model_id,
    model_version=model_version,
    instance_type=inference_instance_type,
)

# Récupérer l'URI du script d'inférence. Cela inclut les scripts de chargement du modèle, de gestion de l'inférence, etc.
deploy_source_uri = script_uris.retrieve(
    model_id=model_id, model_version=model_version, script_scope="inference"
)


# Récupérer l'URI du modèle de base
base_model_uri = model_uris.retrieve(
    model_id=model_id, model_version=model_version, model_scope="inference"
)

# Créer l'instance du modèle SageMaker
model = Model(
    image_uri=deploy_image_uri,
    source_dir=deploy_source_uri,
    model_data=base_model_uri,
    entry_point="inference.py",  # fichier de point d'entrée dans source_dir et présent dans deploy_source_uri
    role=aws_role,
    predictor_cls=Predictor,
    name=endpoint_name,
)

Configuration de l’inférence asynchrone et de la mise à l’échelle

Ici, nous configurons une configuration d’inférence asynchrone avant de déployer le modèle. Nous avons choisi l’inférence asynchrone car elle peut gérer des tailles de charge utile importantes et répondre aux exigences de latence quasi temps réel. De plus, vous pouvez configurer l’endpoint pour qu’il se mette à l’échelle automatiquement et appliquer une stratégie de mise à l’échelle pour définir le nombre d’instances à zéro lorsqu’il n’y a aucune requête à traiter. Dans le code suivant, nous définissons max_concurrent_invocations_per_instance sur 4. Nous configurons également la mise à l’échelle automatique de sorte que l’endpoint se mette à l’échelle lorsque cela est nécessaire et se réduise à zéro une fois le travail d’étiquetage automatique terminé.

from sagemaker.async_inference.async_inference_config import AsyncInferenceConfig

async_config = AsyncInferenceConfig(
    output_path=f"s3://{sess.default_bucket()}/asyncinference/output",
    max_concurrent_invocations_per_instance=4)
.
.
.
response = client.put_scaling_policy(
    PolicyName="Invocations-ScalingPolicy",
    ServiceNamespace="sagemaker",  # L'espace de noms du service AWS qui fournit la ressource.
    ResourceId=resource_id,  # Nom du point de terminaison
    ScalableDimension="sagemaker:variant:DesiredInstanceCount",  # SageMaker ne prend en charge que le nombre d'instances
    PolicyType="TargetTrackingScaling",  # 'StepScaling'|'TargetTrackingScaling'
    TargetTrackingScalingPolicyConfiguration={
        "TargetValue": 5.0,  # La valeur cible pour la métrique. - ici la métrique est - SageMakerVariantInvocationsPerInstance
        "CustomizedMetricSpecification": {
            "MetricName": "ApproximateBacklogSizePerInstance",
            "Namespace": "AWS/SageMaker",
            "Dimensions": [{"Name": "EndpointName", "Value": endpoint_name}],
            "Statistic": "Average",
        },
        "ScaleInCooldown": 300,  
        "ScaleOutCooldown": 300 
    },
)

Télécharger les données et effectuer une inférence

Nous utilisons l’ensemble de données saisonnières Ford Multi-AV du catalogue de données ouvertes d’AWS.

Tout d’abord, nous téléchargeons et préparons les données pour l’inférence. Nous avons fourni des étapes de prétraitement pour traiter l’ensemble de données dans le notebook ; vous pouvez les modifier pour traiter votre ensemble de données. Ensuite, à l’aide de l’API SageMaker, nous pouvons démarrer le travail d’inférence asynchrone de la manière suivante :

import glob
import time

max_images = 10
input_locations,output_locations, = [], []

for i, file in enumerate(glob.glob("data/processedimages/*.png")):
    input_1_s3_location = upload_image(sess,file,sess.default_bucket())
    input_locations.append(input_1_s3_location)
    async_response = base_model_predictor.predict_async(input_path=input_1_s3_location)
    output_locations.append(async_response.output_path)
    if i > max_images:
        break

Cela peut prendre jusqu’à 30 minutes ou plus en fonction de la quantité de données que vous avez téléchargée pour l’inférence asynchrone. Vous pouvez visualiser l’une de ces inférences comme suit :

plot_response('data/single.out')

Convertir la sortie d’inférence asynchrone en un manifeste d’entrée Ground Truth

À cette étape, nous créons un manifeste d’entrée pour un travail de vérification de boîte englobante sur Ground Truth. Nous téléchargeons le modèle d’interface utilisateur Ground Truth et le fichier des catégories d’étiquettes, et créons le travail de vérification. Le notebook lié à cet article utilise une main-d’œuvre privée pour effectuer l’étiquetage ; vous pouvez le modifier si vous utilisez d’autres types de main-d’œuvre. Pour plus de détails, reportez-vous au code complet dans le notebook.

Vérifier les étiquettes du processus d’étiquetage automatique dans Ground Truth

À cette étape, nous terminons la vérification en accédant au portail d’étiquetage. Pour plus de détails, reportez-vous ici .

Lorsque vous accédez au portail en tant que membre de la main-d’œuvre, vous pourrez voir les boîtes englobantes créées par le modèle JumpStart et apporter les ajustements nécessaires.

Vous pouvez utiliser ce modèle pour répéter l’étiquetage automatique avec de nombreux modèles spécifiques à des tâches, fusionner éventuellement des étiquettes et utiliser l’ensemble de données étiquetées résultant dans des tâches en aval.

Nettoyage

À cette étape, nous procédons au nettoyage en supprimant le point de terminaison et le modèle créés lors des étapes précédentes :

# Supprimer le point de terminaison SageMaker
base_model_predictor.delete_model()
base_model_predictor.delete_endpoint()

Conclusion

Dans cet article, nous avons parcouru un processus d’étiquetage automatique impliquant JumpStart et une inférence asynchrone. Nous avons utilisé les résultats du processus d’étiquetage automatique pour convertir et visualiser des données étiquetées sur un ensemble de données du monde réel. Vous pouvez utiliser la solution pour effectuer l’étiquetage automatique avec de nombreux modèles spécifiques à des tâches, fusionner éventuellement des étiquettes et utiliser l’ensemble de données étiquetées résultant dans des tâches en aval. Vous pouvez également explorer l’utilisation d’outils tels que le modèle Segment Anything pour générer des masques de segment dans le cadre du processus d’étiquetage automatique. Dans les prochains articles de cette série, nous aborderons le module de perception et la segmentation. Pour plus d’informations sur JumpStart et l’inférence asynchrone, reportez-vous respectivement à SageMaker JumpStart et Asynchronous inference. Nous vous encourageons à réutiliser ce contenu pour des cas d’utilisation au-delà de l’AV/ADAS et à contacter AWS pour toute aide nécessaire.

We will continue to update IPGirl; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Apprentissage automatique

Le sac à dos qui résout le biais de ChatGPT les modèles linguistiques de sac à dos sont des méthodes d'IA alternatives pour les transformateurs.

Les modèles de langage de l’IA sont en train de devenir une partie essentielle de nos vies. Nous utilisons Goog...

AI

Les chercheurs d'Apple proposent un réseau de bout en bout produisant des reconstructions 3D détaillées à partir d'images posées

Avez-vous déjà joué à GTA-5 ? On est admiratif des graphismes 3D du jeu. Contrairement aux graphismes 2D sur un plan ...

AI

Importance des variables dans les Forêts Aléatoires

Les forêts aléatoires et les généralisations (en particulier, les forêts aléatoires généralisées (GRF) et les forêts ...

AI

Apple et Google ignorent ChatGPT comme Application de l'année

Dans un revirement surprenant, les géants de la technologie Apple et Google se sont écartés de leurs habitudes habitu...

AI

Cette newsletter sur l'IA est tout ce dont vous avez besoin #58

Cette semaine, nous avons été enthousiasmés de voir deux nouvelles avancées en IA en dehors du domaine du TALN. La de...

AI

Comment utiliser ChatGPT pour convertir du texte en une présentation PowerPoint

Une façon rapide de convertir un long texte en une courte présentation PowerPoint en utilisant uniquement ChatGPT.