Disquez-le ! Un cas pratique d'IA de conduite assistée basée sur CANN, qui peut facilement gérer la détection de véhicules et le calcul de la distance des véhicules !

Résumé : Basée sur l'architecture informatique hétérogène Ascend AI CANN (Compute Architecture for Neural Networks), la version simplifiée de l'application d'IA de conduite assistée possède des fonctions de base telles que la détection de véhicules et le calcul de la distance des véhicules. Elle convient comme projet d'entrée de gamme pour conduite assistée.

Cet article est partagé par la communauté HUAWEI CLOUD " Disk it! Un cas pratique d'IA de conduite assistée basée sur CANN, qui peut facilement gérer la détection de véhicules et le calcul de la distance des véhicules ! ", auteur : Shengteng CANN.

introduction

L'avion bizarre du film de science-fiction incarne la rêverie infinie des êtres humains pour un voyage futur. Avec les progrès de la technologie, les voitures qui peuvent conduire elles-mêmes se rapprochent de plus en plus de nous. La surprise que la conduite autonome apporte aux humains n'est pas seulement le dépassement et le changement de voie automatiques, mais aussi ses diverses possibilités en termes de réduction des embouteillages, de réduction de la pollution de l'air et d'amélioration de la sécurité routière. Par conséquent, il a également attiré d'innombrables entreprises automobiles et entreprises technologiques à rejoindre cette voie de l'industrie et à s'efforcer de faire des percées.

Cependant, la conduite autonome ne s'obtient pas du jour au lendemain.En raison de goulots d'étranglement techniques et de restrictions imposées par les lois et réglementations en vigueur, les voitures intelligentes actuelles en sont au stade de la conduite semi-autonome (conduite assistée). Qu'est-ce que la conduite assistée ? En bref, à l'aide de la perception et de l'analyse automatiques de l'environnement de la voiture, le conducteur peut être conscient à l'avance des dangers possibles, augmentant ainsi le confort et la sécurité de la conduite automobile. Bien sûr, le système de conduite assistée est également très complexe.Afin de réaliser la polyvalence de la voiture dans une variété de scénarios complexes et la diversité du niveau technique, la technologie de l'intelligence artificielle est indissociable. Nous avons développé une version simplifiée de l'application d'IA de conduite assistée basée sur l'architecture informatique hétérogène Ascend AI CANN (Compute Architecture for Neural Networks), qui possède des fonctions de base telles que la détection de véhicules et le calcul de la distance des véhicules. ! Sans plus tarder, ouvrez le portail du projet : https://www.hiascend.com/zh/developer/mindx-sdk/driveassist

CANN est une architecture informatique hétérogène lancée par Huawei spécifiquement pour les scénarios d'IA. Il vise à améliorer l'efficacité du développement des utilisateurs et à libérer la puissance de calcul croissante du processeur Ascend AI. Il fournit également une interface de programmation AscendCL à plusieurs niveaux pour aider les utilisateurs à créer rapidement un plate-forme basée sur la plate-forme Ascend Applications IA et business.

Bien sûr, un système de conduite assistée au sens propre est beaucoup plus complexe que cette application d'IA. Ce qui suit présente principalement comment utiliser l'interface de programmation AscendCL pour effectuer une inférence prédictive sur la vidéo d'entrée, afin de réaliser une détection intelligente des véhicules et des voies lignes.

Algorithmes typiques de détection d'objets

Afin d'imiter l'identification et l'analyse du véhicule par le conducteur, une structure d'algorithme similaire au cerveau humain doit être établie pour découvrir les objets cibles et déterminer leur catégorie et leur emplacement. Dans le même temps, il est également nécessaire de résoudre une série de problèmes qui affectent la précision de la détection, tels que les interférences causées par l'apparence et la posture de la voiture, l'éclairage et l'occlusion. L'algorithme de détection de cible représenté par YOLO (You Only Look Once) offre plus de possibilités pour la détection de divers objets. De la détection des visages au contrôle du trafic, du comptage des foules à la surveillance des cultures, les algorithmes de détection d'objets jouent un rôle indispensable dans divers domaines. L'algorithme YOLO a maintenant été itéré vers la version v5. Ce projet utilise YOLOv4. Examinons sa structure.

Image de https://blog.csdn.net/andyjkt/article/details/107590669

Du point de vue de la structure de l'algorithme , YOLOv4 se compose de trois parties : la couche Backbone extrait les caractéristiques, la couche Neck extrait certaines caractéristiques plus complexes et enfin la couche Head calcule la sortie de prédiction.

1. Couche dorsale : Le framework CSPDarknet53 agrège différentes images à une granularité fine et forme un réseau neuronal convolutif avec des caractéristiques d'image, qui est principalement utilisé pour l'extraction de caractéristiques d'image. 

2. Cou couche : Il se compose d'une série de couches réseau telles que SPP ou PAN qui mélangent et combinent les caractéristiques de l'image, extraient certaines caractéristiques plus complexes et transmettent les caractéristiques de l'image à la couche de prédiction. 

3. Couche principale : Prédisez les caractéristiques de l'image et générez des catégories de prédiction de fusion des limites. Du point de vue du processus , YOLOv4 est principalement divisé en trois étapes de traitement : 

  1. Tout d'abord, l'image est divisée en plusieurs cellules de grille, et chaque grille est chargée de générer 3 boîtes englobantes et les confiances correspondantes.
  2. Ensuite, YOLOv4 utilisera l'algorithme de suppression non maximale (NMS) pour supprimer les boîtes englobantes avec une faible coïncidence avec les données étiquetées (vérité terrain).
  3. Après le traitement de régression, la position de la dernière boîte englobante restante est la position de la cible prédite YOLOv4.

La photo est tirée du papier YOLO original, voir la fin de l'article

Montez sur une puissante plate-forme de puissance de calcul pour rendre la formation "rapide" à voler.

Tout comme les humains maîtrisent une certaine compétence, le modèle d'algorithme lui-même a besoin d'une formation continue et d'essais et d'erreurs pour répondre aux besoins de scénarios commerciaux spécifiques.Face à des milliers de volumes de données et de paramètres, le temps de formation peut prendre plusieurs jours, voire le mois dernier À l'heure actuelle, une plate-forme informatique d'IA dotée d'une puissante puissance de calcul peut vous sauver du feu et de l'eau.

La plate-forme logicielle et matérielle de base d'Ascend AI, s'appuyant sur la puissante puissance de calcul du processeur Ascend AI, libère entièrement la puissance de calcul matérielle à l'aide de la co-optimisation logicielle et matérielle de l'architecture informatique hétérogène CANN, jetant une base solide pour une efficacité entraînement.

Nous savons que les modèles d'algorithmes d'IA peuvent être définis sur la base de différents cadres d'IA. Qu'il s'agisse du cadre d'IA open source Ascend MindSpore de Huawei ou d'autres cadres d'IA couramment utilisés tels que TensorFlow, PyTorch, Caffe, etc., CANN peut être facilement converti en un format de graphique exprimé Ascend IR (représentation intermédiaire) normalisé, protégeant les différences de cadre d'IA , vous permettant de le faire rapidement Migration d'algorithme, découvrez immédiatement la puissance de calcul croissante du processeur Ascend AI.

De plus, dans la nouvelle génération de la version CANN 5.0, il peut libérer pleinement la puissance de calcul croissante du matériel grâce à l'optimisation collaborative approfondie des logiciels et du matériel, comme l'optimisation de la compilation au niveau du graphique et au niveau de l'opérateur et le réglage automatique, et atteindre un amélioration significative des performances de formation des modèles d'IA. Pour les scénarios de formation de modèles courants, y compris la classification, la détection, la PNL et la segmentation sémantique, les performances peuvent être doublées, ce qui permet à l'ensemble du processus de formation de "voler".

Le modèle YOLOv4 original utilisé dans ce projet est formé sur la base du framework Pytorch et du processeur Ascend AI. Les développeurs peuvent le télécharger et l'utiliser directement, ou le recycler en fonction de la précision réelle :

https://www.hiascend.com/en/software/modelzoo/detail/2/e2c648dc7ffb473fb41d687a1a490e28

Interface AscendCL, aidant les développeurs à programmer efficacement

Avec le modèle d'algorithme AI formé, la détection intelligente des véhicules vidéo et des lignes de voie peut être réalisée à l'aide de l'interface de programmation AscendCL. AscendCL (Ascend Computing Language) est un ensemble de bibliothèques d'API en langage C pour le développement d'applications de raisonnement de réseau neuronal profond.Il a les capacités de gestion des ressources d'exécution, de chargement et d'exécution de modèles, de prétraitement d'images, etc., permettant aux développeurs de déverrouiller facilement la classification des images, Détection de cibles et autres applications d'IA. Et il protège la différence des processeurs sous-jacents pour les développeurs, de sorte que les développeurs n'ont besoin de maîtriser qu'un ensemble d'API, ils peuvent être pleinement appliqués à toute la série de processeurs AI d'Ascend. À l'aide de l'interface de programmation AscendCL et de la conception modulaire illustrée dans la figure ci-dessous, une application de détection de cible basée sur l'algorithme YOLOv4 peut être rapidement mise en œuvre.

Présentez d'abord le code de base. Dans l'étape de prétraitement, l'image lue par opencv est principalement convertie en une image conforme au format et à la taille standard de l'entrée du modèle (le code source est illustré dans la figure ci-dessous, veuillez consulter le lien à la fin de l'article pour le code de la version complète).

1. Tout d'abord, convertissez l'image BGR lue dans chaque image d'opencv en une image RVB et obtenez l'échelle du facteur d'échelle, le décalage de décalage et le facteur de décalage shift_ratio via la largeur et la hauteur requises de l'entrée du modèle et la largeur et la hauteur du image originale.
2. Redimensionnez l'image d'origine à une nouvelle largeur et hauteur pour obtenir image_, construisez une nouvelle image avec tous les 0, la largeur et la hauteur sont les mêmes que la largeur et la hauteur d'entrée du modèle. Remplissez image_ dans une image avec tous les 0 sous la forme de np.array, et tous ceux qui ne sont pas dans la plage de décalage sont 0, et convertissez le type de données de l'image en un type à virgule flottante 32 bits dans np.
3. Afin d'éliminer les images de données d'échantillon singulières, une normalisation supplémentaire est effectuée.
4. Enfin, modifiez le nombre de canaux à la première dimension de l'image et renvoyez l'image nouvellement générée et l'image d'origine.

Dans l'étape d'inférence, appelez la fonction execute dans acl_model pour exécuter le modèle (pour la version complète du code, voir le lien à la fin de l'article), l'image prétraitée sera envoyée au modèle YOLOv4 converti en om, et le résultat de l'inférence sera renvoyé.

Dans l'étape de post-traitement, le post-traitement comprend l'obtention des coordonnées et la confiance du cadre de détection en fonction des résultats d'inférence, l'utilisation de NMS pour éliminer les frontières redondantes, l'utilisation de la matrice de transformation de perspective pour calculer la distance du véhicule, l'utilisation d'opencv pour détecter le lignes de voie, et enfin dessin du cadre de détection de véhicule, détection Nouvelles images pour la classe de boîte, la distance et les lignes de voie.

Résumez le processus de développement global :

1. Application des ressources de gestion du fonctionnement : utilisée pour initialiser les ressources internes du système, cette partie est un processus fixe d'appel.
2. Chargez le fichier de modèle et créez la mémoire de sortie : convertissez le modèle formé en un modèle hors ligne om et chargez-le à partir du fichier. À ce stade, l'utilisateur doit gérer lui-même la mémoire du modèle exécuté et obtenir les informations de base du modèle en fonction du modèle chargé dans la mémoire, y compris la taille de la mémoire tampon des données d'entrée et de sortie du modèle. La mémoire de sortie du modèle est construite à partir des informations de base du modèle pour préparer la prochaine inférence de modèle.
3. Prétraitement des données : prétraitez les données d'image lues, puis construisez les données d'entrée du modèle. Tout d'abord, l'image dans la vidéo d'entrée est traitée image par image ; puis elle est convertie du format BGR au format RVB ; puis la taille de l'image est changée en 416x416 en utilisant le redimensionnement, et enfin divisée par 255 pour la normalisation afin d'éliminer l'influence de données singulières.
4. Modèle de raisonnement : Modèle de raisonnement basé sur les données d'entrée du modèle construit.
5. Analysez les résultats de l'inférence : en fonction de l'image détectée et de la confiance de chaque image obtenue par inférence, utilisez NMS pour éliminer les images redondantes et dessinez de nouvelles images et catégories sur l'image de sortie. De cette façon, une version simple de l'application de conduite assistée par IA développée sur la base de CANN a été développée, et les amis peuvent directement en ressentir l'effet en cliquant sur le lien suivant ! https://www.hiascend.com/en/developer/mindx-sdk/driveassist

Certaines personnes peuvent demander, comment la distance est-elle calculée ? En fait, le calcul de distance utilise le principe de transformation de perspective.La méthode getPerspectiveTransform d'opencv permet de calculer la distance en convertissant la vue droite prise pendant la conduite en vue de dessus. De plus, la caméra utilisée pour capturer l'image de conduite affecte également le calcul de la distance entre les véhicules. Il est nécessaire de trouver la matrice de paramètres interne et externe de la caméra et d'utiliser la technologie d'étalonnage de la caméra pour mapper les informations de distance dans l'image à la distance réelle dans le monde objectif en combinaison avec le coefficient de distorsion, afin de calculer la distance aux autres voitures. Comment trouver ces paramètres peut se référer au lien vidéo à la fin de l'article.

Notre code de projet est entièrement open source, et les partenaires intéressés peuvent descendre jusqu'à la fin de l'article pour accéder directement au code source. La petite application de conduite assistée par IA actuellement développée, pour une vidéo avec une résolution de 1280x720, une fréquence d'images de 29,97 et une durée de 16 secondes, la durée d'inférence pure d'une image à image unique sur le processeur Ascend AI est de 14,19 millisecondes, mais en raison du pré-traitement et du post-traitement se fait sur le CPU et affecte donc les performances globales, qui peuvent être améliorées par :

1. Le prétraitement et le post-traitement utilisent plusieurs threads pour le traitement parallèle en fonction du nombre de processeurs et du temps de traitement afin d'améliorer l'utilisation des processeurs Ascend AI.

2. Utilisez plusieurs processeurs Ascend AI pour un raisonnement multi-chemins afin d'améliorer encore les performances.

3. Optimisez l'algorithme de code, coulez la partie post-traitement du CPU vers le processeur Ascend AI pour réduire le temps de post-traitement, comment couler peut se référer à

https://gitee.com/ascend/samples/tree/master/python/level2_simple_inference/2_object_detection/YOLOV3_coco_detection_picture_with_postprocess_op

4. Utilisez l'outil Auto Tune pour régler le modèle et réduire le temps d'inférence unique du modèle

5. Utilisez l'outil de profilage pour analyser les opérateurs chronophages dans le modèle et optimiser les opérateurs

Les petits partenaires sont les bienvenus pour participer à l'amélioration du projet. Si vous avez des questions, n'hésitez pas à laisser un message dans le gîte interactif !

Résumer

Aujourd'hui, de nombreuses voitures, trains à grande vitesse et avions sont équipés de systèmes de conduite assistée, qui peuvent non seulement réduire la charge des conducteurs, mais également réduire la probabilité d'accidents. Alors que de plus en plus d'industries rejoignent la voie de l'IA, Ascend CANN réduira également considérablement le seuil d'utilisation des entreprises et des développeurs individuels en raison de ses avantages technologiques, créera l'expérience de performance ultime d'Ascend AI grâce à une innovation continue et accélérera la mise en œuvre de l'industrie des applications d'IA Step, aidez les partenaires à aller toujours plus loin sur la route de l'IA dans le futur !

Liens connexes

Lien vers l'expérience en ligne : https://www.hiascend.com/zh/developer/mindx-sdk/driveassist

Lien source Gitee : https://gitee.com/ascend/samples/tree/master/python/level2_simple_inference/2_object_detection/YOLOV4_coco_detection_car_video

Article original YOLOv4 : https://arxiv.org/abs/2004.10934

Article original de YOLO : https://arxiv.org/pdf/1506.02640.pdf

Implémentation du modèle YOLOv4 : https://github.com/AlexeyAB/darknet

Méthode de recherche des paramètres de la caméra : https://www.bilibili.com/video/BV1Fq4y1H7sx/

 

 

Cliquez sur Suivre pour en savoir plus sur les nouvelles technologies de HUAWEI CLOUD pour la première fois ~

{{o.name}}
{{m.name}}

おすすめ

転載: my.oschina.net/u/4526289/blog/5586150