Projet : Intelligence Artificielle embarquée

Victor Jung/ novembre 5, 2019/ Nouvelles Technologies, Réalité Augmentée, Tech'Isen

Les avancées dans le domaine de l’IA ont permis de réduire le coût de certains algorithmes, offrant la possibilité de les utiliser sur des composants de taille réduite. Ce projet a pour but d’explorer, via des prototypes, différentes applications de l’intelligence artificielle embarquée.

Prototype 1 : Lunette de Réalité Augmentée DIY :

Principaux composants

VuFine est une technologie portable et modulable d’affichage haute définition. Son principal avantage est qu’il peut être utilisé et réutilisé dans divers projets.

Le principal obstacle est la puissance limitée du Raspberry Pi pour le traitement d’images en temps réel qui reste très gourmand. Nous avons donc optimisé le code en implémentant de la programmation en parallèle (Multi-threading) ainsi qu’en utilisant un Mobile Network. Pour ceux qui pensent que je parle chinois nous allons rapidement voir ce qu’est le Multi-threading et ce qu’est un Mobile Network.

Le multi-threading consiste à faire de la programmation en parallèle. Un programme classique s’exécute de façon séquentiel, CAD ligne d’instruction par ligne d’instruction, alors qu’avec la programmation en parallèle nous pouvons créer 2 flux d’instruction qui s’exécutent en même temps.

Un mobile network est un réseau de neurone spécialement conçu pour être implémenté dans des appareils qui possèdent moins de puissance que les ordinateurs classiques, comme les smartphones. Si vous voulez plus de renseignements sur les algorithmes de deep learning basse consommation ce lien pourrais vous intéresser.

Le code en 2 minutes

Nous avons créé un flux qui récupère les images filmées par la caméra et les affiches, tandis que l’autre flux vient récupérer l’image filmée et la traite via le réseau de neurone.

Les différents modèles

Nous avons testé plusieurs modèles afin de comparer leurs performances, nous avons étudiés deux types de modèles :

  • La reconnaissance d’objets
  • La détection de visage

Pour la reconnaissance d’objets nous avons utilisé YoloV3 et sa version light. Le modèle de base est entraîné sur la base d’image Coco contenant 80 classes (types d’objets différents).

Exemple d’utilisation de YoloV3

Néanmoins YoloV3 reste très lourd et trop gourmand pour du temps réel même sur des ordinateurs portables. Nous avons donc utilisé un mobile network ce qui nous a permis d’atteindre des performances raisonnable sur pc (15 fps), mais qui reste trop gourmand pour un Raspberry Pi.

Nous nous sommes ensuite tourné vers la détection de visage, qui consomme moins de ressources que la reconnaissance d’objets.

Nous avons extrait plusieurs modèles très intéressants de par leur faible consommation. Le modèle Haar Cascade, un algorithme basé sur les caractéristiques pseudo-Haar, qui est un des plus économes et rapide, mais ce modèle a des difficultés quand le visage n’est pas de face. C’est pour cela que nous avons choisis un modèle de deep learning nommé res10, il est légèrement plus lourd mais très précis même sur les visages de travers ou de côté.

Exemple d’utilisation de res10

Implémentation sur Raspberry Pi

Les ennuis commencent ici, en effet réaliser un traitement d’image en temps réel nécessite beaucoup de ressources. Après plusieurs séries de test nous nous sommes rendu compte que le Raspberry ne pourrait pas tenir une telle charge seul.

Conclusion

Le principale obstacle est de la carte embarqué, pour y remédier nous réfléchissons à faire des test sur des carte Nvidia Jetsen qui nous seront prêtés par le laboratoire Urbawood.

Ce sera tout pour ce premier article à propos de l’IA embarqué. Si vous avez des retours, questions ou envie d’apporter votre aide à ce projet, n’hésitez pas à vous exprimer dans l’espace commentaire.

Partager ce post

Laissez un Commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces HTML tags et attributs: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*