Créez et formez des modèles de vision par ordinateur pour détecter les positions des voitures dans les images à l'aide d'Amazon SageMaker et d'Amazon Rekognition | Services Web Amazon

Créez et formez des modèles de vision par ordinateur pour détecter les positions des voitures dans les images à l'aide d'Amazon SageMaker et d'Amazon Rekognition | Services Web Amazon

La vision par ordinateur (CV) est l'une des applications les plus courantes de l'apprentissage automatique (ML) et de l'apprentissage en profondeur. Les cas d'utilisation vont des voitures autonomes à la modération de contenu sur les plateformes de médias sociaux, en passant par la détection du cancer et la détection automatisée des défauts. Amazon Reconnaissance est un service entièrement géré qui peut effectuer des tâches de CV telles que la détection d'objets, la détection de segments vidéo, la modération de contenu, etc. pour extraire des informations à partir de données sans avoir besoin d'une expérience préalable en ML. Dans certains cas, une solution plus personnalisée peut être nécessaire avec le service pour résoudre un problème très spécifique.

Dans cet article, nous abordons les domaines où le CV peut être appliqué à des cas d'utilisation où la pose des objets, leur position et leur orientation sont importantes. Un tel cas d'utilisation serait les applications mobiles destinées aux clients où un téléchargement d'image est requis. Cela peut être pour des raisons de conformité ou pour offrir une expérience utilisateur cohérente et améliorer l'engagement. Par exemple, sur les plateformes d'achat en ligne, l'angle sous lequel les produits sont présentés dans les images a un effet sur le taux d'achat de ce produit. Un tel cas est de détecter la position d'une voiture. Nous montrons comment vous pouvez combiner des solutions ML bien connues avec le post-traitement pour résoudre ce problème sur le cloud AWS.

Nous utilisons des modèles d'apprentissage en profondeur pour résoudre ce problème. La formation d'algorithmes ML pour l'estimation de pose nécessite beaucoup d'expertise et de données de formation personnalisées. Ces deux exigences sont difficiles et coûteuses à obtenir. Par conséquent, nous présentons deux options : une qui ne nécessite aucune expertise en ML et utilise Amazon Rekognition, et une autre qui utilise Amazon Sage Maker pour former et déployer un modèle ML personnalisé. Dans la première option, nous utilisons Amazon Rekognition pour détecter les roues de la voiture. Nous déduisons ensuite l'orientation de la voiture à partir des positions des roues à l'aide d'un système basé sur des règles. Dans la deuxième option, nous détectons les roues et autres pièces de la voiture à l'aide du Détecteur modèle. Ceux-ci sont à nouveau utilisés pour déduire la position de la voiture avec un code basé sur des règles. La deuxième option nécessite une expérience en ML mais est également plus personnalisable. Il peut être utilisé pour un post-traitement ultérieur sur l'image, par exemple, pour recadrer toute la voiture. Les deux options peuvent être formées sur des ensembles de données accessibles au public. Enfin, nous montrons comment vous pouvez intégrer cette solution de détection de pose de voiture dans votre application Web existante à l'aide de services tels que Passerelle d'API Amazon ainsi que AWS Amplifier.

Vue d'ensemble de la solution

Le diagramme suivant illustre l'architecture de la solution.

Créez et entraînez des modèles de vision par ordinateur pour détecter la position des voitures dans les images à l'aide d'Amazon SageMaker et d'Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

La solution consiste en une application Web fictive dans Amplify où un utilisateur peut télécharger une image et invoquer le modèle Amazon Rekognition ou le modèle Detectron personnalisé pour détecter la position de la voiture. Pour chaque option, nous hébergeons un AWS Lambda fonction derrière une API Gateway qui est exposée à notre application fictive. Nous avons configuré notre fonction Lambda pour qu'elle s'exécute avec le modèle Detectron formé dans SageMaker ou Amazon Rekognition.

Pré-requis

Pour cette procédure pas à pas, vous devez disposer des prérequis suivants:

Créer une application sans serveur à l'aide d'Amazon Rekognition

Notre première option montre comment vous pouvez détecter l'orientation des voitures dans les images à l'aide d'Amazon Rekognition. L'idée est d'utiliser Amazon Rekognition pour détecter l'emplacement de la voiture et de ses roues, puis d'effectuer un post-traitement pour déduire l'orientation de la voiture à partir de ces informations. L'ensemble de la solution est déployé à l'aide de Lambda, comme indiqué dans le Github référentiel. Ce dossier contient deux fichiers principaux : un Dockerfile qui définit l'image Docker qui s'exécutera dans notre fonction Lambda, et le app.py fichier, qui sera le point d'entrée principal de la fonction Lambda :

def lambda_handler(event, context): body_bytes = json.loads(event["body"])["image"].split(",")[-1] body_bytes = base64.b64decode(body_bytes) rek = boto3.client('rekognition') response = rek.detect_labels(Image={'Bytes': body_bytes}, MinConfidence=80) angle, img = label_image(img_string=body_bytes, response=response) buffered = BytesIO() img.save(buffered, format="JPEG") img_str = "data:image/jpeg;base64," + base64.b64encode(buffered.getvalue()).decode('utf-8')

La fonction Lambda attend un événement qui contient un en-tête et un corps, où le corps doit être l'image devant être étiquetée en tant qu'objet décodé en base64. Compte tenu de l'image, l'Amazon Rekognition detect_labels la fonction est appelée à partir de la fonction Lambda à l'aide Boto3. La fonction renvoie une ou plusieurs étiquettes pour chaque objet dans l'image et les détails de la boîte englobante pour toutes les étiquettes d'objet détectées dans le cadre de la réponse, ainsi que d'autres informations telles que la confiance de l'étiquette attribuée, les étiquettes ancêtres de l'étiquette détectée, éventuellement les alias de l'étiquette et les catégories auxquelles appartient l'étiquette détectée. Sur la base des étiquettes renvoyées par Amazon Rekognition, nous exécutons la fonction label_image, qui calcule l'angle de la voiture à partir des roues détectées comme suit :

n_wheels = len(wheel_instances) wheel_centers = [np.array(_extract_bb_coords(wheel, img)).mean(axis=0)
for wheel in wheel_instances] wheel_center_comb = list(combinations(wheel_centers, 2))
vecs = [(k, pair[0] - pair[1]) for k,pair in enumerate(wheel_center_comb)]
vecs = sorted(vecs, key = lambda vec: np.linalg.norm(vec[1])) vec_rel = vecs[1] if n_wheels == 3 else vecs[0]
angle = math.degrees(math.atan(vec_rel[1][1]/vec_rel[1][0])) wheel_centers_rel = [tuple(wheel.tolist()) for wheel in
wheel_center_comb[vec_rel[0]]]

Notez que l'application nécessite qu'une seule voiture soit présente dans l'image et renvoie une erreur si ce n'est pas le cas. Cependant, le post-traitement peut être adapté pour fournir des descriptions d'orientation plus granulaires, couvrir plusieurs voitures ou calculer l'orientation d'objets plus complexes.

Améliorer la détection des roues

Pour améliorer encore la précision de la détection des roues, vous pouvez utiliser Étiquettes personnalisées Amazon Rekognition. Semblable au réglage fin à l'aide de SageMaker pour former et déployer un modèle ML personnalisé, vous pouvez apporter vos propres données étiquetées afin qu'Amazon Rekognition puisse produire un modèle d'analyse d'image personnalisé pour vous en quelques heures seulement. Avec Rekognition Custom Labels, vous n'avez besoin que d'un petit ensemble d'images de formation spécifiques à votre cas d'utilisation, dans ce cas des images de voiture avec des angles spécifiques, car il utilise les capacités existantes d'Amazon Rekognition d'être formé sur des dizaines de millions d'images à travers de nombreuses catégories. Les étiquettes personnalisées Rekognition peuvent être intégrées en quelques clics seulement et de petites adaptations à la fonction Lambda que nous utilisons pour la solution Amazon Rekognition standard.

Entraîner un modèle à l'aide d'une tâche d'entraînement SageMaker

Dans notre deuxième option, nous formons un modèle d'apprentissage en profondeur personnalisé sur SageMaker. Nous utilisons le Cadre Detectron2 pour la segmentation des pièces automobiles. Ces segments sont ensuite utilisés pour déduire la position de la voiture.

Le framework Detectron2 est une bibliothèque qui fournit des algorithmes de détection et de segmentation de pointe. Detectron fournit une variété de modèles Mask R-CNN qui ont été formés sur le célèbre ensemble de données COCO (Common objects in Context). Pour construire notre modèle de détection d'objets de voiture, nous utilisons l'apprentissage par transfert pour affiner un modèle Mask R-CNN pré-entraîné sur le Segmentation des pièces automobiles base de données. Cet ensemble de données nous permet de former un modèle qui peut détecter les roues mais aussi d'autres pièces de voiture. Ces informations supplémentaires peuvent ensuite être utilisées dans les calculs d'angle de voiture par rapport à l'image.

L'ensemble de données contient des données annotées de pièces automobiles à utiliser pour les tâches de détection d'objets et de segmentation sémantique : environ 500 images de berlines, de camionnettes et de véhicules utilitaires sport (SUV), prises dans plusieurs vues (vues de face, de dos et de côté). Chaque image est annotée par 18 masques d'instance et cadres de délimitation représentant les différentes parties d'une voiture comme les roues, les rétroviseurs, les phares et les vitres avant et arrière. Nous avons modifié les annotations de base des roues de sorte que chaque roue soit considérée comme un objet individuel au lieu de considérer toutes les roues disponibles dans l'image comme un seul objet.

Nous utilisons Service de stockage simple Amazon (Amazon S3) pour stocker l'ensemble de données utilisé pour la formation du modèle Detectron avec les artefacts du modèle formé. De plus, le conteneur Docker qui s'exécute dans la fonction Lambda est stocké dans Registre des conteneurs élastiques Amazon (Amazon ECR). Le conteneur Docker dans la fonction Lambda est nécessaire pour inclure les bibliothèques et les dépendances requises pour exécuter le code. Nous pourrions alternativement utiliser Couches lambda, mais il est limité à un quota de taille de package de déploiement décompressé de 250 Mo et un maximum de cinq couches peuvent être ajoutées à une fonction Lambda.

Notre solution est basée sur SageMaker : nous étendons Conteneurs SageMaker Docker pour que PyTorch exécute notre PyTorch personnalisé code de formation. Ensuite, nous utilisons le SDK Python SageMaker pour encapsuler l'image d'entraînement dans un estimateur SageMaker PyTorch, comme illustré dans les extraits de code suivants :

d2_estimator = Estimator( image_uri=training_image_uri, role=role, sagemaker_session=sm_session, instance_count=1, instance_type=training_instance, output_path=f"s3://{session_bucket}/{prefix_model}", base_job_name=f"detectron2") d2_estimator.fit({ "training": training_channel, "validation": validation_channel, }, wait=True)

Enfin, nous commençons le travail de formation en appelant le fit() fonction sur l'estimateur PyTorch créé. Lorsque la formation est terminée, l'artefact de modèle formé est stocké dans le compartiment de session dans Amazon S3 pour être utilisé pour le pipeline d'inférence.

Déployer le modèle à l'aide de SageMaker et des pipelines d'inférence

Nous utilisons également SageMaker pour héberger le point de terminaison d'inférence qui exécute notre modèle Detectron personnalisé. L'infrastructure complète utilisée pour déployer notre solution est provisionnée à l'aide d'AWS CDK. Nous pouvons héberger notre modèle personnalisé via un Point de terminaison en temps réel SageMaker en appelant deploy sur l'estimateur PyTorch. C'est la deuxième fois que nous étendons un conteneur SageMaker PyTorch prédéfini pour inclure PyTorch Detectron. Nous l'utilisons pour exécuter le script d'inférence et héberger notre modèle PyTorch entraîné comme suit :

model = PyTorchModel( name="d2-sku110k-model", model_data=d2_estimator.model_data, role=role, sagemaker_session=sm_session, entry_point="predict.py", source_dir="src", image_uri=serve_image_uri, framework_version="1.6.0") predictor = model.deploy( initial_instance_count=1, instance_type="ml.g4dn.xlarge", endpoint_name="detectron-endpoint", serializer=sagemaker.serializers.JSONSerializer(), deserializer=sagemaker.deserializers.JSONDeserializer(), wait=True)

Notez que nous avons utilisé un GPU ml.g4dn.xlarge pour le déploiement car c'est le plus petit GPU disponible et suffisant pour cette démo. Deux composants doivent être configurés dans notre script d'inférence: chargement du modèle et service du modèle. La fonction model_fn() est utilisé pour charger le modèle formé qui fait partie du conteneur Docker hébergé et peut également être trouvé dans Amazon S3 et renvoyer un objet modèle qui peut être utilisé pour le modèle servant comme suit :

def model_fn(model_dir: str) -> DefaultPredictor: for p_file in Path(model_dir).iterdir(): if p_file.suffix == ".pth": path_model = p_file cfg = get_cfg() cfg.MODEL.WEIGHTS = str(path_model) return DefaultPredictor(cfg)

La fonction predict_fn() effectue la prédiction et renvoie le résultat. En plus d'utiliser notre modèle formé, nous utilisons une version pré-formée du modèle Mask R-CNN formé sur l'ensemble de données COCO pour extraire la voiture principale de l'image. Il s'agit d'une étape de post-traitement supplémentaire pour traiter les images contenant plusieurs voitures. Voir le code suivant :

def predict_fn(input_img: np.ndarray, predictor: DefaultPredictor) -> Mapping: pretrained_predictor = _get_pretraind_model() car_mask = get_main_car_mask(pretrained_predictor, input_img) outputs = predictor(input_img) fmt_out = { "image_height": input_object.shape[0], "image_width": input_object.shape[1], "pred_boxes": outputs["instances"].pred_boxes.tensor.tolist(), "scores": outputs["instances"].scores.tolist(), "pred_classes": outputs["instances"].pred_classes.tolist(), "car_mask": car_mask.tolist() } return fmt_out

Semblable à la solution Amazon Rekognition, les cadres de délimitation prévus pour le wheel class sont filtrés à partir des sorties de détection et fournis au module de post-traitement pour évaluer la position de la voiture par rapport à la sortie.

Enfin, nous avons également amélioré le post-traitement de la solution Detectron. Il utilise également les segments de différentes pièces automobiles pour déduire la solution. Par exemple, chaque fois qu'un pare-chocs avant est détecté, mais pas de pare-chocs arrière, on suppose que nous avons une vue de face de la voiture et l'angle correspondant est calculé.

Connectez votre solution à l'application web

Les étapes pour connecter les points de terminaison du modèle à Amplify sont les suivantes :

  • Clonez le référentiel d'applications que la pile AWS CDK a créé, nommé car-angle-detection-website-repo. Assurez-vous de le rechercher dans la région que vous avez utilisée pour le déploiement.
  • Copiez les points de terminaison API Gateway pour chacune des fonctions Lambda déployées dans le index.html fichier dans le référentiel précédent (il existe des espaces réservés où le point de terminaison doit être placé). Le code suivant est un exemple de ce à quoi ressemble cette section du fichier .html :
<td align="center" colspan="2">
<select id="endpoint">
<option value="https://ey82aaj8ch.execute-api.eu-central-1.amazonaws.com/prod/"> Amazon Rekognition</option>
<option value="https://nhq6q88xjg.execute-api.eu-central-1.amazonaws.com/prod/"> Amazon SageMaker Detectron</option>
</select>
<input class="btn" type="file" id="ImageBrowse" />
<input class="btn btn-primary" type="submit" value="Upload">
</td>

  • Enregistrez le fichier HTML et envoyez le changement de code à la branche principale distante.

Cela mettra à jour le fichier HTML dans le déploiement. L'application est maintenant prête à être utilisée.

  • Accédez à la console Amplify et localisez le projet que vous avez créé.

L'URL de l'application sera visible une fois le déploiement terminé.

  • Accédez à l'URL et amusez-vous avec l'interface utilisateur.

Créez et entraînez des modèles de vision par ordinateur pour détecter la position des voitures dans les images à l'aide d'Amazon SageMaker et d'Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Conclusion

Toutes nos félicitations! Nous avons déployé une architecture sans serveur complète dans laquelle nous avons utilisé Amazon Rekognition, mais avons également donné une option pour votre propre modèle personnalisé, avec cet exemple disponible sur GitHub. Si vous n'avez pas d'expertise en ML dans votre équipe ou suffisamment de données personnalisées pour former un modèle, vous pouvez sélectionner l'option qui utilise Amazon Rekognition. Si vous souhaitez plus de contrôle sur votre modèle, souhaitez le personnaliser davantage et disposer de suffisamment de données, vous pouvez choisir la solution SageMaker. Si vous avez une équipe de scientifiques des données, ils peuvent également souhaiter améliorer davantage les modèles et choisir une option plus personnalisée et flexible. Vous pouvez placer la fonction Lambda et la passerelle API derrière votre application Web à l'aide de l'une des deux options. Vous pouvez également utiliser cette approche pour un cas d'utilisation différent pour lequel vous souhaiterez peut-être adapter le code.

L'avantage de cette architecture sans serveur est que les blocs de construction sont entièrement interchangeables. Les possibilités sont presque illimitées. Alors, commencez dès aujourd'hui !

Comme toujours, AWS apprécie les commentaires. Veuillez soumettre vos commentaires ou questions.


À propos des auteurs

Créez et entraînez des modèles de vision par ordinateur pour détecter la position des voitures dans les images à l'aide d'Amazon SageMaker et d'Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Michel Waller est un consultant senior Data & AI avec AWS Professional Services et se passionne pour permettre aux clients de devenir axés sur les données et AWSome dans le cloud AWS. De plus, il aime voir grand avec les clients pour innover et inventer de nouvelles idées pour eux.

Créez et entraînez des modèles de vision par ordinateur pour détecter la position des voitures dans les images à l'aide d'Amazon SageMaker et d'Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Aamna Najmi est un Data Scientist avec AWS Professional Services. Elle est passionnée d'aider les clients à innover avec les technologies Big Data et Intelligence Artificielle pour exploiter la valeur commerciale et les informations à partir des données. Elle a de l'expérience dans le travail sur des plateformes de données et des projets d'IA/ML dans le secteur vertical des soins de santé et des sciences de la vie. Dans ses temps libres, elle aime jardiner et voyager dans de nouveaux endroits.

Créez et entraînez des modèles de vision par ordinateur pour détecter la position des voitures dans les images à l'aide d'Amazon SageMaker et d'Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Recherche verticale. Aï.David Sauerwein est Senior Data Scientist chez AWS Professional Services, où il accompagne les clients dans leur parcours IA/ML sur le cloud AWS. David se concentre sur les jumeaux numériques, la prévision et le calcul quantique. Il est titulaire d'un doctorat en physique théorique de l'Université d'Innsbruck, en Autriche. Il a également été chercheur doctoral et post-doctoral à l'Institut Max-Planck d'optique quantique en Allemagne. Pendant son temps libre, il aime lire, skier et passer du temps avec sa famille.

Créez et entraînez des modèles de vision par ordinateur pour détecter la position des voitures dans les images à l'aide d'Amazon SageMaker et d'Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Srikrishna Chaitanya Konduru est un scientifique principal des données avec les services AWS Professional. Il assiste les clients dans le prototypage et l'opérationnalisation de leurs applications ML sur AWS. Srikrishna se concentre sur la vision par ordinateur et la PNL. Il dirige également la conception de la plateforme ML et les initiatives d'identification des cas d'utilisation pour les clients de divers secteurs verticaux. Srikrishna est titulaire d'une maîtrise en génie biomédical de l'université RWTH Aachen, en Allemagne, avec une spécialisation en imagerie médicale.

Créez et entraînez des modèles de vision par ordinateur pour détecter la position des voitures dans les images à l'aide d'Amazon SageMaker et d'Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Ahmed Mansour est Data Scientist chez AWS Professional Services. Il fournit une assistance technique aux clients tout au long de leur parcours IA/ML sur le cloud AWS. Ahmed se concentre sur les applications de la PNL au domaine protéique avec RL. Il est titulaire d'un doctorat en ingénierie de l'Université technique de Munich, en Allemagne. Pendant son temps libre, il aime aller au gymnase et jouer avec ses enfants.

Horodatage:

Plus de Apprentissage automatique AWS